当minifyEnabled = true时,GMail API无法正常工作

Fra*_*zzi 3 android gmail-api android-proguard

我正在开发一个使用GMail API发送电子邮件的Android应用程序.我在Android Quickstart发送电子邮件时使用了示例代码,当我调试应用程序时,一切正常.当我用它构建发布版本时会出现问题minifyEnabled=true.在这种情况下,调用service.users().messages().send(userId, message).execute();会出错IOException.异常消息是"404 Not Found".

ProGuard的文件包括所有的-keep class-dontwarn我在其他帖子发现:

-dontwarn com.google.**
-dontwarn java.awt.**
-dontwarn javax.security.**
-dontwarn java.beans.**

-keep class com.google.**
-keep public class Mail {*;}
-keep class com.sun.activation.** {*;}
-keep class com.sun.activation.registries {*;}
-keep class javamail.** {*;}
-keep class javax.mail.** {*;}
-keep class javax.activation.** {*;}
-keep class com.sun.mail.dsn.** {*;}
-keep class com.sun.mail.handlers.** {*;}
-keep class com.sun.mail.smtp.** {*;}
-keep class com.sun.mail.util.** {*;}
-keep class mailcap.** {*;}
-keep class mimetypes.** {*;}
-keep class myjava.awt.datatransfer.** {*;}
-keep class org.apache.harmony.awt.** {*;}
-keep class org.apache.harmony.misc.** {*;}
Run Code Online (Sandbox Code Playgroud)

我不认为这是凭证的问题,因为如果我签署了应用程序,就会发送电子邮件minifyEnabled=false.我还在模拟器上测试了应用程序的发布版本,设置minifyEnabled=truedebuggable=true.在这种情况下发送电子邮件但是当可调试时APK更大,所以我认为基本的东西是保留的.

gradle文件中的依赖项如下

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile('com.google.api-client:google-api-client-android:1.22.0') {
        exclude group: 'org.apache.httpcomponents'
    }
    compile('com.google.apis:google-api-services-gmail:v1-rev47-1.22.0') {
        exclude group: 'org.apache.httpcomponents'
    }
    compile 'org.achartengine:achartengine:1.2.0'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.google.android.gms:play-services:9.4.0'
    compile 'com.facebook.android:facebook-android-sdk:4.12.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.android.gms:play-services-ads:9.4.0'
    compile 'com.google.android.gms:play-services-auth:9.4.0'
    compile 'com.google.android.gms:play-services-gcm:9.4.0'
    compile 'pub.devrel:easypermissions:0.1.5'
}
Run Code Online (Sandbox Code Playgroud)

我不确定exclude group: 'org.apache.httpcomponents'但是删除它并没有解决问题.

van*_*ane 6

我遇到了这个完全相同的问题,虽然你-keep class com.google.** {*;}确实解决了问题,但它有点沉重,并且可能会让事情不受保护,你不想要不受保护.根据有关ProGaurdGoogle API文档,您应该在ProGuard配置中添加以下行.

-keepclassmembers class * {
  @com.google.api.client.util.Key <fields>;
}

-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
Run Code Online (Sandbox Code Playgroud)

这样,Google API可以在受ProGuard保护的情况下正常运行.