[android] 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에 서명 할 수있었습니다.

이것이 당신이해야 할 일입니다

  1. .apk파일 이름 을.zip
  2. .zip파일의 압축을 풀고 META-INF폴더를 제거하십시오.
  3. 폴더를 다시 압축하고 이름을 .apk
  4. 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에 자체 서명을했을 때 이미 서명했기 때문에 불만을 토로했습니다.


답변