如何使用 Google Drive REST API 修复 Proguard 问题

Ger*_*uze 4 android google-drive-api android-proguard

我正在使用 Google Rest API v3 将我的 android 应用程序连接到 Google Drive。当我在没有 Proguard (minifyEnabled=false) 的情况下运行时,一切都很好。但是,当我启用 proguard 时,会调用错误的 REST API 方法。当我在驱动器根别名“root”上调用 Drive.Files.get().execute 时,我得到了 Drive.Files.list().execute 的结果。当我禁用“minifyEnabled”时,我看到了正确的结果。这是控制 Proguard 运行的 build.gradle 部分:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
Run Code Online (Sandbox Code Playgroud)

默认的 Proguard 文件是未修改的文件,随 Android Studio 2.2(不是优化版本)分发

这是我的 proguard-rules.pro 文件的内容

-keepattributes EnclosingMethod
-keepattributes InnerClasses
-dontoptimize

-keep class com.google.**
-keep class com.fasterxml.**
-dontwarn com.google.**
Run Code Online (Sandbox Code Playgroud)

当我检查生成的 mapping.txt 时,我仍然看到 imo 应该“保留”的类中的重命名成员。例如:

com.google.api.client.auth.oauth.OAuthParameters -> com.google.api.client.auth.oauth.OAuthParameters:java.security.SecureRandom RANDOM -> l com.google.api.client.auth.oauth。 OAuthSigner 签名者 -> a java.lang.String 回调 -> b java.lang.String consumerKey -> c java.lang.String nonce -> d java.lang.String 领域 -> e

我原以为“-keep class com.google.**”会避免这种情况?

知道如何解决这个问题吗?

提前致谢,

Evg*_*urg 8

这个对我有用:

-keepclassmembers class * {
  @com.google.api.client.util.Key <fields>;
}
Run Code Online (Sandbox Code Playgroud)

如官方谷歌示例所示:

https://github.com/google/google-api-java-client-samples/blob/master/tasks-android-sample/proguard-google-api-client.txt


Ale*_*lex 3

你需要

-keep class com.google.** { *;} 
Run Code Online (Sandbox Code Playgroud)

-keep class com.fasterxml.** { *;}
Run Code Online (Sandbox Code Playgroud)

另外,您可能会尝试减少 SDK 的数量。这些规则非常广泛。

编辑:宽规则意味着它可能会在您的项目中保留更多未使用的类,因此 apk 大小和方法计数会更大。