【问题标题】:ClassNotFoundException: android.hardware.camera2.CameraAccessException with OpenCV 3.1.0ClassNotFoundException: android.hardware.camera2.CameraAccessException 与 OpenCV 3.1.0
【发布时间】:2017-02-07 18:46:58
【问题描述】:

我正在一个使用 OpenCV 3.1.0 库的 Android Studio 2.2 的 android 项目中工作。我根据这个answer导入了库。情况如下:

  • 当我为 API >= 21(确切地说是 API 23)的设备编译项目时,一切顺利。
  • 当我为 API

Gradle 日志

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithInstantRunForDebug'.
> java.lang.ClassNotFoundException: android.hardware.camera2.CameraAccessException

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithInstantRunForDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)...

我发现了这些类似的问题:

解决方案是将compileSdkVersion 设置为最小21(引入camera2 API 的版本)并确保项目的build.gradle 文件与OpenCV 匹配。

不幸的是,它对我不起作用。我仍然得到同样的错误。有什么想法吗?

我的代码在这里可用:Github repository

感谢您的帮助!

【问题讨论】:

  • 为什么要将 CompileSdk 设置为这么旧的状态?将其设置为 24,由于您的 MinSdk 为 9,因此仍将支持旧设备(但您需要确保在运行时不调用任何 camera2 api)
  • compileSdkVersion 在两个 build.gradle 文件中都是 24。我想从 API 19 (KitKat) 提供支持。在最后一次提交中,我将 minSdkVersion 从 19 更改为 9 只是为了尝试(因为 OpenCV 应该提供 API 8 的支持,但 appcompat-v7:24.2.1 的最低 API 是 9)。但什么都没有改变。
  • @Iuliia 正如我所解释的,您提到的问题中提出的解决方案并不能解决我的问题。当我使用 Android≥5 的设备时,我没有任何问题(camera2 效果很好,不像他的情况)。当我使用 Androidcamera2 在这种情况下不必使用(因为仅适用于 API≥21),但由于某种原因,它被使用了,这就是我抛出错误的原因。
  • 我遇到了同样的问题,this 回答帮助了我

标签: android opencv android-camera opencv4android opencv3.1


【解决方案1】:

感谢@JavierMollá,我终于找到了一个临时解决方案。

关闭 Instant Run 解决了这个问题。转到File > Settings > Build, Execution, Deployment > InstantRun 并取消选中Enable Instant Run to hot swap code...

Instant Run 是 Android Studio 的一个主要功能,但不幸的是,它似乎仍在进行中......正如@AndreKR 所暗示的,它可能与这个问题有关#212672

【讨论】:

  • 因此,Instant Run 准备过程中出现错误,当您关闭 Instant Run 时,错误消失。哇!惊喜! -1 表示非解决方案。
  • @AndreKR 感谢您提供更好的解决方案。如果您阅读我的答案,您会看到“临时解决方案”,如果您发现更好的方法,请告诉我,同时我不能停止工作。
  • 我没有,但我怀疑是this bug。我并不是建议您停止工作,而是建议您删除“答案”并暂时保留问题。由于很明显transformClassesWithInstantRunForDebug 中的错误会在您禁用 InstantRun 后消失,因此您的“答案”不会增加任何价值。
  • @AndreKR 感谢您添加信息。我没有检查我的答案是否正确,但我会把它留在那里,因为这是我目前找到的唯一临时解决方案(明显与否)。一旦他们做出任何改进,我将跟进该问题并更新我的答案。
  • @AndreKR 感谢分享。该解决方案适用于我使用 Android 4.1.2 设备。
猜你喜欢
  • 2015-10-25
  • 2017-07-02
  • 2016-07-12
  • 2023-03-08
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2019-06-14
相关资源
最近更新 更多