【问题标题】:java.lang.BootstrapMethodError: Exception from call site #2 bootstrap method on CameraX (1.0.0-alpha06)java.lang.BootstrapMethodError:CameraX (1.0.0-alpha06) 上调用站点#2 引导方法的异常
【发布时间】:2019-10-21 08:29:34
【问题描述】:

我正在尝试使用 CameraX API 来获取照片,但在我更新到新的 API 版本 1.0.0-alpha06 后它开始崩溃

CameraX.bindToLifecycle(...)

方法。

错误日志是:

Process: com.aximetria.aximetria.debug, PID: 2629
    java.lang.BootstrapMethodError: Exception from call site #2 bootstrap method
        at androidx.camera.core.Preview.updateListener(Preview.java:368)
        at androidx.camera.core.Preview.updateOutput(Preview.java:586)
        at androidx.camera.core.Preview.updateConfigAndOutput(Preview.java:363)
        at androidx.camera.core.Preview.onSuggestedResolutionUpdated(Preview.java:524)
        at androidx.camera.core.UseCase.updateSuggestedResolution(UseCase.java:408)
        at androidx.camera.core.CameraX.calculateSuggestedResolutions(CameraX.java:684)
        at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:195)
        at com.aximetria.aximetria.ui.main.profile.avatar.TakeAvatarPhotoFragment.initCamera(TakeAvatarPhotoFragment.kt:169)
        at com.aximetria.aximetria.ui.main.profile.avatar.TakeAvatarPhotoFragment.initCamera$default(TakeAvatarPhotoFragment.kt:117)
        at com.aximetria.aximetria.ui.main.profile.avatar.TakeAvatarPhotoFragment$onViewCreated$1.onPermissionsChecked(TakeAvatarPhotoFragment.kt:55)
    ...

我的代码是:

    private fun initCamera(reverseFacing: Boolean = false) {
        ...

        val previewConfig = PreviewConfig.Builder()
                .setTargetAspectRatio(AspectRatio.RATIO_4_3)
                .setLensFacing(lensFacing)
                .build()

        val preview = Preview(previewConfig)
        preview.setOnPreviewOutputUpdateListener { previewOutput ->
            val parent = binding.preview.parent as ViewGroup
            parent.removeView(binding.preview)
            parent.addView(binding.preview, 0)
            binding.preview.surfaceTexture = previewOutput.surfaceTexture
        }

        val captureConfig = ImageCaptureConfig.Builder()
                .setFlashMode(flashMode)
                .setLensFacing(lensFacing)
                .build()

        val capture = ImageCapture(captureConfig)

        binding.takeAPhoto.setOnClickListener {
            ...
            val imageFile = createTempFile(System.currentTimeMillis().toString(), ".jpg")
            capture.takePicture(imageFile, this, object : ImageCapture.OnImageSavedListener {
                override fun onImageSaved(file: File) {
                    ...
                }

                override fun onError(imageCaptureError: ImageCapture.ImageCaptureError, message: String, cause: Throwable?) {
                    ...
                }
            })
        }

        CameraX.bindToLifecycle(this, capture, preview)
    }

有谁知道是什么导致了这次崩溃?我在文档中看不到任何相关信息(这对于 CameraX 来说已经过时了)

【问题讨论】:

  • 如果版本仍处于 alpha 阶段,可能只是库的错误?
  • @a_local_nobody 似乎是对的,我对 alpha06 版本的库有同样的错误,但回到 alpha05 可以修复它。
  • 我有同样的问题.. 所以我回滚到 alpha05

标签: android crash android-camerax


【解决方案1】:

在 gradle 中添加这个。

CameraX 需要一些 Java 8 中的方法,因此我们需要相应地设置编译选项。在 android 块的末尾,紧跟在 buildTypes 之后,添加以下内容:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

【讨论】:

  • 对我来说是这样的:compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 }
【解决方案2】:

我已通过将 Java8 添加到 app build.gradle 来解决此问题

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = "1.8"
}

【讨论】:

    【解决方案3】:

    将以下行添加到 build.gradle(:app) 文件中:

    android{
    
      compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }    
    }
    

    【讨论】:

    • 也在这里,你所有的答案都是以前答案的副本吗?
    【解决方案4】:

    正如@a-local-nobody、@stéphane-péchard 和@yoonhok 正确地指出了 alpha-6 版本库中的错误。在我的情况下,回滚到 alpha-05 也消除了崩溃。

    【讨论】:

    • 我尝试回滚到 alpha-05 但 alpha-06 没有被删除并且仍然出现,也许你知道为什么?
    • 拖欠是什么意思?
    • 我的意思是它在代码中仍然是 alpha-06,即使我更改了 gradle 中的依赖项
    • 尝试做项目清理和文件->使缓存无效/重新启动
    • 除了检查版本 5 中的两个库。我使用: implementation "androidx.camera:camera-core:1.0.0-alpha05" implementation "androidx.camera:camera-camera2:1.0.0 -alpha05"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2020-11-30
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多