App을 만든뒤에 스토어에 배포하기 위해서는 Signing 작업이 필요합니다
Signing작업시 Keystore 파일이 필요한데요, 배포하기 위한 Keystore파일을 가지고 있지 않고 다른 곳에서 Signing을 하는 경우에 아래와 같은 방법을 사용하게 됩니다.
우선은 Keystore파일이 없으므로, apk를 만들때 unsigned apk를 만듭니다.
이때, 만들어진 unsigned apk를 Signing 하는 곳에 전달하고, 전달받은 곳에서 jarsigner나 apksigner를 이용해서 Signing 작업을 진행합니다.
unsigned apk를 Signing 하는 예제
keytool -genkey -v -keystore ./mykey.keystore -alias alias -keyalg RSA -validity 10000
키저장소비밀번호 : 1q2w3e4r
이름과성 : myapp
조직단위 :
조직이름 :
구군시이름 :
시도이름 :
2자리국가코드 :
mykey.keystore 파일이 생성됨
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ./mykey.keystore myapp.apk alias
키저장소비밀번호 : 1q2w3e4r
myapp.apk 파일이 생성됨
jarsigner -verify -verbose -certs myapp.apk
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 파일 경로>
Reference
'앱 개발 놀이터' 카테고리의 다른 글
Assets의 텍스트 파일 불러오기 (0) | 2020.07.07 |
---|---|
LinearLayout Weight (0) | 2020.07.07 |
jarsigner vs apksigner 의 차이점은 무엇입니까? (0) | 2020.06.28 |
cmd를 이용하여 Unsigned Apk 파일 서명(Signing)하기 - LIAPP 적용 후 필수과정! (0) | 2020.06.26 |
안드로이드 디버깅 - Logcat 로그 남기기 (0) | 2020.06.18 |