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