libusb: android上集成libusb库
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声卡数据
libusb: android上集成libusb库的更多相关文章
- Android中集成第三方库的方法和问题
Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...
- 最牛逼android上的图表库MpChart(三) 条形图
最牛逼android上的图表库MpChart三 条形图 BarChart条形图介绍 BarChart条形图实例 BarChart效果 最牛逼android上的图表库MpChart(三) 条形图 最近工 ...
- 最牛逼android上的图表库MpChart(二) 折线图
最牛逼android上的图表库MpChart二 折线图 MpChart折线图介绍 MpChart折线图实例 MpChart效果 最牛逼android上的图表库MpChart(二) 折线图 最近工作中, ...
- 最牛逼android上的图表库MpChart(一) 介绍篇
最牛逼android上的图表库MpChart一 介绍篇 MpChart优点 MpChart是什么 MpChart支持哪些图表 MpChart效果如何 最牛逼android上的图表库MpChart(一) ...
- Android上安装第三方库
在Android sdk中安装预安装第三方的(动态,静态)库,到系统中,方便模块无差别的使用. Android.mk include $(CLEAR_VARS) LOCAL_MODULE_TAGS : ...
- 系列篇|编译可在Android上运行的依赖库(一):glib库
前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...
- Kotlin与Android SDK 集成(KAD 05)
作者:Antonio Leiva 时间:Dec 19, 2016 原文链接:https://antonioleiva.com/kotlin-integrations-android-sdk/ 使用Ko ...
- 59.Android开源项目及库 (转)
转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...
- FFmpeg在Android上的移植之第一步
http://blog.sina.com.cn/s/blog_69a04cf40100x1fr.html 从事多媒体软件开发的人几乎没有不知道FFmpeg的,很多视频播放器都是基于FFmpeg开发的. ...
随机推荐
- day 19 作业
今日作业 1.什么是对象?什么是类? 对象是特征与技能的结合体,类是一系列对象相同的特征与技能的结合体 2.绑定方法的有什么特点 由对象来调用称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同 ...
- centos7 docker安装nginx
1.查询nginx最新镜像 docker search nginx 2.下载镜像 docker pull nginx 3.创建目录 mkdir -p /software/nginx/html mkdi ...
- QuickStart系列:Docker部署PostgreSQL
docker镜像地址: https://hub.docker.com/_/postgres/ https://www.widuu.com/chinese_docker/examples/postgre ...
- C++(四十五) — 类型转换(static_cast、dynamic_cast 、const_cast、reinterpreter_cast)
0.总结 (1)要转换的变量,转换前.转换后.转换后的结果. (2)一般情况下,避免进行类型转换. 1._static_cast(静态类型转换,int 转换为char) 格式:TYPE B = st ...
- CentOS7安装Supervisor3.1.4
supervisord 负责管理进程的server端,配置文件是/etc/supervisor/supervisord.conf supervisorctl client端的命令行工具,管理子进程,配 ...
- P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]
题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...
- git上传者姓名修改
只需要两个指令 git config user.name 和 git config –global user.name 在控制台中输入git config user.name获取当前的操作名称 修改名 ...
- 项目Alpha冲刺——集合
作业描述 课程: 软件工程1916|W(福州大学) 作业要求: 项目Alpha冲刺(团队) 团队名称: 火鸡堂 作业目标: 完成项目Alpha冲刺 团队信息 队名:火鸡堂 队员学号 队员姓名 博客地址 ...
- samba服务器的搭建和用户权限,文件夹权限设置
一.简介:samba服务是基于netbios 安装: 通过yum安装 [root@localhost ~]# yum install samba samba-client samba-swat 查看 ...
- 12.基于vue-router的案例
案例分析 用到的路由技术要点: 路由的基础用法 嵌套路由 路由重定向 路由传参 编程式导航 根据项目的整体布局划分好组件结构,通过路由导航控制组件的显示 1.抽离并渲染 App根组件 2.将左侧菜 单 ...