1. 下载libusb库。

可以到libusb库的官网(https://libusb.info/)或者是其官方的github仓库(https://github.com/libusb/libusb/releases)上下载最新的libusb库源码。

2. 添加libusb库到android studio项目中。

这里以源码编译的方式添加,使用的仍然是ndk-build的方式,而非cmake,使用源码编译的好处在于,可以随时调试libusb库的源码,方便加log。

2.1 在app/src/main目录下新建一个jni目录,用于存放libusb库的源代码。

2.2  打开app目录下的build.gradle文件,指定JNI目录:

2.3  在jni目录下新建libusb-support目录和makefile文件,libusb-support目录用于存放libusb库的源代码。

这里单独新建一个libusb-support目录的目的在于,将来可能会有很多个第三方模块,比如libusb,libyuv, sdl,分目录存放可以划分得更清楚,可以直接把libusb的代码放到jni目录下,只要makefile能找到就行。
Android.mk

#
# Copyright (c) Realsil.Inc. All rights reserved.
#
include $(call all-subdir-makefiles)

Application.mk

#
# Copyright (c) SEP.Inc. All rights reserved.
# APP_ABI := all APP_LDFLAGS := -llog

最终目录结构如下:

2.3 拷贝libusb库的源代码到libusb-support目录

打开下载的libusb库源代码,找到libusb文件夹,将整个文件拷贝到libusb-support目录下,我下载的是1.0.23版本:

打开android文件夹,拷贝config.h文件到libusb-support目录下

打开jni文件夹,拷贝Android.mk、libusb.mk文件到libusb-support目录下:

最终目录结构如下:

接下来修改Android.mk和libusb.mk文件,默认编译出来的库会包含一些测试用例和示例代码,我们不需要它。
修改Android.mk, 注释掉example.mk和tests.mk

# Android build config for libusb, examples and tests
# Copyright © - RealVNC Ltd. <toby.gray@realvnc.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., Franklin Street, Fifth Floor, Boston, MA - USA
# LOCAL_PATH:= $(call my-dir) include $(LOCAL_PATH)/libusb.mk # include $(LOCAL_PATH)/examples.mk
# include $(LOCAL_PATH)/tests.mk

修改libusb.mk, 更新当前源代码的位置:

# Android build config for libusb
# Copyright © - RealVNC Ltd. <toby.gray@realvnc.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., Franklin Street, Fifth Floor, Boston, MA - USA
# LOCAL_PATH:= $(call my-dir)
LIBUSB_ROOT_REL:= .
LIBUSB_ROOT_ABS:= $(LOCAL_PATH) # libusb include $(CLEAR_VARS) LIBUSB_ROOT_REL:= .
LIBUSB_ROOT_ABS:= $(LOCAL_PATH) LOCAL_SRC_FILES := \
$(LIBUSB_ROOT_REL)/libusb/core.c \
$(LIBUSB_ROOT_REL)/libusb/descriptor.c \
$(LIBUSB_ROOT_REL)/libusb/hotplug.c \
$(LIBUSB_ROOT_REL)/libusb/io.c \
$(LIBUSB_ROOT_REL)/libusb/sync.c \
$(LIBUSB_ROOT_REL)/libusb/strerror.c \
$(LIBUSB_ROOT_REL)/libusb/os/linux_usbfs.c \
$(LIBUSB_ROOT_REL)/libusb/os/poll_posix.c \
$(LIBUSB_ROOT_REL)/libusb/os/threads_posix.c \
$(LIBUSB_ROOT_REL)/libusb/os/linux_netlink.c \
$(LIBUSB_ROOT_REL)/libusb/realsil_usb_audio.c \
$(LIBUSB_ROOT_REL)/libusb/jnihelp.cpp LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/ \
$(LIBUSB_ROOT_ABS)/libusb \
$(LIBUSB_ROOT_ABS)/libusb/os LOCAL_EXPORT_C_INCLUDES := \
$(LIBUSB_ROOT_ABS)/libusb LOCAL_LDLIBS := -llog LOCAL_MODULE := usb include $(BUILD_SHARED_LIBRARY)

其中的 realsil_usb_audio.c 和 jnihelp.cpp是我自己添加的调用libusb库的code, 可不用在意。
3.  编译链接
在任意文件夹下右击,选择“Link C++ Project with Gradle”

在Build System的下拉列表中选择ndk-build的编译方式,并指定所有模块的makefile文件位置:

点OK, 此时编译系统就会自动开始构建,注意到此时文件夹的目录颜色已修改,且app目录下的build.gradle文件也进行了更新。

接下来就可以在相应的C代码里编写调用libusb库的相应逻辑了。

参考链接:

1. Android从USB声卡录制高质量音频-----USB API测试

2. Android从USB声卡录制高质量音频-----使用libusb读取USB声卡数据

3. Android如何对libusb进行编译和使用

4. Libusb在Android平台上的环境以及原理

5. Android无驱usb音频实现

libusb: android上集成libusb库的更多相关文章

  1. Android中集成第三方库的方法和问题

    Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...

  2. 最牛逼android上的图表库MpChart(三) 条形图

    最牛逼android上的图表库MpChart三 条形图 BarChart条形图介绍 BarChart条形图实例 BarChart效果 最牛逼android上的图表库MpChart(三) 条形图 最近工 ...

  3. 最牛逼android上的图表库MpChart(二) 折线图

    最牛逼android上的图表库MpChart二 折线图 MpChart折线图介绍 MpChart折线图实例 MpChart效果 最牛逼android上的图表库MpChart(二) 折线图 最近工作中, ...

  4. 最牛逼android上的图表库MpChart(一) 介绍篇

    最牛逼android上的图表库MpChart一 介绍篇 MpChart优点 MpChart是什么 MpChart支持哪些图表 MpChart效果如何 最牛逼android上的图表库MpChart(一) ...

  5. Android上安装第三方库

    在Android sdk中安装预安装第三方的(动态,静态)库,到系统中,方便模块无差别的使用. Android.mk include $(CLEAR_VARS) LOCAL_MODULE_TAGS : ...

  6. 系列篇|编译可在Android上运行的依赖库(一):glib库

    前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...

  7. Kotlin与Android SDK 集成(KAD 05)

    作者:Antonio Leiva 时间:Dec 19, 2016 原文链接:https://antonioleiva.com/kotlin-integrations-android-sdk/ 使用Ko ...

  8. 59.Android开源项目及库 (转)

    转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...

  9. FFmpeg在Android上的移植之第一步

    http://blog.sina.com.cn/s/blog_69a04cf40100x1fr.html 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmpeg开发的. ...

随机推荐

  1. 二十七、mysql如何确保数据不丢失?有几点值得我们借鉴

    本篇文章我们先来看一下mysql是如何确保数据不丢失的,通过本文我们可以了解mysql内部确保数据不丢失的原理,学习里面优秀的设计要点,然后我们再借鉴这些优秀的设计要点进行实践应用,加深理解. 预备知 ...

  2. .net core jenkins持续集成

    执行 Shell pwd ls echo ${PATH} whoami which dotnet dotnet --info dotnet --version echo '============== ...

  3. Redis开发与运维学习笔记

    <Redis开发与运维>读书笔记   一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争 ...

  4. HTML&CSS基础-meta标签

    HTML&CSS基础-meta标签 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见字符集 1>ASCII 我们知道计算机是由外国人发明的,他们当时也没有考虑到 ...

  5. PHP——数组根据某一键值合并

    前言 其实要实现很简单直接foreach,再根据PHP中数组的特性就可以轻松实现. 步骤 这是源数据的格式 $info = [ [ "gname" => "特别关心 ...

  6. 闷声发大财,中国 App 出海编年史及方法论

    https://zhuanlan.zhihu.com/p/26700406 第一代 iPhone 发布于 2007 年初,至今已有十年有余.中国互联网公司出海的新篇章,也正始于这 iPhone / A ...

  7. rsync提权

    介绍:Rsync是linux下一款数据备份工具,默认开启873端口 利用条件:rsync未授权 列出模板 rsync rsync://目标ip:873/ 列出模块src下的文件 rsync rsync ...

  8. 一. python 安装

    1. 下载安装包 1 2 3 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi    # 2.7安装包   https: ...

  9. selenium模块及类组织关系

    问题:webdriver子模块中为什么可以直接使用类Chrome.ChromeOptions.Firefox.FirefoxProfile... 在webdriver的__init__.py文件中已经 ...

  10. LeetCode 931. Minimum Falling Path Sum

    原题链接在这里:https://leetcode.com/problems/minimum-falling-path-sum/ 题目: Given a square array of integers ...