program story

이미 컴파일 된 APK에 서명하는 방법

inputbox 2020. 8. 8. 12:39
반응형

이미 컴파일 된 APK에 서명하는 방법


apktool (원본 소스 코드가 손실 되었기 때문에)으로 APK를 디코딩하여 레이아웃 xml 파일의 일부 문제를 해결할 수있었습니다. 그런 다음 apktool을 사용하여 다시 빌드했으며 내 기기에 설치하려고 할 때 (adb : adb install appname.apk 사용)이 오류가 발생했습니다.

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

원래 apk는 (eclipse IDE에서) 키 저장소에 의해 서명되었지만 이것은 그렇지 않습니다. Eclipse 외부의 원래 키스톤 파일로 어떻게 올바르게 서명 할 수 있습니까 ??


사용하여 키 만들기

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

그런 다음 다음을 사용하여 apk에 서명하십시오.

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

자세한 정보는 여기에서 확인하세요


자동화 된 프로세스 :

이 도구 사용 (Google의 새로운 apksigner 사용) :

https://github.com/patrickfav/uber-apk-signer

면책 조항 : 개발자 임 :)

수동 프로세스 :

1 단계 : 키 저장소 생성 (한 번만)

키 저장소를 한 번 생성하고이를 사용하여 unsignedapk 에 서명해야합니다 . 에서 찾은 JDK 에서 제공하는 사용keytool %JAVA_HOME%/bin/

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

2 단계 또는 4 단계 : Zipalign

zipalign Android SDK 에서 제공하는 도구 입니다. 예를 들어 %ANDROID_HOME%/sdk/build-tools/24.0.2/APK를 Play 스토어에 업로드하려는 경우 필수 최적화 단계입니다.

zipalign -p 4 my.apk my-aligned.apk

참고 : 이전을 사용할 때 jarsigner당신은 zipalign을 필요 AFTER의 서명. 새로운 apksigner방법을 사용할 때 서명 하기 전에 수행하십시오 (혼란 스럽습니다). apksigner가 APK 정렬 및 압축을 유지하기 때문에 apksigner 전에 zipalign을 호출하면 잘 작동합니다 (jarsigner와 달리).

정렬을 확인할 수 있습니다.

zipalign -c 4 my-aligned.apk

3 단계 : 서명 및 확인

빌드 도구 24.0.2 이하 사용

사용 jarsigner키 도구처럼, JDK의 배포와 함께 제공이 발견 %JAVA_HOME%/bin/하고 너무 좋아 사용

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

다음으로 확인할 수 있습니다.

jarsigner -verify -verbose my_application.apk

빌드 도구 24.0.3 이상 사용

Android 7.0에는 APK 서명 체계 v2가 도입되었습니다. 새로운 앱 서명 체계는 더 빠른 앱 설치 시간과 APK 파일의 무단 변경으로부터 더 많은 보호를 제공합니다 (자세한 내용은 여기여기 참조). 따라서 Google apksigner (duh!) 라는 자체 apk 서명자를 구현했습니다 . 스크립트 파일은 %ANDROID_HOME%/sdk/build-tools/24.0.3/(.jar은 /lib하위 폴더에 있음) 에서 찾을 수 있습니다 . 이렇게 사용하세요

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

다음으로 확인할 수 있습니다.

apksigner verify my-app.apk

공식 문서는 여기에서 찾을 수 있습니다.


가장 빠른 방법은 디버그 키 저장소로 서명하는 것입니다.

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android

또는 Windows :

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.android/debug.keystore test.apk androiddebugkey -storepass android

You use jarsigner to sign APK's. You don't have to sign with the original keystore, just generate a new one. Read up on the details: http://developer.android.com/guide/publishing/app-signing.html


For those of you who don't want to create a bat file to edit for every project, or dont want to remember all the commands associated with the keytools and jarsigner programs and just want to get it done in one process use this program:

http://lukealderton.com/projects/programs/android-apk-signer-aligner.aspx

I built it because I was fed up with the lengthy process of having to type all the file locations every time.

This program can save your configuration so the next time you start it, you just need to hit Generate an it will handle it for you. That's it.

No install required, it's completely portable and saves its configurations in a CSV in the same folder.


Updated answer

Check https://shatter-box.com/knowledgebase/android-apk-signing-tool-apk-signer/

Old answer

check apk-signer a nice way to sign your app

참고URL : https://stackoverflow.com/questions/10930331/how-to-sign-an-already-compiled-apk

반응형