我正在开发一款使用GMail API发送电子邮件的Android应用。我在Android Quickstart和Sending 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=true
和debuggable=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'
但是删除它并不能解决问题。