天天看点

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