2016-08-04 40 views
2

Ich entwickle eine Android-App, die E-Mails mit der GMail-API versendet. Ich habe den Beispielcode unter Android Quickstart und Sending Email verwendet und alles funktioniert gut, wenn ich die App debuggen. Das Problem tritt auf, wenn ich die Release-Version mit minifyEnabled=true erstelle. In diesem Fall geht der Aufruf an service.users().messages().send(userId, message).execute(); mit IOException in Fehler über. Die Nachricht der Ausnahme lautet "404 Not Found".GMail-API funktioniert nicht richtig, wenn minifyEnabled = true ist

Die Proguard Datei enthält alle -keep class und -dontwarn, die ich in anderen Beiträgen gefunden haben:

-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.** {*;} 

Ich glaube nicht, es ist ein Problem der Beglaubigungsschreiben als E-Mails gesendet werden, wenn ich die App anmelden mit minifyEnabled=false. Ich habe auch die Release-Version der App auf dem Emulator getestet, Einstellung minifyEnabled=true und debuggable=true. In diesem Fall werden E-Mails gesendet, aber das APK ist größer, wenn es debuggbar ist, also denke ich, dass etwas Grundlegendes beibehalten wird.

dependecies in der gradle Datei sind die folgenden

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' 
} 

Ich bin nicht sicher exclude group: 'org.apache.httpcomponents' aber das Entfernen sie das Problem nicht lösen.

+1

'-Klasse Klasse com.google. ** {*;}' anstelle von '-Klasse halten com.google. **' löste das Problem, obwohl nicht sicher, dass dies eine optimale Lösung ist. –

Antwort

2

Ich lief in genau dieses Problem und während Ihre -keep class com.google.** {*;} das Problem behebt, ist es ein bisschen schwerhändig und kann Dinge ungeschützt lassen, die Sie nicht ungeschützt wollen. Laut der Google API Documentation regarding ProGaurd sollten Sie Ihrer ProGuard-Konfiguration die folgenden Zeilen hinzufügen.

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

-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault 

Dadurch können die Google APIs ordnungsgemäß funktionieren, während sie mit ProGuard geschützt sind.