对于Google API Drive、Sheets和Calendar Android应用程序,“android.enableR8.fullMode=true”中所需的R8规则集是什么?

yhxst69z  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(104)

在以前版本的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)规则,以及开发人员完成的非常全面的测试套件。
我的问题是,这种资源存在吗?

xesrikrc

xesrikrc1#

据我所知,没有一个集中的资源可以为所有Google API库提供一套完整的Proguard规则。有时他们会在特定库的文档中编写您需要使用的规则(例如,在Firebase Realtime Database中)。
但在大多数情况下,需要测试构建的发布版本,以尝试获得一些崩溃。

相关问题