앱을 업데이트하고 올렸더니 다음과 같은 메시지가 나왔다.

"zip 정렬되지 않은 APK를 업로드했습니다. APK에 zip 정렬 도구를 실행한 다음 다시 업로드해야 합니다."

stackoverflow를 검색해보니 zipalign을 사용하면 된다고 나와 있었다. zipalign이 무엇인지는 문서에서 확인할 수 있다. 

sdk 폴더의 build-tools로 이동한 다음 빌드에 사용한 gradle plugin 버전으로 들어간다. 여기에 zipalign이 위치해 있다.

zipalign -v 4 foo.apk bar.apk

다음과 같이 입력해주면 되지만… 결과는 fail이었다. 마지막에 다음과 같이 찍혔다.

4413714 resources.arsc (BAD - 2)
Verification FAILED

구글링을 해보니 명확한 원인은 찾을 수 없었고 수동으로 signing을 하면 된다고 하는 글이 있었다.

수동 사인은 다음과 같이 할 수 있다.

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [keystore file] foo.apk [alias]

여기서 alias가 뭔지 고민했는데 다음 명령어를 통해 확인할 수 있다.

keytool -keystore [keystore file] -list -v

이번에는 다음 메시지가 나온다.

jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compressed size

이는 이미 사인되어 있는 apk일 경우에 나오는 메시지라 한다. 사이닝 정보다 담기는 META-INF 폴더를 다음 명령어로 지운다.

zip -d foo.apk META-INF/\*

자 이제 올려볼까? 이젠 디버그 모드로 되어 있다고 하면서 안 된다. 마지막으로 menifest에 다음을 추가한다.

android:debuggable="false"

된다… 힘들었다


'Tech > Android' 카테고리의 다른 글

SyncAdapter는 무엇이죠?  (0) 2016.05.10
UNEXPECTED TOP-LEVEL EXCEPTION Multiple dex files define  (0) 2015.09.09
AsyncTaskLoader는 무엇이죠?  (0) 2015.08.14

+ Recent posts