将 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 中使用正确的规则,我可以解决这个问题。
这是由 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
}
}
}
我找到了解决这个问题的正确规则。 您需要将此代码添加到 proguard-rules.pro:
-keep class com.facebook.login.** {*;}
此行让忽略选项 minifyEnabled true 将所有文件放入 com.facebook.login 包中。
就我而言,我只是在 app.gradle 文件中将 minSdkVersion 从 23 更改为 27,它已修复。