天天看點

libusb1.0在android内的移植和使用方法

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