Android AGP 4.2.0 + Java 11 编译失败

Nic*_*tov 5 java android kotlin android-studio android-gradle-plugin

随着 Android Studio 4.2 和 AGP 4.2.0 的发布,我们现在能够在 Android 项目中使用 Java 11。我确实更新了所有内容以指向 Java 11,但编译失败。如果我放回去JavaVersion.VERSION_1_8,它就会起作用。

所有编译错误都在数据绑定(?或视图绑定)生成的类中,并抱怨找不到 android 类或包。我已经尝试了很多东西,但没有任何效果,JAVA_HOME指向java11,studio中的JDK指向java11,但仍然:

some_module:compileDebugJavaWithJavac FAILED

../DataBinderMapperImpl.java:3: error: package android.util does not exist
import android.util.SparseArray;
                   ^
../DataBinderMapperImpl.java:4: error: package android.util does not exist
import android.util.SparseIntArray;

.. error: package android.view does not exist
Run Code Online (Sandbox Code Playgroud)

所以,我有什么

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_11
            targetCompatibility JavaVersion.VERSION_11
        }
        kotlinOptions {
            jvmTarget = "11"
        }
Run Code Online (Sandbox Code Playgroud)

./gradlew -version返回:

------------------------------------------------------------
Gradle 6.8.3
------------------------------------------------------------

Build time:   2021-02-22 16:13:28 UTC
Revision:     9e26b4a9ebb910eaa1b8da8ff8575e514bc61c78

Kotlin:       1.4.20
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM:          11.0.2 (Oracle Corporation 11.0.2+9)
OS:           Mac OS X 10.15.7 x86_64
Run Code Online (Sandbox Code Playgroud)

java -version回报

openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
Run Code Online (Sandbox Code Playgroud)

javac -version回报

javac 11.0.2
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助,谢谢!

Amj*_*reh 1

您应该更新为Android Studio Arctic Fox | 2020.3.1使用Java 11,并将编译选项设置为

sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
Run Code Online (Sandbox Code Playgroud)

如果你也使用 Kotlin

kotlinOptions { jvmTarget = JavaVersion.VERSION_11.toString() }
Run Code Online (Sandbox Code Playgroud)