Development Tip

jarsigner : jar에 서명 할 수 없음 : java.util.zip.ZipException : 잘못된 항목 압축 크기 (예상 값 463이지만 465 바이트 있음)

yourdevel 2020. 10. 17. 12:31
반응형

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 변경 사항 중 일부를 견딜 수없는 것 같습니다. 이것은 자주 발생하지 않습니다.

참고 URL : https://stackoverflow.com/questions/5089042/jarsigner-unable-to-sign-jar-java-util-zip-zipexception-invalid-entry-compres

반응형