이제 정말 마지막 강좌입니다.
이번 시간에는 구글 플레이 스토어에 우리가 만든 앱을 배포해봅니다. 우선은 안드로이드앱 배포 만 설명합니다.
Google Play 스토어에 앱을 등록하기 위해서는 서명된 APK를 만들어야 합니다. 앱 서명에 대한 자세한 내용은 <안드로이드 개발자 가이드 : 앱 서명>를 참고하세요. 한글로 자세하게 설명되어 있습니다. 그리고 아래 내용은 <리액트 네이티브 Generating Signed APK> 문서를 참고하여 작성되었습니다.
* * *
안드로이드 앱 아이콘 만들기
저는 앱 아이콘을 아래 사이트를 이용하여, 간단하게 만들었습니다.
https://romannurik.github.io/AndroidAssetStudio/icons-launcher.html
생성된 아이콘을 다운로드 합니다. 그리고 android/app/src/main/res
폴더에 각 사이즈별 아이콘을 복사합니다.
- mipmap-hdpi
- mipmap-mdpi
- mipmap-xhdpi
- mipmap-xxhdpi
- mipmap-xxxhdpi
서명 키 생성하기
keytool
를 사용하여 서명키를 생성합니다.
- 윈도우 사용자는
C:\Program Files\Java\jdkx.x.x_x\bin
경로에keytool
이 있습니다.- 맥OS 사용자는
/usr/libexec/java_home
명령어를 실행하면, JDK가 설치된 경로를 알 수 있습니다./Library/Java/JavaVirtualMachines/jdkx.x.x_x.jdk/Contents/Home
1 | $ keytool -genkey -v -keystore ethereum-wallet.keystore -alias ethereum-wallet -keyalg RSA -keysize 2048 -validity 10000 |
위 명령을 실행하면 콘솔창에 비밀번호와 이름, 지역 등을 입력하라는 메시지가 표시됩니다. 값을 모두 입력한 다음 “예”(or yes)를 입력합니다. 그러고 나면 ethereum-wallet.keystore
파일이 생성됩니다 .
방금 생성한 keystore에는 10000일 동안 유효한 키가 들어 있습니다. keystore password, key password, alias은 나중에 앱에 서명할 때 사용하므로 꼭 메모해 놓으시기 바랍니다. 그리고 keystore파일이 절대 git에 업로드되어 공개되지 않도록 조심하세요.
gradle 설정하기
ethereum-wallet.keystore
파일을android/app
폴더에 복사합니다.~/.gradle/gradle.properties
또는android/gradle.properties
파일을 열어서 다음과 같이 추가합니다.
1 | MYAPP_RELEASE_STORE_FILE=ethereum-wallet.keystore |
- *******에는 keystore 암호화와 alias 암호를 정확하게 입력합니다.
앱의 gradle config에 서명 설정하기
프로젝트 폴더의 android/app/build.gradle
파일에 signingConfig
설정을 추가합니다.
1 | ... |
안드로이드 APK 생성하기
터미널에서 아래 명령을 실행합니다.
1 | $ cd android |
- 생성된 APK는
android/app/build/outputs/apk/release/app-release.apk
에서 찾을 수 있습니다.
만약, 아래와 같은 메세지가 출력된다면…
1
2
3
4
5 FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':app'.
> SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
android/local.properties
파일을 생성하고,sdk.dir=/Users/{YOUR_USER_NAME}/Library/Android/sdk
를 입력합니다.또는,
~/.bash_profile
에export ANDROID_HOME={YOUR_PATH}
를 설정할 수도 있습니다.
앱의 출시 빌드 테스트하기
release된 APK를 Play 스토어에 업로드하기 전에 테스트해야 합니다. 다음을 명령을 사용하면 장치에 release된 APK를 설치할 수 있습니다. 먼저 이미 설치된 앱을 제거해야 합니다.
1 | $ react-native run-android --variant=release |
ABI로 APK를 분할하여 파일 크기를 줄이기
기본적으로 생성된 APK에는 x86와 ARMv7a CPU 아키텍처 용 네이티브 코드가 모두 들어있습니다. 이렇게 하면 대부분의 Android 기기에서 실행되는 APK를 쉽게 배포할 수 있습니다. 그러나 이렇게 하면 어떤 장치에는 사용되지 않는 코드가 있으므로 불필요하게 큰 APK가 만들어질 수 있다는 단점이 있습니다.
android/app/build.gradle
에서 enableSeparateBuildPerCPUArchitecture
를 true로 변경합니다. 그럼 각 CPU에 대한 APK를 만들 수 있습니다.
1 | def enableSeparateBuildPerCPUArchitecture = true |
이 두 파일을 Google Play 및 Amazon AppStore 처럼 기기 타겟팅을 지원하는 마켓에 업로드 하면, 사용자는 자동으로 필요한 APK를 다운로드합니다. 단일 앱에 대해 여러 개의 APK를 지원하지 않는 APKFiles 과 같은 마켓에 업로드하려는 경우, 다음 줄도 변경하여 두 CPU의 바이너리가 모두 들어있는 범용 APK로 만들어야 합니다.
1 | universalApk true // If true, also generate a universal APK |
Proguard를 활성화하여 APK 크기 줄이기 (선택 사항)
Proguard는 APK의 크기를 약간 줄일 수 있는 도구입니다. 앱에서 사용하지 않는 React Native Java 바이트 코드(및 종속성)의 일부를 제거합니다.
Proguard를 활성화하려면 android/app/build.gradle
파일에서 다음을 수정합니다.
1 | /** |
중요 : Proguard를 사용하도록 설정한 경우에는 앱을 철저히 테스트해야합니다. Proguard는 종종 각 네이티브 라이브러리에 특정한 설정을 필요로합니다.
android/app/proguard-rules.pro
파일을 참조하세요.
구글 플레이 스토어에 앱 등록하기
구글 플레이 스토어에 등록하는 방법은 간략하게 설명하겠습니다. 자세하게 모두 설명하려니 내용이 너무 많아지네요. ㅠㅠ
아래 사이트에 접속하여 안드로이드 개발자 등록을 먼저 해야 합니다.
https://play.google.com/apps/publish/?hl=ko
이미 개발자 등록이 되어있다는 가정하에 설명합니다.
-
애플리케이션 만들기 버튼을 선택합니다. 앱 제목을 입력하고 만들기 버튼을 선택합니다.
-
스토어 등록정보를 입력합니다.
*
표시되어 있는 입력항목은 반드시 모두 입력해야 합니다.
그리고 스크린샷, 고해상도 아이콘, 그래픽 이미지를 모두 등록합니다.
-
스토어 등록정보, 콘텐츠 등록, 가격 및 배포 메뉴의 모든 정보를 입력합니다. 모든 정보를 입력해야 앱 출시가 가능합니다.
-
마지막으로 앱 버전 메뉴를 선택하고, 서명된 APK를 업로드합니다.
그리고 저장을 누르고 검토를 선택합니다.
-
배포가 완료되면 대시보드에서 내 앱을 확인할 수 있습니다. GOOGLE PLAY에서 보기 버튼을 누르면 구글 마켓으로 이동합니다.
* * *
구글 마켓에 정상적으로 배포가 되었습니다.
- 구글마켓: https://play.google.com/store/apps/details?id=com.rn_ethereum_wallet
- 깃허브: https://github.com/anpigon/rn_ethereum_wallet
이더리움 지갑앱이 리액트 네이티브로 개발하여 마켓에 배포까지 한 첫 모바일 앱이 되었네요.
리액트 네이티브로 모바일앱을 개발하고 나서 느낀 점입니다.
앱 실행 속도, 화면 전환 속도, APK최적화(용량) 부분에서는 자바 언어로 개발한 안드로이드 앱보다는 만족감이 조금 떨어졌습니다. 하지만 리액트 네이티브가 개발(코딩) 속도, 앱 디버깅, 테스트 등에서는 정말 많은 이점이 있었습니다. 단순한 앱은 리액트 네이티브로 금방 개발할 수 있을 것 같습니다. 그리고 웬만한 필요한 기능들이 리액트 네이티브 모듈로 구현되어 깃허브에 공개되어 있네요.
참고로, 곧 출시될 삼성 갤럭시10에는 비트코인, 이더리움 암호화폐 지갑이 포함되었다고 합니다.
여기까지 읽어주셔서 감사합니다.