jarsigner : jar에 서명 할 수 없음 : java.util.zip.ZipException : 잘못된 항목 압축 크기 (예상 값 463이지만 465 바이트 있음)
apk에 서명 할 때 "jarsigner : cannot sign jar : java.util.zip.ZipException : invalid entry compression size (expected 463 but got 465 bytes)"이 오류 메시지가 표시됩니다. APK 크기는 거의 1MB입니다. 크기를 500KB로 줄이면 서명이 성공합니다. 왜 그렇게? .. 어떤 아이디어?
이미 서명 된에 서명하려고합니다 .apk
. 서명되지 않은 .apk
파일 을 내 보낸 다음 jarsigner
.
당신은 확실히 있습니다 다른 키를 사용하여 이미 APK 서명 여러 번 로그인 할 수 :
다른 키로 APK에 여러 번 서명 할 수 있습니다.
예를 들어 릴리스 키로 Debug-Apk에 서명하여 릴리스 된 버전의 업그레이드를 테스트 할 수있었습니다. 또한 버그 재현을위한 디버그 키를 사용하여 이미 출시 된 APK에 서명 할 수있었습니다.
이것이 당신이해야 할 일입니다
.apk
파일 이름 을.zip
.zip
파일의 압축을 풀고META-INF
폴더를 제거하십시오.- 폴더를 다시 압축하고 이름을
.apk
- APK에 서명 :
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \
-keystore my-release-key.keystore my_application.apk alias_name
디버그 키의 경우 별칭은 androiddebugkey
및 비밀번호 여야 합니다 android
. 디버그 키 저장소는 기본값 $HOME/.android/debug.keystore
입니다. 디버그 모드로 로그인을 참조하십시오 .
이것은 위의 @Joerg 답변 의 1 Liner / 1 Step 버전입니다.
zip -d foo.apk META-INF/\*
이는 zip
명령 의 내장 된 "기존 아카이브에서 삭제"기능을 사용합니다 . 해당 명령을 실행하면 다음이 표시됩니다.
deleting: META-INF/MANIFEST.MF
deleting: META-INF/CERT.SF
deleting: META-INF/CERT.RSA
... 출력으로. 이러한 파일은 기존 서명입니다. 제거하면 다시 서명 할 수 있습니다.
또한 이 문제를 방지 하려면 -sigalg SHA1withRSA
및 -digestalg SHA1
인수를 에 전달해야합니다 jarsigner
. https://code.google.com/p/android/issues/detail?id=19567
Google 문서에 따르면 http://developer.android.com/guide/publishing/app-signing.html#signapp 여러 번 APK에 서명 할 수 있습니다 . 서명되지 않은 빌드를 얻을 수없는 경우 APK를 부풀린 다음 다시 압축 할 수 있지만 서명 할 수 있습니다.
이 오류가 발생하는 한 zipaligned .apk 파일에 서명하려고 할 때 발생합니다.
jarsigner가 zipalign 변경 사항 중 일부를 견딜 수없는 것 같습니다. 이것은 자주 발생하지 않습니다.
'Development Tip' 카테고리의 다른 글
일반 배열에서 동일한 키와 값을 사용하여 assoc 배열 만들기 (0) | 2020.10.18 |
---|---|
문자열에 문자 만 포함되어 있는지 확인 (0) | 2020.10.17 |
축 및 격자 선 숨기기 (0) | 2020.10.17 |
iOS 7에서 탭 막대 색조 색상 변경 (0) | 2020.10.17 |
Android에서 애플리케이션을 닫고 홈 화면을 시작합니다. (0) | 2020.10.17 |