离线包:ReactNative 和你写的 js文件、图片等资源都打包放入 App
使用 react-native bundle --help 来查看打包的具体参数。下面列举一些主要参数:
--entry-file <path> RN入口文件的路径, 绝对路径或相对路径
--platform [string] ios 或 andorid
--transformer [string] Specify a custom transformer to be used
--dev [boolean] 如果为false, 警告会不显示并且打出的包的大小会变小
--prepack 当通过时, 打包输出将使用Prepack格式化
--bridge-config [string] 使用Prepack的一个json格式的文件__fbBatchedBridgeConfig 例如: ./bridgeconfig.json
--bundle-output <string> 打包后的文件输出目录, 例: /tmp/groups.bundle
--bundle-encoding [string] 打离线包的格式 可参考链接https://nodejs.org/api/buffer.html#buffer_buffer.
--sourcemap-output [string] 生成Source Map,但0.14之后不再自动生成source map,需要手动指定这个参数。例: /tmp/groups.map
--assets-dest [string] 打包时图片资源的存储路径
--verbose 显示打包过程
--reset-cache 移除缓存文件
--config [string] 命令行的配置文件路径
1.在 android/app/src/main/ 目录下创建 assets 目录
执行命令
react-native bundle --entry-file index.js --platform android --dev false --bundle-output ./android/app/src/main/assets/index.android.bundle --assets-dest ./android/app/src/main/res/
2.生成签名密钥
Android要求所有应用都有一个数字签名才会被允许安装在用户手机上,所以在把应用发布到类似Google Play store这样的应用市场之前,你需要先生成一个签名的APK包
用keytool
命令生成一个私有密钥:
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
1.my-release-key是文件名,my-key-alias是别名
2.如果命令执行不成功请尝试,进入到keytool命令存放的目录再执行(在JDK的bin目录中)
按照提示信息设置一些发行相关的信息,最后将生成my-release-key.keystore
密钥库文件(注意:请记得妥善地保管好你的密钥库文件,不要上传到版本库或者其它的地方),密钥库里应该已经生成了一个单独的密钥,有效期为10000天。(--alias参数后面的别名是你将来为应用签名时所需要用到的,所以记得记录这个别名。)
3.设置gradle变量
- 把my-release-key.keystore文件放到工程中的android/app文件夹下。
- 修改android/gradle.properties文件,添加如下的代码(注意替换xx为你自己设置的密钥和密码)
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=XXX
MYAPP_RELEASE_KEY_PASSWORD=XXX
4.添加签名到项目的gradle配置文件
编辑android/app/build.gradle
,添加如下的签名配置:
...
android {
...
defaultConfig { ... }
signingConfigs { //添加这块代码
release {
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 //添加这块代码
}
}
}
...
5.生成APK包
切换到android目录下运行命令:
gradlew assembleRelease
Gradle的assembleRelease参数会把所有用到的JavaScript代码都打包到一起,然后内置到APK包中
网友评论