com.android.tools.r8.CompilationFailedException:编译未能完成,位置:Lcom/facebook/login/DefaultAudience$EnumUnboxingLocalUtility;

问题描述 投票:0回答:3

将 kotlin 版本 (ext.kotlin_version) 更新为 1.6.10:

后出现一些错误
com.android.tools.r8.internal.E00: Unexpected type in conversion to primitive: OBJECT

Execution failed for task ':app:minifyReleaseWithR8'.
> com.android.tools.r8.CompilationFailedException: Compilation failed to complete, position: Lcom/facebook/login/DefaultAudience$EnumUnboxingLocalUtility;getNativeProtocolAudience(I)Ljava/lang/String;, origin: ..\.gradle\caches\transforms-3\57102c4e3d32396b86898e5ca0dd620d\transformed\jetified-facebook-core-7.1.0-runtime.jar:com/facebook/login/DefaultAudience.class

如果我在我的 build.gradle(:app) 中使用选项 minifyEnabled true生成签名包,就会发生这种情况。 如果我使用旧的 ext.kotlin_version(例如 1.5.0),则不会出现此错误。

我认为,如果我在 proguard-rules.pro 中使用正确的规则,我可以解决这个问题。

android facebook gradle proguard android-r8
3个回答
12
投票

这是由 R8 中的问题 引起的。 R8 3.1.71、3.2.55 和 3.3.26-dev 版本中提供了修复。

将以下内容添加到

settings.gradle
settings.gradle.kts
以使用与 AGP 捆绑版本不同的 R8 特定版本:

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:X.Y.Z")
            classpath('com.google.guava:guava:30.1.1-jre')  // <-- THIS IS REQUIRED UNTIL R8 3.2.4-dev
        }
    }
}

1
投票

我找到了解决这个问题的正确规则。 您需要将此代码添加到 proguard-rules.pro:

-keep class com.facebook.login.** {*;}

此行让忽略选项 minifyEnabled true 将所有文件放入 com.facebook.login 包中。


0
投票

就我而言,我只是在 app.gradle 文件中将 minSdkVersion 从 23 更改为 27,它已修复。

© www.soinside.com 2019 - 2024. All rights reserved.