前言
最近自己的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文件的服务),在工程主目录下启动
代码语言:javascript复制npm start
2.创建bundle包存放目录
代码语言:javascript复制mkdir -p android/app/src/main/assets
注:可以手动创建
3.打包bundle
代码语言:javascript复制curl -k"http://localhost:8081/index.android.bundle">android/app/src/main/assets/index.android.bundle
注:从node服务拉取bundle包并存放到目标目录下
4.配置bundle运行环境
代码语言:javascript复制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下运行
代码语言:javascript复制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中配置
代码语言:javascript复制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中配置
代码语言:javascript复制在androdi/app/build.graddle里面配置
signingConfigs {
release {
storeFilefile ("签名文件路径")
storePassword "仓库密码"
keyAlias "签名名称"
keyPassword "key密码"
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
3.打包生成签名的apk
进入android目录,执行:
代码语言:javascript复制gradlew.bat assembleRelease
或者:
代码语言:javascript复制gradle assembleRelease
注:生成的APK文件在/android/app/build/outputs/apk下,去手机端安装你的app吧