启用android.enableR8.fullMode=true时Google API的R8规则及官方资源问询
Google API库R8规则相关疑问
旧版本适配规则
在某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)规则,请问是否存在这类官方资源?
内容的提问来源于stack exchange,提问作者Mike Hanafey
相关产品推荐
相关产品推荐

