准备工作
所用软件
- Windows 11 / Ubuntu 20.04
- Android Studio 2020.3.1(当时的最新版)
- NDK 17.2.4988734
- Target SDK 27
- Compile SDK 29.0.3
- JDK 1.8
- Gradle 7.2
所用硬件
- 微软LifeCam摄像头
- 绿联30176 USB-C转USB 2.0数据线
- OPPO Find X3 Pro
检查手机是否支持UVC
找到Android的SDK安装位置,并找到 platform-tools\adb.exe 工具,在Windows Powershell终端中依次输入如下命令:
.\adb.exe shell
cd sys/bus/usb/drivers
ls
查看输出,如果输出中有uvcvideo则表示手机支持UVC摄像头。
代码下载
从项目地址下载源码。
项目设置
SDK国内源
将HTTP Proxy修改为 Auto-detect proxy settings,勾选 Automatic proxy configuration URL,并填入国内源地址,这里是
mirrors.dormforce.net:80
在Android SDK设置页面,勾选 Force https://… sources to fetched using http://。
gradle 国内源
在 C:\Users\38325.gradle 文件夹下创建 init.gradle 文件。
输入如下内容:
allprojects{
repositories {
def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
all { ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
remove repo
}
if (url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
remove repo
}
}
}
maven {
url ALIYUN_REPOSITORY_URL
url ALIYUN_JCENTER_URL
}
}
}
如果项目层的build.gradle文件内容如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
将其修改如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://raw.github.com/saki4510t/libcommon/master/repository/' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
NDK设置
在local.properties文件中添加ndk.dir变量,将其赋值为ndk路径,这里使用的是r17版本。
程序运行
错误处理
ndk-build.cmd’’ finished with non-zero exit value 2
较新版本的ndk不支持原来的ABI,需要将 libuvccamera\src\main\jni\Application.mk 文件中的 APP_ABI改为
APP_ABI := arm64-v8a armeabi-v7a
Failed to resolve: com.serenegiant:common
添加依赖项,使用BaseActivity提示错误,造成这个原因是lib依赖中使用的implementation依赖在其他包中是不对外开放的,改成api方式依赖即可。
即把 libuvccamera 和 usbCameraCommon 中的 build.gradle文件下的
implementation("com.serenegiant:common:${commonLibVersion}") {
exclude module: 'support-v4'
}
修改为
api("com.serenegiant:common:${commonLibVersion}") {
exclude module: 'support-v4'
}
ERROR: Failed to resolve: com.serenegiant:common:2.12.4
duplicate class
Build Output 栏内汉字出现乱码
Android Studio Build Output 栏内汉字出现乱码的解决方案
WiFi 连接手机
Android Quick Tip - ADB over WiFi
闪退问题修复
解决Android UVCCamera stopPreview 报错 崩溃 闪退 问题
参考链接
Android Studio SDK 使用国内镜像源在线安装
这可能是介绍 Android UvcCamera 最详细的文章了
android设备外接多个usb摄像头