Android APK 파일에 서명하는 방법


111

내 apk 파일에 서명하려고합니다. 어떻게해야할지 모르겠어요. 좋은 심층 방향을 찾을 수 없습니다. 프로그래밍 경험이 거의 없으므로 도움을 주시면 감사하겠습니다.




1
필자는 자체 키 저장소 생성부터 Eclipse에서 서명 된 APK 내보내기까지이 전체 자습서를 사용했습니다. mahadera.com/export-signed-android-apk-in-eclipse-ide
제이슨 타마에게

답변:


84

설명서는 충분히 명확합니다. 당신이 그것을 통해 작업 한 후에 어떤 부분이 붙어 있는지 지정하십시오.

https://developer.android.com/studio/publish/app-signing.html

좋습니다. 참조 나 일식이없는 작은 개요이므로 오류를위한 공간을 남겨 두세요.하지만 이렇게 작동합니다.

  • Eclipse에서 프로젝트 열기
  • 오른쪽 마우스 클릭-> 도구 (안드로이드 도구?)-> 서명 된 애플리케이션 내보내기 (apk?)
  • 마법사를 진행합니다.
  • 새 키 저장소를 만듭니다. 그 암호를 기억하십시오
  • 앱에 서명
  • 그것을 저장하십시오.

또한 링크에서 :

Eclipse ADT로 컴파일 및 서명

ADT 플러그인과 함께 Eclipse를 사용하는 경우 내보내기 마법사를 사용하여 서명 된 .apk를 내보낼 수 있습니다 (필요한 경우 새 키 저장소를 만들 수도 있음). 내보내기 마법사는 Keytool 및 Jarsigner와의 모든 상호 작용을 수행하므로 위에서 설명한대로 컴파일, 서명 및 정렬하는 수동 절차를 수행하는 대신 GUI를 사용하여 패키지에 서명 할 수 있습니다. 마법사가 패키지를 컴파일하고 서명하면 zip 정렬을 사용하여 패키지 정렬도 수행합니다. 내보내기 마법사는 Keytool과 Jarsigner를 모두 사용하므로 서명을위한 기본 설정에서 설명한대로 컴퓨터에서 액세스 할 수 있는지 확인해야합니다.

Eclipse에서 서명되고 정렬 된 .apk를 만들려면 :

  1. 패키지 탐색기에서 프로젝트를 선택하고 파일> 내보내기를 선택합니다.
  2. Android 폴더를 열고 Android 애플리케이션 내보내기를 선택한 후 다음을 클릭하십시오.

    이제 Android 애플리케이션 내보내기 마법사가 시작되어 .apk에 서명 할 개인 키를 선택하거나 새 키 저장소 및 개인 키를 만드는 단계를 포함하여 애플리케이션 서명 프로세스를 안내합니다.

  3. 내보내기 마법사를 완료하면 애플리케이션이 컴파일, 서명, 정렬되고 배포 할 준비가됩니다.

시작하는 방법을 이해하지 못합니다. 이클립스 버전을 사용하고 있습니다 : Helios Service Release 1
chriss 2011 년

2
그러나 전체를 읽으십시오. 일식의 끝에서 몇 가지 팁도있다
Nanne

1
키 생성에서 별칭으로 무엇을 입력해야합니까?
chriss

9
설명서를 읽었습니까? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.그냥 별칭 일뿐입니다. 당신이 원한다면 이름. 나는 "firstkey":-) 좋을 것
Nanne

1
죄송합니다. 여전히 이해가되지 않습니다. 이 별칭을 어떻게 사용합니까? 그 목적은 무엇입니까?
user462990

37

다음은 APK에 수동으로 서명하는 방법에 대한 가이드입니다. (2016apk-signer 년 10 월)에 도입 된 새로운 정보가 포함되어 있습니다.build-tools 24.0.3

자동화 된 프로세스 :

이 도구 사용 (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 파일의 무단 변경에 대한 보호를 강화하는 새로운 앱 서명 체계 인 APK 서명 체계 v2를 도입했습니다 (자세한 내용은 여기여기 참조). 따라서 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

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


10

IntelliJ IDEA 또는 Android Studio 사용자의 경우 다음 단계를 수행하십시오.
* 메뉴에서 Build/Generate signed APK
* 키 저장소 경로를 만들어야합니다. 대화 상자에서를 클릭 Create new합니다. 키를 포함하는 jks 파일을 생성합니다. 폴더를 선택하고 암호를 정의하십시오. 그래서 당신의 키 저장소는 괜찮습니다.
* 별칭, 키 암호, 이름 등을 사용하여 응용 프로그램에 대한 새 키를 만듭니다.
* 다음을 클릭합니다.
* 대화 상자에서 Proguard 를 선택하거나 선택 하지 않습니다.

서명 된 APK 파일이 준비되었습니다.

도움말 파일 : https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html


8

걱정마 ...! 아래 단계를 따르면 서명 된 .apk 파일을 얻을 수 있습니다. 나도 그것에 대해 걱정했지만,이 단계는 나를 좌절에서 벗어나게한다. 신청서에 서명하는 단계 :

  1. 서명되지 않은 패키지를 내 보냅니다.

Eclipse에서 프로젝트를 마우스 오른쪽 버튼으로 클릭-> Android 도구-> 서명되지 않은 애플리케이션 패키지 내보내기 (예 : GoogleDriveApp.apk를 데스크톱으로 내보냄)

키 저장소 및 jarsigner 도구를 사용하여 애플리케이션에 서명합니다 (아래 단계 수행).

cmd를 엽니 다-> "jarsigner.exe"가있는 디렉토리를 변경합니다 (예를 들어 내 시스템의 "C : \ Program Files \ Java \ jdk1.6.0_17 \ bin"에 있습니다.

이제 cmd에 belwo 명령을 입력하십시오.

jarsigner -verbose -keystore c : \ users \ android \ debug.keystore c : \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk my_keystore_alias

암호를 입력하라는 메시지가 표시됩니다. 키 저장소의 암호 입력 : APK에 서명합니다. 서명이 성공했는지 확인하려면 다음을 실행할 수 있습니다.

jarsigner-c : \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk 확인

다음과 함께 반환되어야합니다. jar 확인.

방법 2

ADT와 함께 eclipse를 사용하는 경우 파일을 컴파일, 서명, 정렬하고 배포 할 준비가 간단합니다.이 단계를 따르기 만하면됩니다.

  • 파일> 내보내기.
  • 안드로이드 애플리케이션 내보내기
  • 찾아보기-> 프로젝트 선택
  • 다음-> 다음

이 단계는 프로젝트를 컴파일, 서명 및 압축하여 정렬하므로 이제 프로젝트를 배포하거나 Google Play 스토어에 업로드 할 준비가되었습니다.


그게 바로 제가 필요로하는 것입니다. 새로운 온라인 빌드 도구를 사용하고 새로 생성 된 키 저장소가 아닌 이전 키 저장소를 사용해야했습니다. 내가 놓친 유일한 것은 APK를 ZIP ALIGNing하는 것입니다. 그래서 누군가가 같은 문제를 가지고 있다면 여기로 가십시오. stackoverflow.com/a/22682132/826194
Larzan

5

APK 서명 프로세스

Android APK 파일에 수동으로 서명하려면 다음 세 명령을 실행하십시오.

  1. 키 저장소 파일 생성

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. 다음을 사용하여 APK 파일에 서명 jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. zipalign 도구를 사용하여 서명 된 APK 정렬

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

1 단계


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000

예:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

키 저장소 비밀번호 : yourApp @ 123 키 비밀번호 : yourApp @ 123

CMD O / P

D:\ru\SignedBuilds\MySignedApp>keytool -genkey -v -keystore id.keystore
 -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  MySignedApp Sample
What is the name of your organizational unit?
  [Unknown]:  Information Technology
What is the name of your organization?
  [Unknown]:  MySignedApp Demo
What is the name of your City or Locality?
  [Unknown]:  Mumbai
What is the name of your State or Province?
  [Unknown]:  Maharashtra
What is the two-letter country code for this unit?
  [Unknown]:  IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
  [no]:  y

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
        for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
 C=IN
Enter key password for <MySignedApp>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]

D:\ru\SignedBuilds\MySignedApp>

2 단계


Sign your app with your private keystore using jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id

CMD O / P

D:\ru\SignedBuilds\MySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/---.SF
   adding: META-INF/---.RSA
  signing: AndroidManifest.xml
  ..... 
    signing: classes.dex
  signing: lib/commons-codec-1.6.jar
  signing: lib/armeabi/libkonyjsvm.so
jar signed.

Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not
be able to validate this jar after the signer certificate's expiration date (2044-02-07) or after an
y future revocation date.

D:\ru\SignedBuilds\MySignedApp>

Verify that your APK is signed

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk

CMD O / P

D:\ru\SignedBuilds\MySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
 s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate's expiration date (2044-02-09) or after any
 future revocation date.

D:\ru\SignedBuilds\MySignedApp>

3 단계


zipalign을 사용하여 최종 APK 패키지 정렬

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

zipalign -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P

D:\Android\android-sdk\build-tools\19.1.0>zipalign -v 4 D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16
_prod_playstore\MySignedAppS1-release-unsigned.apk D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16_prod
_playstore\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

  4528613 classes.dex (OK - compressed)
 5656594 lib/commons-codec-1.6.jar (OK - compressed)
 5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P

D:\Android\android-sdk\build-tools\19.1.0>zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

 4453984 res/drawable/zoomout.png (OK)
 4454772 res/layout/tabview.xml (OK - compressed)
 4455243 res/layout/wheel_item.xml (OK - compressed)
 4455608 resources.arsc (OK)
 4470161 classes.dex (OK - compressed)
 5597923 lib/commons-codec-1.6.jar (OK - compressed)
 5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

노트 :

확인 명령은 APK가 올바르게 빌드되고 서명되었는지 확인하는 것입니다!

참고 문헌

나는 이것이 모두에게 도움이되기를 바랍니다. :)


2

이 문제가 발생하여 매니페스트에서 최소 SDK 버전을 확인하여 해결되었습니다. 15 (ICS)로 설정되었지만 내 휴대폰은 10 (Gingerbread)을 실행했습니다.

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