R8混淆问题

5

我安装了新版本的Android Studio,并更新了我的项目(未更改依赖项),但出现了以下问题:

Missing class com.google.protobuf.java_com_google_android_gmscore_sdk_target_granule__proguard_group_gtm_N1281923064GeneratedExtensionRegistryLite$Loader (referenced from: java.util.List kotlinx.coroutines.internal.FastServiceLoader.load(java.lang.Class, java.lang.ClassLoader))
Missing class org.bouncycastle.jsse.BCSSLParameters (referenced from: void okhttp3.internal.platform.BouncyCastlePlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List) and 1 other context)
Missing class org.bouncycastle.jsse.BCSSLSocket (referenced from: void okhttp3.internal.platform.BouncyCastlePlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List) and 5 other contexts)
Missing class org.bouncycastle.jsse.provider.BouncyCastleJsseProvider (referenced from: void okhttp3.internal.platform.BouncyCastlePlatform.<init>())
Missing class org.conscrypt.Conscrypt$Version (referenced from: boolean okhttp3.internal.platform.ConscryptPlatform$Companion.atLeastVersion(int, int, int))
Missing class org.conscrypt.Conscrypt (referenced from: boolean okhttp3.internal.platform.ConscryptPlatform$Companion.atLeastVersion(int, int, int) and 4 other contexts)
Missing class org.conscrypt.ConscryptHostnameVerifier (referenced from: okhttp3.internal.platform.ConscryptPlatform$DisabledHostnameVerifier)
Missing class org.openjsse.javax.net.ssl.SSLParameters (referenced from: void okhttp3.internal.platform.OpenJSSEPlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List))
Missing class org.openjsse.javax.net.ssl.SSLSocket (referenced from: void okhttp3.internal.platform.OpenJSSEPlatform.configureTlsExtensions(javax.net.ssl.SSLSocket, java.lang.String, java.util.List) and 1 other context)
Missing class org.openjsse.net.ssl.OpenJSSE (referenced from: void okhttp3.internal.platform.OpenJSSEPlatform.<init>())

我尝试了一些在Proguard文件中的东西,以解决我在网上发现的问题。但是它没有起作用。

1个回答

11
这个问题是由于使用了AGP 8.y.zR8缺失类警告不再只是警告,而已经成为了构建错误。
目前可以采取的解决方法是在导致问题的类中添加dontwarn,例如:

proguard-rules.pro:

-dontwarn com.google.protobuf.java_com_google_android_gmscore_sdk_target_granule__proguard_group_gtm_N1281923064GeneratedExtensionRegistryLite$Loader
-dontwarn org.bouncycastle.jsse.BCSSLParameters
-dontwarn org.bouncycastle.jsse.BCSSLSocket
-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
-dontwarn org.conscrypt.Conscrypt$Version
-dontwarn org.conscrypt.Conscrypt
-dontwarn org.conscrypt.ConscryptHostnameVerifier
-dontwarn org.openjsse.javax.net.ssl.SSLParameters
-dontwarn org.openjsse.javax.net.ssl.SSLSocket
-dontwarn org.openjsse.net.ssl.OpenJSSE

类名很可能会被用红色下划线标出,因为你无法直接访问它们,因为它们是在你使用的库内部,但忽略它是可以的。

我们将不得不等待未来的更新,这些问题将由受到此R8更改影响的库进行修复。


谢谢您的答案和解释。 我刚刚看到,在文件夹 build/outputs/mapping 中,有一个 proguard 文件,确切地说明了如何做到这一点。 祝您拥有愉快的一天。 - JpA
我最终降级了,因为在发布时出现了崩溃。我会等待更新。 - JpA
如果您遇到的崩溃问题似乎与升级有关,请提交一个问题。如果它看起来与 R8 有关,您可以使用 https://issuetracker.google.com/issues/new?component=326788。 - sgjesse
这个很好用,谢谢。 - undefined
这个很好用,谢谢。 - Neo
只需将OkHttp升级到4.11.0版本,而不是添加上述答案中的proguard项。 - Zar E Ahmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接