티스토리 뷰
Android Studio에서 처음으로 스토어 배포용 APK를 생성하였다. 내부적으로 배포 했을 경우에 문제가 없기에 당연히 아무 문제도 없을 것이라 생각하고 바로 프로덕션 배포를 진행하였으나, 스토어 배포 된 버전에서 S급 오류가 무더기로 쏟아졌다. 특정 라이브러리를 사용하는 모든 기능에서 앱이 죽는 것이다.
부랴부랴 검색을 하고, 이것도 고쳐보고 저것도 고쳐보았지만 이유를 알지 못한체 Release로 배포를 수십 번 했음에도 마음이 급해 원인을 찾지 못하고 있었다.
그러다 마음을 가라 앉히고 Release일 때 문제가 생긴점을 감안해 app.Gradle 파일을 다시 훑어본 결과 BuildTypes가 눈에 띄웠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release //minifyEnabled true //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' debuggable false } } | cs |
최적화 및 난독화를 위해 추가되었던 proguard 옵션을 주석처리 하고나서 문제를 해결하였다.
해당 옵션을 활성화시키고자 한다면 "proguard-rules.pro'파일 안에 적용된 Libary의 ProGuard 옵션을 찾아 추가해 주어야 한다.
우선 급하기 때문에 주석처리 후 버전을 배포할 수 밖에 없었다.
이후 검색을 해 보니 특정 라이브러리를 사용함에 있어 "proguard-rules.pro"에 별도로 필요한 옵션들이 각각의 Library마다 존재하는 것을 확인 하였다. "daummap proguard" "facebook proguard"등등 검색해서 옵션들을 추가하였다.
오류를 모두 수정한 proguard-rules.pro 파일의 내용은 다음과 같다.
13~19 라인까지는 영향을 주지 않지만 우선 문제가 생길 것으로 보여 추가해 놓았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | -keepattributes Signature -dontwarn org.apache.http.** -dontwarn com.nhaarman.** -dontwarn com.flurry.** -dontwarn com.kakao.** -dontwarn uk.co.senab.** -keep class com.facebook.** { *; } -keep class net.daum.** { *; } -keep class com.loopj.android.http.** { *; } -keep interface com.loopj.android.** { *; } -keep class android.support.v4.app.** { *; } -keep interface android.support.v4.app.** { *; } -keep class android.support.v7.app.** { *; } -keep interface android.support.v7.app.** { *; } -keepclassmembers class * implements YOURPACKAGE$JavaScriptInterface { <methods>; } -keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; } | cs |
참조 블로그
http://drcarter.tistory.com/145
https://www.davidlab.net/ko/tech/android-studio-tips-project-settings/#3_App_Signing
http://kanghk.tistory.com/1