标签: jdk-desugaring

java.lang.NoClassDefFoundError:升级 Gradle 和 Android Gradle 插件时无法解决以下问题:Ljava/lang/Math8

我正在开发一个带有 Gradle 版本7.1.1和 Android Gradle 插件版本的Android 应用程序7.0.0。当我升级到 Gradle 版本7.2和 Android Gradle Plugin 版本时7.1.1,出现以下错误。

2022-03-02 17:15:47.072 25300-25300/... E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ..., PID: 25300
    java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/Math8;
        at j$.time.Instant.ofEpochSecond(Instant.java:328)
        at j$.time.Instant.<clinit>(Instant.java:232)
        at j$.time.Instant.ofEpochMilli(Instant.java:344)
        ...
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "java.lang.Math8" on path: DexPathList[[zip file "/data/app/...-NbMXeOj8LumN03n4IMK5Cw==/base.apk"],nativeLibraryDirectories=[/data/app/...-NbMXeOj8LumN03n4IMK5Cw==/lib/x86, /data/app/...-NbMXeOj8LumN03n4IMK5Cw==/base.apk!/lib/x86, /system/lib, /system/product/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196) …
Run Code Online (Sandbox Code Playgroud)

java gradle kotlin android-gradle-plugin jdk-desugaring

15
推荐指数
1
解决办法
4002
查看次数

Android Gradle Build Plugin 4.0.0 &amp; R8 Desugaring 不适用于 API 19

我正在将一个 Android 应用程序从使用 Proguard 的 desugaring 切换到 Android Gradle Build Plugin 4.0.0 中可用的新 R8 desugaring。

我已按照官方文档中详述的步骤启用 Java 8 库脱糖:

gradle.properties

projectJavaVersion = 1.8
android.useAndroidX=true
android.enableJetifier=true
Run Code Online (Sandbox Code Playgroud)

应用程序构建.gradle

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}
android {
    buildToolsVersion '29.0.2'
    compileSdkVersion 29
    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility projectJavaVersion
        targetCompatibility projectJavaVersion
    }
    kotlinOptions {
        jvmTarget = projectJavaVersion
    }
    defaultConfig {
        multiDexEnabled true
        minSdkVersion 19
        targetSdkVersion 23
        applicationId = 'com.example.app'
    }
    buildTypes {
        release {
            ...
            minifyEnabled true
        }
        debug {
            debuggable true …
Run Code Online (Sandbox Code Playgroud)

android java-8 android-gradle-plugin android-r8 jdk-desugaring

11
推荐指数
1
解决办法
2236
查看次数

Android coreLibraryDesugaringEnabled,连接测试崩溃并出现 NoSuchMethodError

我添加coreLibraryDesugaringEnabled到我们的应用程序中,它对于正常的应用程序运行来说工作得很好。

  compileOptions {
    coreLibraryDesugaringEnabled true
  }
Run Code Online (Sandbox Code Playgroud)

  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
Run Code Online (Sandbox Code Playgroud)

但是,当我运行连接测试时,它会崩溃,并且类上没有此类方法错误Stream

16:03:56.426 11998 12041 E AndroidRuntime: FATAL EXCEPTION: com....
16:03:56.426 11998 12041 E AndroidRuntime: Process: ...
16:03:56.426 11998 12041 E AndroidRuntime: java.lang.NoSuchMethodError: No static method e([Ljava/lang/Object;)Lj$/util/stream/Stream; in class Lj$/util/n; or its super classes (declaration of 'j$.util.n' appears in /data/app/com....-qU6nwXthxze4O_9rcf1hGg==/base.apk!classes2.dex)
16:03:56.426 11998 12041 E AndroidRuntime:  at j$.util.stream.Stream$-CC.of(:1000)
16:03:56.426 11998 12041 E AndroidRuntime:  at ...
Run Code Online (Sandbox Code Playgroud)

我发现一些模糊的参考,这可能是因为在调用Multidex.install?之前引用了该类。我首先将该类引用为静态初始化程序,因此可以很早就访问它。不确定这是否是转移注意力,但我想我会提一下。

如果有帮助,则使用AndroidJUnit4ClassRunner.

编辑:我发现了一个模糊的参考,只有一篇文章指出仪器测试不支持这一点:

请注意,在 Android Studio 4.0 中,不支持在仪器测试中使用这些库脱糖类型。

https://medium.com/androiddevelopers/support-for-newer-java-language-apis-bca79fc8ef65

但即使是谷歌关于该功能的嵌入式视频也没有提及这一点。也不确定 …

android android-testing jdk-desugaring

7
推荐指数
1
解决办法
562
查看次数

使用 Java 8+ API 脱糖支持时,调用需要 API 级别 26

我正在使用 minSdk 23 的项目上测试Java 8+ API 脱糖支持。

java.time例如,当我使用该库时val instant = Instant.now(),我收到以下错误:

调用需要 API 级别 26(当前最低为 23):java.time.Instant#now

该代码可以正确编译并执行。

我可以假设它适用于所有设备吗?

编辑:我尝试过 API 29(物理设备)和 API 23(模拟器)。

java android kotlin jdk-desugaring

5
推荐指数
0
解决办法
577
查看次数

无法解析外部依赖项 com.android.tools:desugar_jdk_libs:1.0.9,因为没有定义存储库

我使用的是 Android Studio 版本 4.1.2。我的项目运行良好。我将其更新到Android Studio 4.1.3。重新安装 AS 4.1.2 时仍然出现错误。我开始收到以下错误:

Could not resolve all files for configuration ':app:coreLibraryDesugaring'.
Cannot resolve external dependency com.android.tools:desugar_jdk_libs:1.0.9 because no repositories are defined.
Required by:
    project :app
Run Code Online (Sandbox Code Playgroud)

在终端中运行以下命令时:

$ ./gradlew build --refresh-dependencies --stacktrace
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

Starting a Gradle Daemon, 1 incompatible and 3 stopped Daemons could not be reused, use --status for details

> Configure project :app
WARNING: API 'BaseVariant.getApplicationIdTextResource' is obsolete and has been replaced with 'VariantProperties.applicationId'.
It will be removed in version 5.0 of …
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio android-gradle-plugin jdk-desugaring

2
推荐指数
1
解决办法
9822
查看次数