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


121

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

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

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


예, 인증서의 요점은 사람들이이 작업을 수행하지 못하도록하는 것입니다 ... 원본 인증서가 없으면 다시 생성해야합니다.
edthethird

그게 다야, 원본 인증서가 있지만 apk를 디코딩 / 재 구축하여 제거했습니다.
svarog

답변:


285

사용하여 키 만들기

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

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


11
이게 답이되어야합니다. 원래 답변에 대한 찬성 27 개 대 3 개, 제발!
Kyle

1
이렇게하고 APK를 설치하려고하면 INSTALL_FAILED_DUPLICATE_PERMISSION 오류가 발생할 수 있습니다. 이것은 원래 APK가 (시스템 또는 내장 된 응용 프로그램, 예를 들어) overwrited 할 수없는 경우에 발생
Couitchy

@Couitchy adb shell pm install -r /data/tmp/myapk.apk
Dr Deo

14
jarsigner의 -verbose -sigalg SHA1withRSA와 -digestalg SHA1 -keystore ~ / .android /하게 debug.keystore app.apk androiddebugkey -storepass 안드로이드 : 당신이 키를 생성 귀찮게 싶지 않는 경우와 디버그 키를 사용할 수 있습니다
펠렛

3
jarsigner과 사용하는 데 차이가 apksigner있습니까? 하나는 서명 한 다음 zipaligning이 필요하고 다른 하나는 zipaligning 한 다음 signinig가 필요합니다.
Maria Ines Parnisari

72

자동화 된 프로세스 :

이 도구 사용 (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

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


6
uber-apk-signer에 감사드립니다! 훌륭한 도구!
cantoni

2
빌드 도구 24.0.3 zipalign을 호출하는 올바른 방법은 다음과 같습니다 zipalign을 -p 4 my.apk 내-aligned.apk
kinORnirvana

설명해 주셔서 감사합니다! uber-apk-signer를 먼저 시도했지만 오라클 "공식"자바 대신 내 시스템에 openJDK를 설치했기 때문에 실패했을 것입니다. 그래서 수동 방식을 시도했지만 실패했습니다 (여전히 동일한 오류 [INSTALL_PARSE_FAILED_NO_CERTIFICATES]). uber-apk-signer로 확인하는 것은 나에게 더 많은 통찰력을 주었다 signature VERIFY FAILED[...] ERROR: JAR signer CERT.RSA: JAR signature META-INF/CERT.RSA uses digest algorithm 2.16.840.1.101.3.4.2.1 and signature algorithm 1.2.840.113549.1.1.1 which is not supported on API Levels [[15, 17]]. 예, Android 4.2.2, SHA256이 없나요? 아이디어?
antiplex

@antiplex하지 SO GitHub의에서 문제를보고하십시오
패트릭 파브르

@ for3st 내 문제가 apk 서명에 대한 제한된 지식 때문이 아니라 uber-apk-signer의 어떤 형태의 비 호환성 때문일 수 있음을 의미합니까? 하지만 도구와 관련이없는 것처럼 보이는 수동 방식도 실패합니다.
antiplex

14

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

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


4

모든 프로젝트에 대해 편집 할 bat 파일을 만들고 싶지 않거나 keytools 및 jarsigner 프로그램과 관련된 모든 명령을 기억하고 싶지 않고 한 프로세스에서 수행하고 싶은 사람들을 위해 다음 프로그램을 사용하십시오.

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

매번 모든 파일 위치를 입력해야하는 긴 프로세스에 지쳐서 만들었습니다.

이 프로그램은 구성을 저장할 수 있으므로 다음에 시작할 때 생성을 누르기 만하면 자동으로 처리됩니다. 그게 다야.

설치가 필요하지 않으며 완전히 이식 가능하며 구성을 동일한 폴더의 CSV로 저장합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.