티스토리 뷰

이번엔 Android 배포편이다.

하이브리드 앱 개발 프로젝트에서 Android 배포를 빼놓을 수는 없지.

 

일단 Android 앱도 iOS와 마찬가지로 인증서가 필요하다. 하지만 여기서 애플보다 좀 더 나은 점은 인증서를 돈주고 살 필요가 없다는 점에서 한편으로 다행이다.(애플은 무려 100달러나 내라고 한다. 돈 없는 개발자는 개발도 하지 말라며...)

 

개발자는 돈도 없고 삶도 없다고!

그래서 그런지 안드로이드 배포하는 방법은 애플처럼 개발자 등록하는 과정은 없다. 돈이 안든다는 이야기다.

(개발자를 등록하는 프로세스를 만들겠다고 소문만 들었지 아직 그런 절차는 없는거 같다)

 

이번 Cordova를 이용한 어플리케이션 개발 프로젝트처럼 Android Studio를 사용하지 못하는 환경에서 명령 프롬프트(터미널)에서 인증서(키 스토어)를 만들고 그걸 APK 파일에 입히고 그걸 최적화 하는 작업까지 진행하도록 하겠다.

 

일단 Release버전의 APK 파일을 만들었다는 상황에서부터 시작하겠다.

Cordova에서 Release버전으로 컴파일하는 방법을 모르면 안되겠지만 혹시라도 모를까봐 할려준다.

 

$ cordova build android --release

이렇게 하면 평소에 있던 디렉토리가 아니라 release 디렉토리가 생성되면서 거기엔 app-release-unsigned.apk 파일이 들어있을거다.

 

이 APK 파일을 배포하려고 바로 구글 플레이 콘솔에다가 턱하니 업로드를 하면 막 빨강글씨로 이거 안되는 거라며 이거 배포 안된다며 뭐라고 할거다. 인증서가 필요한 시점이다.

 

일단 APK 파일과 "zipalign.exe" 파일이 필요하다. zipalign.exe 파일을 찾고 싶다면 본인의 안드로이드 SDK 를 저장해 놓는 디렉토리가 어디인지 알아야한다.

 

아참, 까먹고 이야기 안했는데 이거 Windows에서 작업하는 방법을 소개하는거다. MacOS나 Linux 환경에서는 해본적이 없어서 어떻게 하는지 모른다. 양해바란다.

 

일단 안드로이드 SDK 는 본인이 Android Studio를 설치해서 SDK를 설치했다면 아마 [{사용자 폴더}\AppData\Local\Android\Sdk\build-tools\] 디렉토리 쪽에 가보면 찾을 수 있을거다. 웬 디렉토리들만 있다고 생각이 들거든 아무 최신 버전의 디렉토리에 가봐라. 거기에 있으니까 APK 파일있는 쪽에다 복사해 넣어두도록 하자.

 

복사 안하면 나중에 콘솔 커멘드가 길어지고 복잡해지고 짜증이나니까 내 말을 듣는편이 나중에 속편할 거다.

물론 환경변수 PATH에 경로를 추가하는 방법도 있지만 나는 그냥 파일 복사해 넣어서 작업했다.

맨날 쓰는 명령어도 아닌데 PATH에 추가해 쓰는 것도 조금(?) 애매해서.

 

아무튼 필요한 재료는 이렇게 APK 파일, zipalign.exe 파일 이렇게 두개다.

준비가 완료되었다면 시작해보자.

 

app-release-unsigned.apk 파일과 zipalign.exe 파일을 모셔둔 디렉토리에 명령프롬프트로 이동하자.

 

그리고 아래의 명령어를 입력한다.

 

$ keytool -genkey -v -keystore android.keystore -alias android-app-key -keyalg RSA -keysize 2048 -validity 10000

keytool 이라는 명령어는 인증서를 생성하는 명령어다. 지금 안드로이드 개발환경이 적절하게 구성되어있는 상태라면 keytool 이라는 명령어는 잘 동작할거다.  옵션들에 대한 설명은 아래와 같다.

 

  • -genkey : 키를 만들겠다!
  • -v : 상세정보를 출력하겠다.
  • -keystore : 키 저장소의 이름을 지정하겠다.(지금은 android.keystore로 한다. 다른걸 넣어도 상관없다. 다만 관례적으로 확장자 이름을 보통 keystore로 하는데 이점에 유의하면 좋겠다.)
  • -alias : 처리할 항목의 별칭 이름이라고 나와있는데 그냥 키 이름을 지정하는거다.(지금은 android-app-key로 했다. 이것도 다른걸 넣어도 상관없다)
  • -keyalg : 키 알고리즘 이름(지금은 RSA로 했지만 다른걸 넣어도 괜찮은지는 모르겠다. 테스트 안해봄)
  • -keysize : 키 비트 크기. 키의 사이즈를 의미한다.(지금은 2048비트로 지정했다. 그렇다면 2의 2048제곱의 가지수가 생긴다.)
  • -validity : 키의 유효기간 일 수를 의미한다.(10,000 일이면 충분하지 않을까?)

이 명령어를 입력하면 막 이것저것 물어볼거다. 

꼭 마지막에 대답을 "yes"가 아니라 "예"라고 해야한다.

한글로 "예"를 입력해야하다니.. yes를 입력해버리면 처음부터 다시 물어보니까 이점 유의해서 대답하도록하자.

 

암튼 이렇게 절차가 완료되면 

이렇게 "android.keystore" 파일이 생겨난 것을 확인할 수 있다. 뭐 -keystore 옵션을 바꿨다면 다른 이름이겠지만 암튼 키가 생겨난 것을 확인했다. 

이제 app-release-unsigned.apk에 방금 만든 키를 씌워 인증서를 적용하는 과정을 진행할거다.

명령프롬프트에 아래의 명령을 입력하자.

 

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore android.keystore app-release-unsigned.apk android-app-key

jarsigner는 JDK를 설치하면 다 있는 명령어다. 보통 자바를 한번쯤 보셨던 분들은 jarsigner 명령을 실행할 수 있을테니 JDK 설치에 관련된 건 이번 포스트에서는 진행하지 않겠다.

 

암튼 위의 명령들 옵션을 하나씩 알아보면 아래와 같다.

  • -verbose : 로그들을 자세히 출력할거라는 옵션
  • -sigalg : 서명 알고리즘의 이름을 명시한다. 나는 SHA1withRSA라고 했다. 사실 이쪽은 나도 문외한이라서 자세히 알지는 못한다. 그냥 가이드가 시키는대로 했다.
  • -digestalg : 다이제스트 알고리즘이라는데 사실 여기서 Digest라는 단어가 "소화"인지 "요약"인지 잘 모르겠지만 암튼 SHA1로 설정했다.
  • -keystore : 키 스토어 주소(URL도 상관없다.) 옵션이다.

맨 마지막 두개의 옵션은 서명을 할 파일과 키 스토어의 키 이름을 넣어주면 된다.

그리고 키스토어 암호를 물어볼텐데 아까 키 만들때 입력했던 암호를 입력해주면 된다. 그러면 이녀석이 모든 파일들에 걸쳐서 마구마구 헤집어 놓는걸 볼 수 있다.

 

 

경고 문구가 하나 뜰텐데 그건 키 만료일이 너무 먼 미래라서 뜨는 것이니 놀랄 필요 없다.

 

암튼 이렇게 하면 일단 APK파일에 서명을 입히는 작업을 마쳤다. 이제 마지막 작업을 통해 APK 파일을 최적화하도록 하자.

$ zipalign -v 4 app-release-unsigned.apk app-release.apk

이렇게 명령을 때려주면 뭐 압축되지 않은 리소스를 4바이트 단위로 정렬하여 최적화해준다고 가이드문서에 설명이 되어있다.(https://developer.android.com/studio/command-line/zipalign)

 

그래서 이걸 실행하면 또 뭐가 막 올라간다.

이렇게하면 app-release.apk 파일이 생성된 것을 확인할 수 있다.

이렇게 생성된 파일을 Google Play에 업로드 하면 되겠다.

 

오늘은 여기까지만! 안녕!

댓글
댓글쓰기 폼