Proguard 和 com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian
Posted
技术标签:
【中文标题】Proguard 和 com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian【英文标题】:Proguard and com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian 【发布时间】:2019-10-17 20:55:59 【问题描述】:play-services-base-16.0.1.aar
(mvnrepository) 有proguard.txt
,内容如下:
# b/35135904 Ensure that proguard will not strip the mResultGuardian.
-keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult
com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian;
但是您可以在classes.jar
中看到mResultGuardian
的类型已经被混淆为BasePendingResult.zaa
。我想这就是我得到的原因
Note: the configuration refers to the unknown class 'com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian'
这应该如何工作?我是 Proguard 的新手,对正在发生的事情只有非常基本的了解,所以请让你的答案简单:)
项目详情:
gradlew version: 5.4
build plugin: com.android.tools.build:gradle:3.2.0
很遗憾,我现在无法将 gradle build 插件更新为 3.3.*
或 3.4.*
,因为某些脚本不兼容,需要进行大量重构。
app/proguard.txt
(来自我看到的建议):
-keep class com.google.android.gms.analytics.** *;
-keep class com.google.android.gms.gcm.** *;
-dontwarn com.google.android.gms.**
但这无济于事。
UPD
我最终升级到 com.android.tools.build:gradle:3.4.1
(必须调整一些 api 更改)这解决了问题,但我仍然不明白应该如何使用这样的规则。
【问题讨论】:
【参考方案1】:“如果在您的项目中设置了 proguard,它会在构建过程中为我们完成一些工作:缩小、混淆、重新打包和优化。如果您使用 gradle,启用它很简单,只需在 build.gradle 中为您的 release buildType 设置 minifyEnabled 为 true 并传递默认的 android 优化规则集。
这将有助于缩小、加速和保护您的应用。然而,它主要通过删除从未被调用的代码并重命名剩下的代码来工作。在您遇到反思之前,这一切都很好。 反射使您可以编写可以根据名称(以及其他内容)查找和执行其他代码的代码”
“如果您或您的应用程序中的任何库使用反射,您也可以使用 ProGuard,您可以在此处指定有关您的应用程序 ProGuard 的哪些类、方法和其他部分应该单独保留的规则。你可以在一个文件中列出所有这些规则,然后通过 build.gradle 中的 proguardFiles 方法将它们传递给 ProGuard。一般约定是将此文件称为 proguard-rules.pro”
这些doc1、doc2 为您提供有关如何使用规则的更多信息
【讨论】:
以上是关于Proguard 和 com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian的主要内容,如果未能解决你的问题,请参考以下文章
Java 和 ProGuard - 使用类加载器 AntClassLoader 找不到 taskdef 类 proguard.ant.ProGuardTask