Android apk 서명

LIAPP으로 보호된 안드로이드용 Apk 파일은 반드시 signing과 zipalign을 적용하여야 합니다.

signing이 되지 않은 앱파일은 디바이스에 설치되지 않으며 zipalign이 되지 않은 앱파일은 마켓에 등록되지 않을 수 있습니다.

apk 파일은 빌드 시 적용한 APK Signature Scheme 버전에 따라 jarsigner 혹은 apksigner를 이용하여 signing을 진행합니다.

v1을 적용한 apk 파일은 jarsigner를 이용할 수 있지만 v2가 적용된 apk와 targetSdkVersion이 30이상인 apk 파일은 apksigner를 이용해야 합니다.

apk 파일의 Signature Scheme 버전을 확인하는 방법은 다음과 같습니다.

  1. Android Studio에서 확인
    Generate Signed Bundle or APK 옵션에서 V2 (Full APK Signature) 체크 여부 확인
    ANDROID STUDIO

  2. command로 확인

    • 명령 실행
      java -jar [apksigner.jar Path] verify -v --print-certs [LIAPP 적용하기 전 Apk의 Path]

    • Verified using v2 scheme (APK Signature Scheme v2): true 확인
      CHECK APKSIGNER

    • apksigner 파일은 Android SDK가 설치된 경로의 build-tools에 위치

jarsigner를 이용할 때는 signing 후 zipalign을 진행해야 하지만 apksigner를 이용할 때에는 zipalign 후 signing을 진행해야 합니다.

jarsigner를 이용한 signing 및 zipalign 적용 명령어
  1. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 –keystore [키스토어 파일 Path] [사이닝 할 APP의 Path] [키 생성 시 만들었던 사용자의 alias_name]
  2. 암호 입력(입력 내용이 화면에 표시되지 않음)
  3. zipalign -f -v 4 [zipalign 할 APP의 Path] [zipalign 된 APP의 Path]
      

jarsigner를 이용한 signing 및 zipalign 적용 예

C:\>jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore C:\my-release-key.keystore LIAPP_with_APP.apk LOCKINCOMPANY
Enter Passphrase for keystore : password
C:\>zipalign -f -v 4 LIAPP_with_APP.apk LIAPP_with_APP_zipaligned.apk

apksigner를 이용한 zipalign 및 signing 적용 명령어
  1. zipalign -f -v 4 [zipalign 할 APP의 Path] [zipalign 된 APP의 Path]
  2. java -jar [apksigner.jar Path] sign –ks [키스토어 파일 Path] –ks-key-alias [키 생성 시 만들었던 사용자의 alias_name] [사이닝 할 APP의 Path]
  3. 암호 입력(입력 내용이 화면에 표시되지 않음)
      

apksigner를 이용한 zipalign 및 signing 적용 예

C:\>zipalign -f -v 4 LIAPP_with_APP.apk LIAPP_with_APP_zipaligned.apk 
C:\>java -jar D:\android\sdk\build-tools\30.0.0\lib\apksigner.jar sign --ks C:\my-release-key.jks --ks-key-alias LOCKINCOMPANY LIAPP_with_APP_zipaligned.apk
Keystore password for signer #1: password