# RN For Run at local (Android)
#### Run after first time
1. `yarn install` - Optional, when package.json has changed
2. clean AVD cache: Android Studio AVD simulator -> wipe data ->run
3. clean web source cache: `npm run link & npm start`, until message 'To reload the app press "r"' is displayed, press `Ctrl + C` to terminate program.
4. run app on simulator: `npm run android` **without network**
#### Rebuild project gradle
1. `cd {project-folder}/android && gradlew clean`
2. Android Studio main menu Build > Clean Project
3. `cd ..` `npm run android`
#### Reinstall Android SDK build tools
> 造成原因:內網啟動 RN 到一半卡住,強制停掉程式,斷網或切外網,重啟動皆遇到檔案遺失 gradle build 失敗的問題。
>
> 問題現象:斷網和外網皆出現 gradle 錯誤訊息 retry 失敗 dl.google.com, jcenter.bintary.com, jitpack.io
##### Sulution 1 - API 28
1. switch external network
2. Android Studio -> SDK Manager -> SDK Tools -> remove build tools -> install build tools
3. invalidate cache and restart
4. Wait for gradle rebuild to complete, `npm run android`
##### Sulution 2 - API 29
1. 刪除專案對應版本的 gradle caches, C:\Users\\{username\}\\.gradle\caches\6.2
2. 檢查並覆蓋檔案 %JAVA_HOME%\jre\lib\security\cacerts
---
### For Run at local (iOS)
1. ( 如果有package.json套件有變動 ) `yarn install`
2. `npm run link`
3. `npm run pod`
4. (選擇性) ios simulator > [device] -> Erase all cotents and setting
5. `npm run ios`
6. on simulator: `command + D` to open simulator menu (debug mode / inspector)
### Build Release APK
#### windows:
1. Keytool (Execute when keystore file does not exist)
Go to the JDK installation path(ex: D:\Program Files\Zulu\zulu-8\bin), and execute
```shell
keytool -genkeypair -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
```
`my-release-key.keystore` and `my-key-alias` can name it yourself.
This command generates 'my-release-key.keystore'. Copy this file to 'andorid/app' in project
#### macOS:
On Mac, if you're not sure where your JDK bin folder is, then perform the following command to find it:
```
$ /usr/libexec/java_home
```
It will output the directory of the JDK, which will look something like this:
```
/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home
```
Navigate to that directory by using the command `$ cd /your/jdk/path` and use the keytool command with sudo permission as shown below.
```
$ sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
```
2. Setup parameter
`android/gradle.properties` add:
```content
MYAPP_UPLOAD_STORE_FILE=my-release-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=xxx
MYAPP_UPLOAD_KEY_PASSWORD=xxx
```
`android/app/build.gradle` add:
```content
signingConfigs {
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
```
3. build
windows:
```
cd android && gradlew assembleRelease
```
macOS:
```
cd android && ./gradlew assembleRelease
```
assenbleRelease -> 打包 `apk`出來
路徑 : android/app/build/outputs/apk/release/app-release.apk
> 新版打包方式 ./gradlew bundleRelease
打包 `aab` 出來 但是直接使用android下載無法安裝,adb也無法直接install (待survey)
路徑 : android/app/build/outputs/bundle/release/app.aab
**打包出來的apk可以直接在電腦上找到該路徑以後,連接實體device(開啟開發者模式) 下指令`adb install XX.apk`即可直接安裝**
請參照 [此](https://reactnative.dev/docs/signed-apk-android)