117 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| libusb for Android
 | |
| ==================
 | |
| 
 | |
| Building:
 | |
| ---------
 | |
| 
 | |
| To build libusb for Android do the following:
 | |
| 
 | |
|  1. Download the latest NDK from:
 | |
|     http://developer.android.com/tools/sdk/ndk/index.html
 | |
| 
 | |
|  2. Extract the NDK.
 | |
| 
 | |
|  3. Open a shell and make sure there exist an NDK global variable
 | |
|     set to the directory where you extracted the NDK.
 | |
| 
 | |
|  4. Change directory to libusb's "android/jni"
 | |
| 
 | |
|  5. Run "$NDK/ndk-build".
 | |
| 
 | |
| The libusb library, examples and tests can then be found in:
 | |
|     "android/libs/$ARCH"
 | |
| 
 | |
| Where $ARCH is one of:
 | |
|     armeabi
 | |
|     armeabi-v7a
 | |
|     mips
 | |
|     mips64
 | |
|     x86
 | |
|     x86_64
 | |
| 
 | |
| Installing:
 | |
| -----------
 | |
| 
 | |
| If you wish to use libusb from native code in own Android application
 | |
| then you should add the following line to your Android.mk file:
 | |
| 
 | |
|   include $(PATH_TO_LIBUSB_SRC)/android/jni/libusb.mk
 | |
| 
 | |
| You will then need to add the following lines to the build
 | |
| configuration for each native binary which uses libusb:
 | |
| 
 | |
|   LOCAL_C_INCLUDES += $(LIBUSB_ROOT_ABS)
 | |
|   LOCAL_SHARED_LIBRARIES += libusb1.0
 | |
| 
 | |
| The Android build system will then correctly include libusb in the
 | |
| application package (APK) file, provided ndk-build is invoked before
 | |
| 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.
 | |
| 
 | |
| 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.
 | |
| 
 | |
| 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.
 |