React Native官方文档:https://reactnative.cn/docs/debugging/
项目GitHub地址:https://github.com/zhouwei1994/nativeCase.git
第一步生成签名密钥
用keytool
命令生成一个私有密钥。
-
keytool命令在之前安装的JAVA JDK目录下的bin文件下。本人的安装目录为:D:\Program Files\java\jdk\bin
-
在空白处按下 “键盘shift键” 点击右键打开菜单选择 “在此处打开命令窗口” 打开命令窗口。
- 在打开的命令窗口执行以下命令:
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
- 这条命令会要求你输入密钥库(keystore)和对应密钥的密码,然后设置一些相关的信息。
- 设置完成后会在当前目录生成一个my-release-key.keystore文件。
第二步配置打包环境
- 把my-release-key.keystore文件拷贝到APP项目中的
android/app
文件夹下。 - 在项目目录/android/gradle.properties设置以下信息(没有此文件手动创建一个):
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD= 签名密匙的储存密码 MYAPP_RELEASE_KEY_PASSWORD= 签名密匙的key密码
-
把签名配置加入到项目的 gradle 配置中,在项目目录android/app/build.gradle中添加以下代码:
... android { ... defaultConfig { ... } signingConfigs { release { if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { 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 } } } ...
这里已经配置完成了
第三步测试应用
输入以下命令可以在手机上安装APP(测试应用是否有问题):
react-native run-android --variant=release
第四步执行打包命令
在项目目录的/android文件下,在空白处按下 “键盘shift键” 点击右键打开菜单选择 “在此处打开命令窗口” 打开命令窗口执行以下命令:
windows 系统CMD环境执行
gradlew assembleRelease
macOS、Linux 或是 windows 的 PowerShell 环境中执行
./gradlew assembleRelease
生成的 APK 文件位于
android/app/build/outputs/apk/release/app-release.apk
,它已经可以用来发布了
减少APK大小,去掉 x86 架构
默认情况下,生成的 APK 会同时包含针对于 x86 和 ARMv7a 两种 CPU 架构的原生代码。这样可以让我们更方便的向其他人分享这个 APK,因为它几乎可以运行在所有的 Android 设备上。但是,这会导致所有设备上都有一些根本不会运行的代码,白白占据了空间。目前安卓设备绝大多数是 ARM 架构,因此对于大部分应用来说可以考虑去掉 x86 架构的支持。
你可以在android/app/build.gradle
中修改如下代码(false 改为 true)来生成针对不同 CPU 架构的 APK。
- ndk {
- abiFilters "armeabi-v7a", "x86"
- }
- def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true
你可以把这上面打包生成的两个 APK 都上传到支持对用户设备 CPU 架构定位的应用程序商店,例如 Google Play 和 Amazon AppStore,用户将自动获得相应的 APK。如果您想上传到其他市场,例如 APKFiles(不支持一个应用有多个 APK 文件),可以修改下面的代码,来额外生成一个适用不同 CPU 架构的通用 APK。
- universalApk false
+ universalApk true // 额外生成一个适用不同CPU架构的通用APK
Proguard 是一个 Java 字节码混淆压缩工具,它可以移除掉 React Native Java(和它的依赖库中)中没有被使用到的部分,最终有效的减少 APK 的大小。
启用 Proguard 之后,你必须再次全面地测试你的应用。Proguard 有时候需要为你引入的每个原生库做一些额外的配置。参见
app/proguard-rules.pro
文件。
要启用 Proguard,修改android/app/build.gradle
文件:
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = true