ubuntu16.04 编译 libusb以及 使用libusb库编译hidapi库

首先,需要编译 libusb的库,然后依赖于 libusb的库,编译 hidapi的库

一.LIBUSB编译

1.下载 libusb的源码:

git clone https://github.com/libusb/libusb.git

2.编译:

进入到跟目录下的android/jni目录下面,执行 ndk-build  APP_ABI=armeabi-v7a,此处根据需要选取,armeabi需要比较老的ndk版本,然后会在jni的上层目录,即 android/libs/armeabi-v71/libusb1.0.so,生成了 libusb1.0.so,然后libusb编译完成,不同的架构的cpu,通过 APP_ABI制定即可

二.HIDAPI编译

1.下载 hidapi源码:

$ git clone https://github.com/signal11/hidapi.git

2.修改Android.mk:

如果不修改根目录下的 android/jni/Android.mk,编译会报错,提示找不到 libusb的库,需要修改一下 Android.mk文件,修改如下:

LOCAL_PATH:= $(call my-dir)

APP_ABI = armeabi

HIDAPI_ROOT_REL:= ../..
HIDAPI_ROOT_ABS:= $(LOCAL_PATH)/../..
LIBUSB_ROOT_ABS:= $(LOCAL_PATH)/../../../libusb-1.0.23


include $(CLEAR_VARS)
LOCAL_MODULE    := libusb1.0
LOCAL_SRC_FILES := libusb1.0.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := \
  $(HIDAPI_ROOT_REL)/libusb/hid.c

LOCAL_C_INCLUDES += \
  $(HIDAPI_ROOT_ABS)/hidapi \
  $(HIDAPI_ROOT_ABS)/android \
  $(LIBUSB_ROOT_ABS)/libusb-1.0.23


LOCAL_SHARED_LIBRARIES := libusb1.0

#LOCAL_LDLIBS := libusb1.0

#LOCAL_MODULE_FILENAME  :=libhidapi
LOCAL_MODULE := libhidapi

include $(BUILD_SHARED_LIBRARY)

即添加如下代码:

include $(CLEAR_VARS)
LOCAL_MODULE    := libusb1.0
LOCAL_SRC_FILES := libusb1.0.so
include $(PREBUILT_SHARED_LIBRARY)

3.将第一步中编译的libusb1.0.so库,拷贝到 android/jni/ 目录下,要拷贝对应的 ABI版本的so库,如拷贝 armeabi 的,则编译libhidapi的时候,需要指定 APP_ABI=armeabi,编译命令如下:

/* 根目录下的 android/jni/目录下执行 */
ndk-build APP_ABI = armeabi        /* 需要拷贝armeabi架构的libusb1.0.so到android/jni/目录 */
ndk-build APP_ABI = armeabi-v7a    /* 需要拷贝armeabi-v7a 架构的 libusb1.0.so */

编译完成后,即可在  android/libs/目录下看到对应的 libhidapi.so

 

 

你可能感兴趣的:(libusb,hidapi)