diff --git a/android/README b/android/README
index 32024ef..9534036 100644
--- a/android/README
+++ b/android/README
@@ -48,69 +48,105 @@
 the package is built.
 
 
-For a rooted device it is possible to install libusb into the system
-image of a running device:
-
- 1. Enable ADB on the device.
-
- 2. Connect the device to a machine running ADB.
-
- 3. Execute the following commands on the machine
-    running ADB:
-
-    # Make the system partition writable
-    adb shell su -c "mount -o remount,rw /system"
-
-    # Install libusb
-    adb push obj/local/armeabi/libusb1.0.so /sdcard/
-    adb shell su -c "cat > /system/lib/libusb1.0.so < /sdcard/libusb1.0.so"
-    adb shell rm /sdcard/libusb1.0.so
-
-    # Install the samples and tests
-    for B in listdevs fxload xusb sam3u_benchmark hotplugtest stress
-    do
-      adb push "obj/local/armeabi/$B" /sdcard/
-      adb shell su -c "cat > /system/bin/$B < /sdcard/$B"
-      adb shell su -c "chmod 0755 /system/bin/$B"
-      adb shell rm "/sdcard/$B"
-    done
-
-    # Make the system partition read only again
-    adb shell su -c "mount -o remount,ro /system"
-
-    # Run listdevs to
-    adb shell su -c "listdevs"
-
- 4. If your device only has a single OTG port then ADB can generally
-    be switched to using Wifi with the following commands when connected
-    via USB:
-
-    adb shell netcfg
-    # Note the wifi IP address of the phone
-    adb tcpip 5555
-    # Use the IP address from netcfg
-    adb connect 192.168.1.123:5555
-
 Runtime Permissions:
 --------------------
 
-The default system configuration on most Android device will not allow
-access to USB devices. There are several options for changing this.
+The Runtime Permissions on Android can be transfered from Java to Native
+over the following approach:
 
-If you have control of the system image then you can modify the
-ueventd.rc used in the image to change the permissions on
-/dev/bus/usb/*/*. If using this approach then it is advisable to
-create a new Android permission to protect access to these files.
-It is not advisable to give all applications read and write permissions
-to these files.
+  JAVA:
 
-For rooted devices the code using libusb could be executed as root
-using the "su" command. An alternative would be to use the "su" command
-to change the permissions on the appropriate /dev/bus/usb/ files.
+   --> Obtain USB permissions over the android.hardware.usb.UsbManager class
 
-Users have reported success in using android.hardware.usb.UsbManager
-to request permission to use the UsbDevice and then opening the
-device. The difficulties in this method is that there is no guarantee
-that it will continue to work in the future Android versions, it
-requires invoking Java APIs and running code to match each
-android.hardware.usb.UsbDevice to a libusb_device.
+      usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
+      HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
+      for (UsbDevice usbDevice : deviceList.values()) {
+          usbManager.requestPermission(usbDevice, mPermissionIntent);
+      }
+
+   --> Get the native FileDescriptor of the UsbDevice and transfer it to
+       Native over JNI or JNA
+
+      UsbDeviceConnection usbDeviceConnection = usbManager.openDevice(camDevice);
+      int fileDescriptor = usbDeviceConnection.getFileDescriptor();
+
+   --> JNA sample method:
+
+      JNA.INSTANCE.set_the_native_Descriptor(fileDescriptor);
+
+  NATIVE:
+
+   --> Initialize libusb on Android
+
+      set_the_native_Descriptor(int fileDescriptor) {
+          libusb_context *ctx;
+          libusb_device_handle *devh;
+          libusb_set_option(&ctx, LIBUSB_OPTION_NO_DEVICE_DISCOVERY, NULL);
+          libusb_init(&ctx);
+          libusb_wrap_sys_device(NULL, (intptr_t)fileDescriptor, &devh);
+      }
+      /* From this point you can regulary use all libusb functions as usual */
+
+   About LIBUSB_OPTION_NO_DEVICE_DISCOVERY:
+
+    The method libusb_set_option(&ctx, LIBUSB_OPTION_NO_DEVICE_DISCOVERY, NULL)
+    does not affect the ctx.
+    It allows initializing libusb on unrooted Android devices by skipping
+    the device enumeration.
+
+Rooted Devices:
+---------------
+
+    For rooted devices the code using libusb could be executed as root
+    using the "su" command. An alternative would be to use the "su" command
+    to change the permissions on the appropriate /dev/bus/usb/ files.
+
+    Users have reported success in using android.hardware.usb.UsbManager
+    to request permission to use the UsbDevice and then opening the
+    device. The difficulties in this method is that there is no guarantee
+    that it will continue to work in the future Android versions, it
+    requires invoking Java APIs and running code to match each
+    android.hardware.usb.UsbDevice to a libusb_device.
+
+    For a rooted device it is possible to install libusb into the system
+    image of a running device:
+
+     1. Enable ADB on the device.
+
+     2. Connect the device to a machine running ADB.
+
+     3. Execute the following commands on the machine
+        running ADB:
+
+        # Make the system partition writable
+        adb shell su -c "mount -o remount,rw /system"
+
+        # Install libusb
+        adb push obj/local/armeabi/libusb1.0.so /sdcard/
+        adb shell su -c "cat > /system/lib/libusb1.0.so < /sdcard/libusb1.0.so"
+        adb shell rm /sdcard/libusb1.0.so
+
+        # Install the samples and tests
+        for B in listdevs fxload xusb sam3u_benchmark hotplugtest stress
+        do
+          adb push "obj/local/armeabi/$B" /sdcard/
+          adb shell su -c "cat > /system/bin/$B < /sdcard/$B"
+          adb shell su -c "chmod 0755 /system/bin/$B"
+          adb shell rm "/sdcard/$B"
+        done
+
+        # Make the system partition read only again
+        adb shell su -c "mount -o remount,ro /system"
+
+        # Run listdevs to
+        adb shell su -c "listdevs"
+
+     4. If your device only has a single OTG port then ADB can generally
+        be switched to using Wifi with the following commands when connected
+        via USB:
+
+        adb shell netcfg
+        # Note the wifi IP address of the phone
+        adb tcpip 5555
+        # Use the IP address from netcfg
+        adb connect 192.168.1.123:5555
diff --git a/libusb/version_nano.h b/libusb/version_nano.h
index f754220..c1bd32c 100644
--- a/libusb/version_nano.h
+++ b/libusb/version_nano.h
@@ -1 +1 @@
-#define LIBUSB_NANO 11654
+#define LIBUSB_NANO 11655
