태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


이번 시간에는 지난 1편에 이어, 실제로 릴리즈 빌드를 해보도록 하겠습니다.


안드로이드 스튜디오 1.1.0 기준으로 설명합니다. (안드로이드 스튜디오 1.0 출시 이후부터 구글에서는 이클립스 지원을 중단했다는 것 알고 계시죠? 제가 쓰는 Cocos2d-x는 아직 이클립스인데...ㅠㅠ 앱 개발은 안드로이드 스튜디오를 쓰고 게임 개발은 이클립스를 쓰는 난처한 상황이 벌어지네요...)


또한 개발 플랫폼은 MacOS X 10.10에서 작업하였음을 미리 알려드립니다.



1. 릴리즈 빌드용 키스토어 파일 생성 (인증서 만들기)


안드로이드 앱은 개발중인 디버그 모드 이든 배포를 위한 릴리즈 모드 이든지 간에 서명을 하게 됩니다. 


다만 디버그 모드일 때는 Android SDK가 개발용 인증서를 생성해서 서명을 하기 때문에 두개 이상의 PC에서 같은 단말기로 같은 프로젝트를 개발하는 것과 같은 특별한 이유가 없으면, 개발자는 신경 쓰지 않고 그냥 개발하면 됩니다.


하지만 배포를 위한 릴리즈 모드는 다릅니다. 배포를 위한 릴리즈 모드에서는 개발자(또는 제작자) 고유의 인증서를 생성해야 합니다.


그러면, 개발자 고유의 인증서를 생성하는 방법을 알아봅시다.


인증서를 생성하는것은 크게 두 단계로 구성되어 있다고 볼 수 있습니다. 


(1) 키스토어 생성 : 키스토어 파일은 개인 키를 모아둔 하나의 저장공간이라고 볼 수 있습니다.

(2) 개인키 생성 : 실제 개발한 앱을 소유한 사람(또는 단체)이 누구인지를 식별하게 해주는 키 입니다.


아래의 키스토어를 생성하는 방법을 사용하면, 키스토어 파일 자체와 키스토어 내부에 들어갈 개인키 하나가 같이 만들어 집니다.


그러면, 인증서를 만들어 보겠습니다.


[1] 인증서를 만드는 방법 1 - keytool을 이용하여 터미널에서 수동으로 생성


키스토어 파일을 만드는 가장 기본적인 방법은 터미널을 이용해서 직접 keytool을 사용하도록 타이핑 하는 것입니다. 

(안드로이드 개발자라면 당연히 설치가 되어 있겠지만, JDK 가 설치되어 있어야 합니다. keytool은 JDK에서 제공되는 툴입니다.

혹시 keytool이 어디에 있는지 궁금하다면, MacOS X 10.10의 경우 기본 설정으로 JDK가 설치되어 있다면,

'/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/bin' 디렉터리에서 keytool을 찾을 수 있습니다.)


터미널을 열고 아래와 같은 명령줄을 입력하여 키스토어와 개인키를 생성할 수 있습니다.


$ keytool -genkey -v -keystore release_key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000


여기서 release_key.keystore는 키스토어 파일 이름이므로 임의대로 정하면 됩니다.


alias_name은 나중에 앱을 이 키스토어 파일로 서명할 때 사용할 이름을 정해주는 것입니다.


정말 중요한 것은 -validity 값인데, 키스토어 파일의 유효기간을 정하는 것입니다. 단위는 '일' 입니다. 위의 예에서는 10000일이 되겠네요.

유효기간이 중요한 이유는 유효기간이 지나면 더이상 해당앱은 업데이트 할 수 없기 때문입니다.


구글 플레이 스토어에 배포할 앱을 만들때는 유효기간이 항상 2033년 10월 22일 이후로 끝나야 한다는 점 잊지 말아야 합니다.


이렇게 명령줄을 타이핑하고 엔터키를 누르면, 몇가지 입력해야할 항목들을 물어보게 됩니다. 적절하게 입력을 하고 나면, 하나의 개인키가 들어 있는 키스토어 파일이 생성되게 됩니다.


아래 화면은 실제 키를 만드는 예시를 보여 줍니다.

위의 예에서 release_key.keystore가 생성된 것을 볼 수 있습니다.


[2] 인증서를 만드는 방법 2 - Android Studio의 메뉴를 사용하여 만드는 방법


안드로이드 스튜디오를 통해서도 인증서를 만들 수 있습니다.


방법은, 서명된 APK 만들기 과정에서 인증서를 생성하는 기능이 있습니다.


먼저 안드로이드 스튜디오를 실행합니다.



안드로이드 스튜디오의 상단 메뉴에서, [Build] - [Generate Signed APK...] 를 클릭합니다.




[Next] 를 클릭합니다.




새로 인증서를 만들것이므로 [Create new...] 를 클릭합니다.




위 화면에서 필요한 항목들을 채우고 [OK] 를 클릭하면, 해당 인증서를 담은 키스토어 파일이 생성됩니다.

유효기간을 충분히 가져가야 한다는 점 꼭 기억하길 바랍니다.

위와 같이 새로운 키스토어 파일이 생성된 것을 확인 할 수 있습니다.

안드로이드 스튜디오에서는 기본적으로 .jks 확장자로 키스토어 파일을 생성하는데, .keystore와 동일합니다. (사실 사용자가 원하는대로 정하면 됩니다.)



이렇게 안드로이드 스튜디오에서 키스토어 파일을 만드는 것도 살펴봤습니다.



[꼭 기억하세요!] 키스토어 파일과 키스토어 암호, 개인 키 암호등의 관리와 관련하여...


매우 중요한 점이므로 반드시 기억하길 바랍니다.


어떤 앱을 구글 플레이 스토어에 한번 배포하였으면, 다음 업데이트 부터는 반드시 처음 배포했던 APK에 서명한 바로 그 키로 서명해야 합니다. 


만약에 해당 키스토어 파일을 잃어 버리거나 키스토어 비밀번호, 개인키 비밀번호 등을 잊어 버리면, 다시는 그 앱을 업데이트 할 수 없습니다. (새로 올리는 수 밖에 없는데, 서명이 다르므로 다른 앱으로 인식하게 됩니다.)


따라서 키스토어 파일과 비밀번호를 반드시 안전하게 보관해야 합니다.


또한 달리 말하면, 키스토어 파일과 비밀번호가 다른 사람에게 노출 되면, 해당 앱이 해킹이나 소유권 문제에 있어서 골치 아프게 될 수 있으므로 보안에도 각별히 신경 써야 합니다.


특히 iOS 개발 하시는 분들은, 애플의 방식과 다르다는 것을 반드시 기억해야 합니다. (애플 개발자의 경우 인증서를 개발자 사이트에 업로드 해서 개인을 식별하기 때문에, 나중에 배포 인증서가 바뀌어도 업데이트가 가능합니다.) 애플 방식을 생각하고 구글 플레이 스토어 방식의 키 관리를 하게 되면 위와 같은 문제에 직면 할 수 있습니다.


키스토어 파일 내용을 확인하려면?


생성된 키스터어 파일의 내용을 확인 하려면, 터미널에서 아래와 같이 입력하면 됩니다.


$ keytool -list -v -keystore 키스토어파일명





2. 릴리즈 빌드 및 APK 생성


이제 안드로이드 스튜디오에서 위에서 만든 인증서를 가지고 릴리즈 빌드와 서명을 해보겠습니다.


먼저 안드로이드 스튜디오를 실행하고 빌드할 프로젝트를 불러옵니다. (릴리즈 빌드를 위한 각종 세팅은 1편을 확인해 보길 바랍니다. [링크는 여기])




안드로이드 스튜디오 상단 메뉴의 [Build] - [Generate Signed APK...] 를 클릭합니다.




[Next] 를 클릭합니다.




만들어 놓은 키스토어 파일이 있다면, [Choose existing...] 을 클릭하여 서명에 사용할 키스토어 파일을 선택합니다.

(만약 만들어 놓은 키스토어 파일이 없다면, [Create new...] 을 클릭하여 만들 수 있습니다.)

만약 Key alias 가 사용하려는 별명이 아니면 우측 [...] 버튼을 눌러 선택한 키스토어 파일내에 있는 별명을 선택 할 수 있습니다.

모두 입력하였으면, [Next]를 클릭합니다.




릴리즈 빌드를 하고 서명할 APK 파일이 생성될 폴더의 위치를 선택합니다.

빌드 타입은 Release가 되겠죠.

[Finish]를 클릭하면 APK 릴리즈 빌드와 서명을 시작합니다.




에러 없이 빌드가 되고 서명이 되면 위와 같이 성공했다는 메시지가 뜹니다.


확인해 보면, 생성된 APK가 선택한 폴더에 생성된 것을 확인할 수 있습니다.


이렇게 릴리즈 빌드를 하고 서명한 APK 를 만드는 방법을 살펴봤습니다.


이 APK를 가지고 구글 플레이 스토어에 등록하게 될 것입니다.




(!) 참고 : APK 수동 서명


릴리즈 빌드된 APK를 안드로이드 스튜디오가 아닌 터미널에서 수동으로 서명하고 싶으면, 아래와 같은 명령어를 사용할 수 있습니다. 많이 쓸 일은 없겠지만 참고로 적어 둡니다.


$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release-key.keystore application.apk alias_name



APK 서명 검증하기


프로젝트가 릴리즈 모드로 빌드 되고, 생성해둔 개인키로 서명이 되었으면, 해당 APK는 구글 플레이 스토어에 업로드 할 준비가 된 것입니다.


그렇지만, 제대로 서명이 되었는지 궁금할 때가 있을 것입니다. 이런 경우에는 터미널에서 아래와 같은 명령으로 제대로 서명이 되었는지 검증 할 수 있습니다.


$ jarsigner -verify -verbose -certs application.apk


물론 application.apk는 릴리즈 빌드와 서명이 끝난 APK를 말합니다.


참고로 jarsigner는 keytool과 같이 JDK에 포함되어 있는 툴입니다.



ZipAlign 수동 최적화


이렇게 해서 구글 플레이 스토어에 업로드 할 APK가 생성이 되었습니다만, 마지막으로 zipalign 이라는 툴로 바이너리 정렬을 해줄 것을 권고 하고 있습니다.


이 툴은 AndroidSDK의 build-tools 디렉터리에 있습니다만....

안드로이드 스튜디오를 사용하면 자동으로 처리해 주니 신경 쓰지 않아도 될 것 같습니다.


http://tools.android.com/tech-docs/new-build-system/user-guide 에 있는 표를 살펴보면, 디버그 모드 빌드에서는 자동으로 비활성화 되고, 릴리즈 모드 빌드에서는 자동으로 활성화 된다고 표시되어 있습니다.


그러나 수동으로 zipalign 툴을 사용할 필요가 있다면,  터미널에서 아래와 같이 입력하면 됩니다.


$ zipalign -v 4 application_unaligned.apk application_aligned.apk


위 명령은 정렬되지 않은 application_unaligned.apk 파일을 application_aligned.apk 정렬하여 라는 이름으로 저장하라는 뜻입니다.


zipalign은 설명상으로는 특별한 바이트로 시작되는 압축되지 않은 모든 데이터를, 파일의 시작점과 연관하여 정렬시킨다고 하는데 사실 정확히 어떻게 하는지까지는 모르겠네요. zipalign을 해주면 앱 실행시 메모리 사용량이 줄어든다고 하니 해주는 것이 좋을 것 같습니다.



이렇게 하여, 자신의 어플리케이션을 구글 플레이 스토어에 등록할 바이너리가 준비되었습니다.


다음에는 실제로 구글 플레이 스토어에 등록해 보겠습니다.





(C) 2015 WingsNote.com, 무단 복제 게시 금지. 링크 허용.



Posted by 날개

댓글을 달아 주세요

  1. 2016.01.01 22:44 Address Modify/Delete Reply

    비밀댓글입니다

  2. 2016.09.28 09:43 Address Modify/Delete Reply

    비밀댓글입니다

  3. 김병희 2016.09.30 05:17 신고 Address Modify/Delete Reply

    간결하면서도 충분한 설명 ...
    두 글 다 잘 보았습니다.
    앱 올리는 과정에 수시로 참고하면서 제 블로그에도 정리해야겠습니다.
    감사합니다.

  4. 2016.10.10 01:48 Address Modify/Delete Reply

    비밀댓글입니다

    • 날개 2016.10.10 06:54 신고 Address Modify/Delete

      안타깝지만 키스토어는 받으셔야 됩니다. 키스토어가 해당 앱에 대한 개발자임을 증명하는 신분증 역할을 합니다.
      심지어 직접 개발 하는 경우도 실수로라도 키스토어 파일을 잃어버리면 업데이트를 못하게 됩니다.
      실제로 키스토어를 잃어버려서 새로 앱을 올리게 되는 경우(물론 다른 앱으로 인식 됩니다)도 보았습니다.

티스토리 툴바