본문 바로가기
IT일반

초 간단하게 안드로이드 apk 사인하기 CLI 커맨드라인 활용

by 바이트뉴클리어스.넷 2023. 6. 19.
반응형

오래전에 정리해 놓았던 글입니다. 지금은 생산적인 방법이 있을 수도 있고, 내용이 약간 다른 부분이 있을 수 있고, 파라미터의 변형이 있을 수도 있습니다. 그런데, 기본적인 접근 방법은 같습니다. 또한, 이렇게 커맨드라인으로 사이닝할 수 있다는 것을 알아두면 접근하는 시각이 달라질 것이라 생각하여, 일단 블로그에 올립니다.

 

- 아래 내용 - 

 

안드로이드 마켓-구글 플레이에 앱을 등록하려면, singing이 필요합니다. 
앱 스토어도 마찬가지 입니다. 애플 앱은 xcode에서 관리하는 것이 편리합니다.

왜 싸이닝을 할까요?

sign이라는 것은 고유함-인증했음을 증명하는 행위입니다.

앱을 구별짓는 id 가 있지만, 누구든 id를 지정하여 앱을 만들 수 있습니다. 따라서 그 고유성은 id로만 분별하기에는 무리가 있죠.

따라서, 자신만의 고유한 key값으로 앱을 signing 합니다.

이렇게 되면, 앱을 업데이트할 때에도, 항상 같은 key로 싸인을 함으로써, 고유한 인증임을 확인할 수 있습니다.

따라서~! key를 저장한 keystore 파일을 분실해 버리면~! 절대로 같은 앱을 업데이트 할 수 없습니다. (이렇때는, 그냥 새로 올려야죠..)

keystore는 꼭 "소산"해서 저장해 놓으세요!!
저는 icloud, evernote, google drive에 소산중입니다.

내가 올린 앱이나 아니냐의 문제가 아니라, 고유한 key로 싸인된 앱 만이 이전앱의 업그레이드 버전임을 증명할 수 있습니다.

저는, HTML5를 이용한 웹앱을 만들다 보니, 이클립스를 사용하지 않고, 커맨드 라인에서 처리하는 방법이 있었으면 좋겠다 생각했습니다.

cordova CLI를 사용하면, unsigned apk를 쉽게 만들 수 있는데, signing만 하자고, 소스를 이클립스에서 열어서, signed 를 export하는 것이 꽤나 부담이 됩니다.

apk 사인하는 GUI툴들도 있는데, 시원치 않고 GUI는 반자동화하기에는 무리가 있습니다.

하지만, CLI가 가능하다면, 자동화도 가능하고, text파일로 메모후 적용하는 것도 훨씬 간편하고 좋습니다.

준비물: release unsigned apk 파일, android SDK(당연히..), JDK(대부분 설치되어 있죠)

명령어: 

jarsigner -verbose -keystore bytenecleus.keystore release-unsigned.apk bytenecleus

zipalign -f -v 4 release-unsigned.apk release-signed-align.apk

설명:

jarsigner -verbose -keystore <keystore 파일> <unsigned apk 파일> <alias name>
unsigned 된 apk파일을 keystore 파일을 이용하여 signing 합니다. <alias name>은 keystore안에 저장된 해당하는 앱을 위한 이름입니다.

zipalign -f -v 4 <input file> <output file>
apk파일이 사실은 zip파일인데, apk 형식(?)에 맞게 재 정렬/정리해주는 과정입니다. 여기에서 나온 out file을 마켓에 등록하면 됩니다.
-f는 overwrite 옵션입니다. 4는 4 byte로 정렬한다는 옵션입니다.

커맨드 명령어 처음에 찾고 파라미터 최적화하는데 시간이 조금 소요되지만, 한번 맛들리면, 커맨드 라인만 쓰게 됩니다.

게다가 osx는 linux 기반이다보니, 할 수 있는 일도 많아 더 자주 쓰게 되네요.

*추가정보 아래:

암호화
Version 3
RSA 2048 bits
SHA 256 WITH RSA
유효기간 설정 편의를 위해 길게 잡음. 장단점존재.

 

-----

 

감사합니다.