【问题标题】:GMail API not working properly when minifyEnabled=true当 minifyEnabled=true 时,GMail API 无法正常工作
【发布时间】:2016-12-10 14:56:14
【问题描述】:

我正在开发一个使用 GMail API 发送电子邮件的 Android 应用。我在Android QuickstartSending Email 使用了示例代码,并且在调试应用程序时一切正常。 当我使用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.** {*;}

我认为这不是凭据问题,因为如果我使用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'
}

我不确定exclude group: 'org.apache.httpcomponents',但删除它并不能解决问题。

【问题讨论】:

  • -keep class com.google.** {*;} 而不是 -keep class com.google.** 解决了这个问题,但不确定这是一个最佳解决方案。

标签: android gmail-api android-proguard


【解决方案1】:

我遇到了同样的问题,虽然您的 -keep class com.google.** {*;} 确实解决了问题,但它有点笨拙,可能会使您不希望不受保护的东西不受保护。根据Google API Documentation regarding ProGaurd,您应该将以下行添加到您的 ProGuard 配置中。

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

-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault

这允许 Google API 在受到 ProGuard 保护的同时正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2014-06-11
    • 2021-10-20
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2021-04-06
    相关资源
    最近更新 更多