2016-08-04 13 views
2

GMail APIを使用して電子メールを送信するAndroidアプリを開発しています。私はAndroid QuickstartSending Emailでサンプルコードを使用していますが、アプリケーションをデバッグするとすべて正常に動作します。 minifyEnabled=trueでリリースバージョンをビルドすると問題が発生します。その場合、service.users().messages().send(userId, message).execute();への呼び出しはIOExceptionでエラーになります。例外のメッセージは "404 Not Found"です。Gmail APIが正しく動作しないminifyEnabled = true

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のファイルに

の依存性は、私がexclude group: 'org.apache.httpcomponents'わからないですが、それは問題を解決していません削除

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

以下の通りです。

+1

'-keep class com.google。** 'の代わりに' -keep class com.google。** {*;} 'が問題を解決しましたが、これは最適な解決策ではありません。 –

答えて

2

私は全く同じ問題に遭遇しましたが、あなたの-keep class com.google.** {*;}は問題を修正していますが、それは少し重いものであり、保護されていないものを保護されないままにする可能性があります。 Google API Documentation regarding ProGaurdに従って、ProGuard構成に次の行を追加する必要があります。

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

-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault 

これにより、ProGuardで保護されている間にGoogle APIが正しく動作するようになります。

関連する問題