diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 4f220ddd60e..c8428d21d4f 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.7.4+6 + +* Adds explicit `androidx.concurrent:concurrent-futures:1.2.0` dependency to fix + `compileDebugJavaWithJavac` failing with "class file for + androidx.concurrent.futures.CallbackToFutureAdapter not found" when + `camera-core`'s Jspecify type annotations are resolved during compilation. + ## 0.7.4+5 * Fixes a leaked thread per capture by dispatching the `takePicture` result callback on the main diff --git a/packages/camera/camera_android_camerax/android/build.gradle.kts b/packages/camera/camera_android_camerax/android/build.gradle.kts index d90a9933175..b527e68f4fd 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle.kts +++ b/packages/camera/camera_android_camerax/android/build.gradle.kts @@ -82,6 +82,10 @@ dependencies { implementation("androidx.camera:camera-lifecycle:${cameraxVersion}") implementation("androidx.camera:camera-video:${cameraxVersion}") implementation("com.google.guava:guava:33.5.0-android") + // camera-core's compiled classes reference CallbackToFutureAdapter type annotations; + // without this explicit dependency, javac fails to resolve them during compilation. + // Upstream: https://issuetracker.google.com/issues/543937345 + implementation("androidx.concurrent:concurrent-futures:1.2.0") testImplementation("junit:junit:4.13.2") testImplementation("org.mockito:mockito-core:5.23.0") testImplementation("org.mockito:mockito-inline:5.2.0") diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ConcurrentFuturesDependencyTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ConcurrentFuturesDependencyTest.java new file mode 100644 index 00000000000..339dbac0cae --- /dev/null +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/ConcurrentFuturesDependencyTest.java @@ -0,0 +1,32 @@ +// Copyright 2013 The Flutter Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.camerax; + +import static org.junit.Assert.assertNotNull; + +import androidx.concurrent.futures.CallbackToFutureAdapter; +import org.junit.Test; + +/** + * Regression test for https://github.com/flutter/flutter/issues/190505. + * + *

{@code camera-core}'s compiled classes carry Jspecify {@code @NonNull} type annotations on + * members that reference {@link CallbackToFutureAdapter}. javac needs that class on the compile + * classpath to process those annotations, even though this plugin never calls the annotated members + * directly. Without an explicit {@code androidx.concurrent:concurrent-futures} dependency, + * resolution of that class can silently depend on transitive dependency behavior and fail with + * "class file for androidx.concurrent.futures.CallbackToFutureAdapter not found" during {@code + * compileDebugJavaWithJavac}. + * + *

The static reference to {@link CallbackToFutureAdapter} below means that if the explicit + * dependency in {@code android/build.gradle.kts} is ever removed, this test target fails to compile + * instead of the break only surfacing as a build error for consumers. + */ +public class ConcurrentFuturesDependencyTest { + @Test + public void callbackToFutureAdapter_isOnClasspath() { + assertNotNull(CallbackToFutureAdapter.class); + } +} diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 668aba21141..52667ef300f 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.7.4+5 +version: 0.7.4+6 environment: sdk: ^3.12.0