iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 29
0
Modern Web

使用 Modern Web 技術來打造 Native App系列 第 29

Day 29:最後一哩路 Part II - Android 上架

前言

被 iOS 上架整個人弄到快瘋掉後,聽說 Android 上架比較簡單,筆者姑且是相信了,網路上很多的教學看起來確實如此。而且有一些麻煩的部分在前一篇已經完成了,例如 App Icon 的設計以及產出所有的 Size,接下來就來快速的完成剩餘的部分。

置換 Icon

android/app/src/main/res 裡面有放著一些 Android 內建的 Icon:

這邊直接繼續使用上一篇 MakeAppIcon 所產出的 Icon,把預設的 Icon 用解壓縮後的 appicon/android 目錄中的 Icon 覆蓋掉即可。

工具使用的好,就不太需要煩惱。

建構 APK

建構 APK 應該是 Android 上架過程中最複雜的一步,這步驟也能拆分成幾個比較細的步驟:

產生一個簽署的 key

首先,必須用 keytool 來產生一個私鑰:

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

這邊用 irongithub.keystore 來當檔案名稱,keystore 會包含一個可以存活 10000 天的 key。alias 必須記住,晚點會用到。

需注意,不要隨便把私鑰給別人,不要 Commit 進 git。

設置 gradle 變數

把前面一個步驟產生的 keystore 檔案放到 android/app 目錄

修改家目錄裡面的 gradle 設定檔在 ~/.gradle/gradle.properties

IRONGITHUB_RELEASE_STORE_FILE=irongithub.keystore
IRONGITHUB_RELEASE_KEY_ALIAS=irongithub
IRONGITHUB_RELEASE_STORE_PASSWORD=*****
IRONGITHUB_RELEASE_KEY_PASSWORD=*****

(***** 要換成自己的密碼)

這邊的變數名稱不一定要這樣命名,不過之後會用到鎖以要一致。keystore 檔名跟 alias 就是之前下 keytool 指令時所指定的,密碼也是當時所輸入的。

如果 App 已經上架到 Play Store,但是你把 keystore 搞不見或是忘了密碼,那只好用不同的名字再上架,只是評分那些都必須重新再來,所以記得要好好的備份。

把簽署設定加到應用程式的 gradle 設定檔

編輯 android/app/build.gradle,加上 signing 相關的部分:

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            storeFile file(IRONGITHUB_RELEASE_STORE_FILE)
            storePassword IRONGITHUB_RELEASE_STORE_PASSWORD
            keyAlias IRONGITHUB_RELEASE_KEY_ALIAS
            keyPassword IRONGITHUB_RELEASE_KEY_PASSWORD
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

其他部分都不管,只要加上 signingConfigs 還有 buildTypes.release.signingConfig

這邊相關的變數定義都來自上一個步驟,也可以自己改。

產生 APK

Gradle 的 assembleRelease 會把所有需要執行的 JavaScript 也都打包進 APK,所以只要執行:

$ cd android && ./gradlew assembleRelease

產生的 APK 會出現在 android/app/build/outputs/apk/app-release.apk

測試

跟 iOS 一樣,應該要先確認打包好的 APK 是跑得起來的再來上架:

$ react-native run-android --configuration=release

這邊 v0.40.0 的文件似乎還沒有更新,害我嘗試好久...

中間有遇到過一個 INSTALL_FAILED_UPDATE_INCOMPATIBLE 的錯誤:

參照這篇 使用 adb uninstall 後問題就解決了。

其他的細節可以參考 React Native 官方的教學

提交到 Google Play Store

Android 開發者網站 點擊 Developer Console

當然一樣必須有 Google Player 開發者帳號

點擊 在 Google Play 發佈 Android 應用程式

一如往常的,填寫一些資料:


漸漸的把它完成。

內容分級

為了掌控內容不會有暴力、色情、賭博違反某些國家法律,一樣是要做內容的分級:


定價與發行

這邊筆者一樣是選擇免費,然後在所有國家發行:

截圖

最麻煩的事一樣是截圖,除了 Icon 已經有產生過以外,使用這篇的評論所提到的指令來在模擬器中截圖:

adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png

發佈

都搞定後左邊的項目都會有綠勾勾,這時候就是已可發佈狀態,就可以點擊發佈應用程式

完成後,App 就會進入待發佈狀態囉,就慢慢等囉,應該會在一天內發佈。

結語

確實 Android 遇到的問題比 iOS 簡單一點,花時間最久就是在 React Native 官方文件的錯誤上,其他都是查一查快速解決的問題。至今也算是達成當初所立下兩平台上架的目標 (先不考慮被 reject 哈),這兩三天瘋狂嘗試的心酸血淚希望能幫助一些想要完成 App 上架的讀者。


上一篇
Day 28:最後一哩路 Part I - iOS 上架
下一篇
Day 30:寫在最後
系列文
使用 Modern Web 技術來打造 Native App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
kt71020
iT邦新手 5 級 ‧ 2017-01-14 00:28:12

期待

我要留言

立即登入留言