# Generating Signed APK - Android

1.需要一把key(.jks or .keystore)，用來簽名App

可使用Android Studio產生，也可使用command line生成。（此步驟請自行google）將此 .keystore 放置(複製)到 RN Project/android/app/ 目錄下

在此丟上一個 .jks，提供大家測試用（若要上架的正式版App，請使用自己產生的key） [點此去下載test.jks](https://drive.google.com/file/d/1SiOH9X5CUKvlMx0II-o_8dkFV0nwd1N3/view?usp=sharing)

```
此test.jks的相關資訊

Key store path: test.jks
Key store password: testtest
Key alias: testAlias
Key password: testAliastestAlias
```

\
2.設置gradle

* 2.1 修改下方兩個其中一個

  ```
  ~/.gradle/gradle.propertie(此為全局的gradle.propertie) 
  或者
  ../android/gradle.properties (此為項目內的gradle.propertie，路徑為某RN Project下)
  ```
* 2.2 修改RN Project/android/gradle.properties

  ```
  MYAPP_RELEASE_STORE_FILE= 你的key完整檔名(ex.test.jks)
  MYAPP_RELEASE_KEY_ALIAS= key的alias (ex.testAlias) 
  MYAPP_RELEASE_STORE_PASSWORD= 你的store password (ex.testtest)
  MYAPP_RELEASE_KEY_PASSWORD= 你的key password (ex.testAliastestAlias)
  ```
* 2.3 修改RN Project/android/app(!?)/build.gradle，加入簽名設定

  ```
  … 
  android {
     … 
    defaultConfig { ... } 
    signingConfigs {
         release { 
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { 
                storeFile file(MYAPP_RELEASE_STORE_FILE) 
                storePassword MYAPP_RELEASE_STORE_PASSWORD 
                keyAlias MYAPP_RELEASE_KEY_ALIAS 
                keyPassword MYAPP_RELEASE_KEY_PASSWORD 
            } 
        } 
    } 
    buildTypes { 
        release { 
            … 
            signingConfig signingConfigs.release 
        }
     } 
  } 
  ...
  ```

\
3.簽名打包APK

開啟terminal，到達RN Project/android/ 目錄後 下command $ ./gradlew assembleRelease 成功後會如下圖所顯示，apk產生在android/app/build/outputs/apk/app-release.apk

![](https://bambooooo.gitbooks.io/react-native/content/React%20Native/images/basic/generating/apk.png)Gradle’s assembleRelease會bundle你App需要的所有JavaScript到Apk中

\
ps.

* 請保存好keystore和密碼，在play商店內判斷是否為同一個App是由package name和keystore，若遺失鑰匙就無法再更新指定的App了（等於下載量和評價等都會遺失）！只能重新上架一個新App！
* 用AS原本直接打包apk的方式是可以打包成功，但run時會失敗。（此部份可參考本文最下方的第二個參考內容）

\
參考

* [Generating Signed APK](https://facebook.github.io/react-native/docs/signed-apk-android.html) - RN官網
* [React Native發布APP之簽名打包APK](https://github.com/crazycodeboy/RNStudyNotes/tree/master/React%20Native%E6%89%93%E5%8C%85%E5%8F%91%E5%B8%83App/React%20Native%E5%8F%91%E5%B8%83APP%E4%B9%8B%E7%AD%BE%E5%90%8D%E6%89%93%E5%8C%85APK) - carzycodeboy
