2016-08-04 5 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을 파일에

Dependecies은 내가 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 

이렇게하면 Google API가 ProGuard로 보호되는 동안 제대로 작동 할 수 있습니다.