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 변경 사항 중 일부를 견딜 수없는 것 같습니다. 이것은 자주 발생하지 않습니다.
답변
.aab 파일에 서명 할 때이 문제가 발생했습니다. 중복 서명을 제거하면 (번들링의 일부로 한 번, 수동으로 한 번) 수정되었습니다. 이것은 기본 반응 네이티브 앱 스캐 폴딩의 일부였습니다.
app/build.gradle
파일은 섹션이 포함되어 android/buildTypes/release
그 한 signingConfig
키 세트를. 파일을 .apk 파일 생성 할 때 무시 듯하지만 .aab 형식으로 전환 할 때 그것은 것 같습니다 했던 그 서명을 적용합니다. 그런 다음 CI에 자체 서명을했을 때 이미 서명했기 때문에 불만을 토로했습니다.