일모도원(日暮途遠) 개발자
[Android 오류수정] 릴리즈 모드에서만 특정 기능이 동작안할때 본문
앱의 기능중 서버에서 데이타를 받아와서 앱 내에 있는 SQLite의 내용을 업데이트 하는 기능이 있다.
디버그 모드에서는 동작이 잘되나, 릴리즈 모드에서는 저 기능이 동작하지 않는다.
삽질 끝에 build.gradle의 minifyEnabled가 true일때 저 이슈가 나온다는것을 발견했다. (minifyEnabled가 true이면 shrinkResources도 true여야 한다.)
buildTypes {
debug {
}
release {
debuggable false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
minifyEnabled를 false로 하면 버그가 수정되나, 릴리즈모드에서는 minifyEnabled를 true로 해야 한다.
그래야 앱을 난독화해서 내 앱을 누가 리버스 엔지니어링을 할때 심하게 어렵게 만든다.
릴리즈모드에서 난독화 대상을 제외할수 있다.
minifyEnabled가 true일때 난독화를 제어할 클래스들이 필요하면 proguard-rules.pro 파일에 적어주면 된다.
근본 이유는 파악하지 못했지만, 일단 proguard-rules.pro 파일에 SQLite의 내용을 업데이트하는 코드가 있는 패키지를 제외해서 해결하였다.
# Without this, AraKoica can't update sqlite data from server contents.
-keep class com.dalread.database.** {*;}