UVCCamera开源项目: https://github.com/saki4510t/UVCCamera
基于原UVCCamera项目,已解决运行报错的问题:https://github.com/hanye6/UVCCamera
最近项目中要使用到USB摄像头的功能,然后就找到了UVCCamera这个开源项目,clone下来后,编译运行要报错,下面带你一步步解决错误,成功运行项目(文末有福利);
第一个错误:
Could not resolve com.serenegiant:common:2.12.4
解决方法:
打开project的build.gradle,替换掉原来的maven url,如下:
allprojects {
repositories {
// google()
maven { url 'https://maven.google.com' }
jcenter()
//maven { url 'http://raw.github.com/saki4510t/libcommon/master/repository/' }
//使用下面的maven url即可
maven { url 'https://gitee.com/liuchaoya/libcommon/raw/master/repository/' }
}
}
第二个错误:
CreateProcess error=2, 系统找不到指定的文件。
Execution failed for task ':libuvccamera:ndkBuild'.
A problem occurred starting process 'command 'null/ndk-build.cmd''
解决方法:
打开设置,确保如图已下载NDK,没有下载的就选一个下载,然后点击如下图标,打开设置,设置好NDK的位置即可。
第三个错误:
Execution failed for task ':libuvccamera:ndkBuild'.
Process 'command 'G:\win7\developSoftware\androidSDK\ndk\21.0.6113669/ndk-build.cmd'' finished with non-zero exit value 2
解决方法:
打开Application.mk,修改APP_ABI,
修改前 APP_ABI := armeabi armeabi-v7a x86 mips
修改后 APP_ABI := armeabi-v7a x86
第四个错误:
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:354)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:323)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at com.serenegiant.usbcameratest.MainActivity.onCreate(MainActivity.java:61)
解决方法:
打开AndroidManifest.xml,修改application的theme:
修改前 android:theme="@style/AppTheme"
修改后 android:theme="@style/Theme.AppCompat"
第五个错误:
Caused by: android.view.InflateException: Binary XML file line #32 in com.serenegiant.usbcameratest:layout/activity_main: Binary XML file line #32 in com.serenegiant.usbcameratest:layout/activity_main: Error inflating class com.serenegiant.widget.SimpleUVCCameraTextureView
Caused by: android.view.InflateException: Binary XML file line #32 in com.serenegiant.usbcameratest:layout/activity_main: Error inflating class com.serenegiant.widget.SimpleUVCCameraTextureView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:858)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
at android.view.LayoutInflater.inflate(LayoutInflater.java:686)
at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at com.serenegiant.usbcameratest.MainActivity.onCreate(MainActivity.java:61)
at android.app.Activity.performCreate(Activity.java:7893)
at android.app.Activity.performCreate(Activity.java:7880)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3287)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3461)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2048)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:227)
at android.app.ActivityThread.main(ActivityThread.java:7573)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:953)
Caused by: java.lang.UnsupportedOperationException: TextureView doesn't support displaying a background drawable
com.serenegiant.usbcameratest E/AndroidRuntime: at android.view.TextureView.setBackgroundDrawable(TextureView.java:326)
at android.view.View.setBackground(View.java:23033)
at android.view.View.<init>(View.java:5869)
at android.view.View.<init>(View.java:5265)
at android.view.TextureView.<init>(TextureView.java:166)
at com.serenegiant.widget.SimpleUVCCameraTextureView.<init>(SimpleUVCCameraTextureView.java:50)
at com.serenegiant.widget.SimpleUVCCameraTextureView.<init>(SimpleUVCCameraTextureView.java:46)
解决方法:
打开activity_main.xml,把SimpleUVCCameraTextureView的android:background="#ff000000" 这一句去掉即可。
解决完以上错误,就可以把项目运行起来啦!
然后,福利来了!
1.发现一个特别好用的插件,github clone或下载特别慢的,chrome下载一个插件,立刻就起飞了!
2.访问GitHub特别慢的,还可以参考如下方法,设置完嗖嗖的:
原文链接:https://zhuanlan.zhihu.com/p/93436925
希望能够帮助到你。