프로그래밍/Android

jarsigner/apksigner로 apk signing하기 (콘솔에서 Signing 하기)

freemmer 2019. 1. 15. 13:40
App을 만든뒤에 스토어에 배포하기 위해서는 Signing 작업이 필요합니다
Signing작업시 Keystore 파일이 필요한데요, 배포하기 위한 Keystore파일을 가지고 있지 않고 다른 곳에서 Signing을 하는 경우에 아래와 같은 방법을 사용하게 됩니다.
우선은 Keystore파일이 없으므로, apk를 만들때 unsigned apk를 만듭니다.
이때, 만들어진 unsigned apk를 Signing 하는 곳에 전달하고, 전달받은 곳에서 jarsigner나 apksigner를 이용해서 Signing 작업을 진행합니다.

jarsigner로 apk sign시 Android 4.4에서 설치되지 않는 현상이 있는데, 이는 Android 4.4 하위버전이 JDK7이전 Java 기반으로 설계되어 암호화 방식이 틀리기 때문이다.

* JDK6 java버전에서 할 경우에는 기존의 command로 sign해도 문제없이 android 4.4 하위버전에서 설치됩니다.
jarsigner -keystore xxx.jks -storepass xxxx -keypass xxxx filename.apk aliasname
* JDK7 이상의 java 버전에서 jarsigner로 apk를 signing 할 경우, -sigalg SHA1withRSA -digestalg SHA1 옵션이 포함되어야 합니다.
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore xxx.keysotre xxxx.apk aliansname

APK파일 검증상태 확인법

apksigner verify --print-certs --verbose <apk >
결과 확인
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): false
apksigner로 Sign 상태를 확인 할 수 있습니다. 참고로, apksigner는 아래의 위치에 있습니다.
  • Windows → C:\Users\<사용자ID>\AppData\Local\Android\sdk\build-tools\<빌드툴 버전>
  • Mac         → /Users/<사용자ID>/Library/Android/sdk/build-tools/<빌드툴 버전>

V2가 false인 경우

Verified using v1 scheme (JAR signing): true 
Verified using v2 scheme (APK Signature Scheme v2): false
v2서명이 되어 있지 않은 이유는 jarsigner를 이용하면 v1서명만 되기 때문입니다. 
v1서명만 된 해당 apk파일을 아래 apksigner를 이용한 v2 수동서명을 진행 해야 합니다.
apksigner sign --ks <(.jks) > <APK >


반응형