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

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

本文主要讲述的libusb在android下的移植和使用方法,并且在应用的方面可以举一反三

转载著名:http://blog.csdn.net/hubbybob1/article/details/52244999

1.编译

编译安卓版libusb库如下步骤:

A.下载最新的NDKhttp://developer.android.com/tools/sdk/ndk/index.html(如果已安装,此步可略)

B.提取NDK

C.打开终端并确保配置好的NDK为全局环境变量

D.进入/libusb/android/jni

E.执行命令ndk-build命令

执行完毕后,libusb库和examplestests就会在"android/libs/$ARCH"下找到

ARCH代表不同的平台有:armeabiarmeabi-v7ax86


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系统下安装libusbexamplestests(根据上面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.安装examplestests,假设listdevs fxload xusb sam3u_benchmark hotplugtest stress (编译后,这些东西在examplestests目录下)命令如下:

  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


你可能感兴趣的:(spice)