前言
最近自己的react native app已經完成了,博主想將其打包成android apk運行在安卓端的手機上。然後遇到了一系列的問題。經過一段時間的踩坑,已經成功打包成apk文件並在手機端正常運行和顯示。下面介紹一下react native打包成android apk的原理和步驟。
基本原理
react native程序在調試的時候,在虛擬機端是通過連接本地node服務來獲取js文件,所以可以實現熱加載。但是要打包成apk時,需要將這些js文件打包成bundle包,當做android的運行資源。放置在assets目錄下(離線包的方式)。
所以apk打包的過程是先將js文件打包成bundle包,然後再將程序打包成apk文件。
bundle打包
1.啓動sever,即本地的node服務(之前調試過程中獲取js文件的服務),在工程主目錄下啓動
npm start
2.創建bundle包存放目錄
mkdir -p android/app/src/main/assets
注:可以手動創建
3.打包bundle
curl -k"http://localhost:8081/index.android.bundle">android/app/src/main/assets/index.android.bundle
注:從node服務拉取bundle包並存放到目標目錄下
4.配置bundle運行環境
react-native bundle --entry-file index.js --bundle-output ./android/app/src/main/assets/index.android.jsbundle --platform android --assets-dest ./android/app/src/main/res/ --dev false
注:上述步驟的作用是配置入口文件、平臺等。如果缺少上述的步驟,會報錯,找不到入口文件。
APK打包
1.生成簽名文件
使用keyTool工具生成簽名文件,在jdk安裝目錄的bin\下運行
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
詳細可參考官網:https://facebook.github.io/react-native/docs/signed-apk-android.html-alias 後跟着別名,要記住這個別名,因爲在項目中要進行配置,後面會讓輸入密碼,也要記住,同樣在後面配置中會用到。
運行完後,會在當前目錄下出現my-release-key.keystore的文件,即簽名文件。記住文件路徑或將此文件導入到android/app目錄下。
注:要保護你的簽名文件私有,不要將其一起提交給版本控制工具(即暴露出去)
2.項目中配置簽名文件信息
1)在android/gradle.properties中配置
MYAPP_RELEASE_STORE_FILE=my-example-key.keystore (---簽名文件名)
MYAPP_RELEASE_KEY_ALIAS=my-example-alias (---簽名名稱)
MYAPP_RELEASE_STORE_PASSWORD=123456 (---倉庫密碼)
MYAPP_RELEASE_KEY_PASSWORD=123456 (---key密碼)
2)在android/app/build.graddle中配置
在androdi/app/build.graddle裏面配置
signingConfigs {
release {
storeFilefile ("簽名文件路徑")
storePassword "倉庫密碼"
keyAlias "簽名名稱"
keyPassword "key密碼"
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
3.打包生成簽名的apk進入android目錄,執行:
gradlew.bat assembleRelease
或者:
gradle assembleRelease
注:生成的APK文件在/android/app/build/outputs/apk下,去手機端安裝你的app吧