在ReactNative环境下生成release包,主要包括以下几步:
- 生成签名密钥keyStore
- 在AS中配置并在release配置中引用keyStore
*保存 js.bundle到资源目录app/src/main/assets中. - 混淆java代码
- 执行gradleAssemble命令打包。
1.终端下执行如下命令生成密钥keyStore,命令行中输入密钥,最终会在当前目录中生成react.keystore文件并复制到项目中使用.
keytool -genkey -alias react -keyalg RSA -validity 3650 -keystore react.keystore
创建了一个名为react.keystore的别名为react的采用RSA加密算法的有效期为10年的证书文件
- genkey 生成文件。
- alias 别名。
- keyalg 加密算法。
- validity 有效期。
- keystore 文件名
2. 在AS中配置并在release配置中引用keyStore
signingConfigs{//引用签名配置
release {
storeFile file("react.keystore")
storePassword "react-native"
keyAlias "react"
keyPassword "react-native"
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release //引用签名配置
}
}
3.保存js.bundle文件到资源目录app/src/main/assets
在项目根目录下执行下面的命令,会在assets中生成index.android.bundle文件.
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output app/src/main/assets/index.android.bundle --assets-dest app/src/main/res/
React Native 的开发版需要有启动一个本地服务随时发送更新后的 js bundle 文件。如果要打正式包,需要把 js bundle 文件保存到 Android 项目的 assets/ 目录下。这样,正式包就不需要本地服务支持了.
开发模式调试的时候 js 代码会立即生效,无需执行以上命令,但每次正式打包的时候如果修改了 js 代码都必须先执行以上命令。
4.混淆java代码,混淆规则参照facebook官网
def enableProguardInReleaseBuilds = true//混淆开关
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release //引用签名配置
}
}
5.执行gradleAssemble命令打包.
gradleAssemble
android/app/build/outputs/apk/app-release.apk安装即可.
网友评论