在以前版本的Android应用程序中,此R8规则足以从Google API库中保留所需的GSON相关部分:
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
更新库和Android Studio(Eel到Flamingo)后,应用程序回归到仅在收缩版本中看到的问题,并且仅在运行时出现。这是由于R8默认运行android.enableR8.fullMode=true
造成的。
计算出附加规则:
-keepclassmembers class com.google.api.client.googleapis.json.GoogleJsonError {
public *;
}
-keepclassmembers class com.google.api.client.googleapis.json.GoogleJsonError$* {
public *;
}
-keepclassmembers public class com.google.api.services.drive.model.* extends com.google.api.client.json.GenericJson {
public *;
}
-keepclassmembers public class com.google.api.services.sheets.v4.model.* extends com.google.api.client.json.GenericJson {
public *;
}
-keepclassmembers public class com.google.api.services.calendar.model.* extends com.google.api.client.json.GenericJson {
public *;
}
将解决示例案例中的新问题。模式很明显:必须显式地保留model
包类。
这是一个非常不令人满意的体验,因为它需要测试来发现问题,并且R8中的未来更改以及可能的库将使经验确定的规则无效。
看起来Google API库应该附带所需的R8(即Proguard)规则,以及开发人员完成的非常全面的测试套件。
我的问题是,这种资源存在吗?
1条答案
按热度按时间xesrikrc1#
据我所知,没有一个集中的资源可以为所有Google API库提供一套完整的Proguard规则。有时他们会在特定库的文档中编写您需要使用的规则(例如,在Firebase Realtime Database中)。
但在大多数情况下,需要测试构建的发布版本,以尝试获得一些崩溃。