libusb1.0在android内的移植和使用方法
本文主要講述的libusb在android下的移植和使用方法,并且在應用的方面可以舉一反三
轉載著名:http://blog.csdn.net/hubbybob1/article/details/52244999
1.編譯
編譯安卓版libusb庫如下步驟:
A.下載下傳最新的NDK:http://developer.android.com/tools/sdk/ndk/index.html(如果已安裝,此步可略)
B.提取NDK
C.打開終端并確定配置好的NDK為全局環境變量
D.進入/libusb/android/jni
E.執行指令ndk-build指令
執行完畢後,libusb庫和examples和tests就會在"android/libs/$ARCH"下找到
ARCH代表不同的平台有:armeabi,armeabi-v7a,x86
2.安裝
如果你想在你的本地的安卓應用代碼中使用libusb庫,那麼需要添加下面一行到你的Android.mk檔案中:
include $(PATH_TO_LIBUSB_SRC)/android/jni/libusb.mk
然後需要添加下面兩行,來為使用到libusb庫的本地的沒一個二進制檔案編譯配置:
LOCAL_C_INCLUDES += $(LIBUSB_ROOT_ABS)
LOCAL_SHARED_LIBRARIES += libusb1.0
如果你想在你的app中使用libusb這個庫函數話,要做的步驟如下
A,修改移植libusb_open_fd()函數,其方法可以檢視http://blog.csdn.net/hubbybob1/article/details/52101356
B,/libusb-1.0.18/android/jni/libusb.mk 的最後兩行修改成:(目的是生成libusb.a j靜态庫,當然也可以使用BUILD_STHARE_LIBRARY生成liusb.so,已供你的app使用)
LOCAL_MODULE := libusb
include $(BUILD_STATIC_LIBRARY)
C,libusb-1.0.18/android/jni 下 android.mk 删除其他的,隻留libusb.mk一行,其餘的三行删除
D,在/libusb-1.0.18/android/使用指令ndk-build,就會在Android目錄下生成object目錄,在這個下面就可以找到libusb.a了
在使用ndk-build之後被編譯生成的libusb包将會被安卓編譯系統編譯到你的應用包(APK)内
3.root系統下安裝libusb和examples,tests(根據上面1的編輯結果繼續,在android系統下安裝)
對于已經有root權限的安卓系統而言,libusb是可以被安裝到系統下面的。步驟如下:
A.使能ADB,連結到device,即adb devices指令
B .使用以下指令安裝libusb
adb shell su -c "mount -o remount,rw /system" //确定系統可寫
adb push obj/local/armeabi/libusb1.0.so /sdcard/ //将ndk-build編好的庫檔案copy到 andriod/系統sdcard/ 下
adb shell su -c "cat > /system/lib/libusb1.0.so < /sdcard/libusb1.0.so" //将 /sdcard 導入到 /system/lib/ 下
rm /sdcard/libusb1.0.so //删除
C.安裝examples,tests,假設B 為listdevs fxload xusb sam3u_benchmark hotplugtest stress (編譯後,這些東西在examples,tests目錄下)指令如下:
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"
adb shell su -c "mount -o remount,ro /system" //是系統隻可讀
這樣就安裝好了,可以使用指令
adb shell su -c "listdevs" 來測試了,可以adb shell 進入系統,然後執行listdevs指令也是可以的
對于以上的操作可行但是比較麻煩可使用如下方法:
打開終端,輸入指令:
adb remount //可讀可寫挂在安卓系統
adb push obj/local/armeabi/libusb1.0.so /system/lib/ //将libusb庫直接安裝到/system/lib/下
adb push "obj/local/armeabi/$B" /system/lib/ //将編譯好的相關指令直接安裝到system/lib/下
adb shell //進入android系統目錄下
chmod 0755 /system/bin/$B //修改相關指令的權限
然後就可以直接執行相關指令了,例如 listdev
D.如果可以使用OTG線去ADB ,也可以通過OTG ADB 去設定網絡ADB 或者wifi,去連結裝置
adb shell netcfg //通過OTG 檢視網絡資訊
adb tcpip 5555 //設定tcpip端口
adb connect 192.168.1.123:5555 //通過網絡連結裝置
4.運作權限
在大部分的安卓裝置上預設的系統配置是不允許連結usb裝置的,下面操作來解決這個問題。
A.在能改變系統鏡像的情況下,可以修改鏡像中使用到的ueventd.rc檔案,去修改dev/bus/usb/*/*的權限為允許 。使用這種方法建議生成一個新的安卓權限啊去保護這些檔案的連結,不建議給所有的應用權限都可以讀寫這些檔案
B.對于已經root的安卓裝置,作為root可是使用“su” 指令來執行調用libusb的代碼。另一種方法是可以使用 su指令去改變/dev/bus/usb/下檔案的權限。
C.使用者可以在java層使用android.hardware.usb.UsbManager 去擷取 UsbDevice權限,并打開usb裝置,這個方法的難點是不能保證在以後的安卓系統版本中可以繼續适用,這個牽涉到JAVA APIs,運作的代碼使每一個android.hardware.usb.UsbDevice和 libusb_device