React Native之打包安卓apk优化
在按照 react native 官方文档打包成 apk 文件后,感觉文件有点大。因此想优化一番。
主要是做了以下优化:
# 一、启动代码混淆
在 android/app/build.gradle 中配置:
android {
buildTypes {
release {
minifyEnabled true // 启用代码压缩
shrinkResources true // 移除未使用的资源
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
}
2
3
4
5
6
7
8
9
10
11
12
# 二、拆分 cpu 架构(ABI 分包)
所谓 ABI 分包是指将传统的构建一个 APK 文件的过程,改为根据不同的硬件架构(如 ARM、x86 等)来构建多个 APK 文件。这种分包处理可以优化应用的兼容性和性能,确保应用能够在不同的硬件上正常运行。
现代设备大多支持 arm64-v8a,可仅保留主流架构:
def enableSeparateBuildPerCPUArchitecture = true
android {
splits {
abi {
enable true
reset()
include "arm64-v8a", "x86", "x86_64" // 按需选择
universalApk true // 设置为true将额外生成一个适用不同CPU架构的通用apk
}
}
}
2
3
4
5
6
7
8
9
10
11
12
# 三、启动 Hermes 引擎
在 android/app/build.gradle 中启用 Hermes:
1、打开 android/app/build.gradle 文件。
2、找到 project.ext.react 配置块,将 enableHermes 设置为 true:
project.ext.react = [
enableHermes: true, // 改为 true
// 其他配置...
]
2
3
4
如果找不到该配置块,直接手动添加以下内容:
project.ext.react = [
enableHermes: true, // 启用 Hermes
bundleInDebug: false,
bundleInRelease: true,
devDisabledInRelease: true
]
2
3
4
5
6
# 四、启用 ProGuard
Proguard 是一个 Java 字节码混淆压缩工具,它可以移除掉 React Native Java(和它的依赖库中)中没有被使用到的部分,最终有效的减少 APK 的大小。
重要:启用 Proguard 之后,必须再次全面地测试应用
要启用 Proguard,需要修改 android/app/build.gradle 文件:
def enableProguardInReleaseBuilds = true
在 android/app/proguard-rules.pro 文件中添加:
-keep class com.facebook.hermes.unicode.** { *; }
-keep class com.facebook.jni.** { *; }
2
至此,就可进入 android 文件夹下执行打包操作了
$ cd android
$ ./gradlew assembleRelease
2
按照上述操作步骤优化后,打包后会有以下几种结果:
ps: 生成的 APK 文件位于 android/app/build/outputs/apk/release/app-release.apk,它已经可以用来发布了。
提示
译注:cd android 表示进入 android 目录(如果你已经在 android 目录中了那就不用输入了)。./gradlew assembleRelease 在 macOS、Linux 或是 windows 的 PowerShell 环境中表示执行当前目录下的名为 gradlew 的脚本文件,且其运行参数为 assembleRelease,注意这个./ 不可省略;而在 windows 的传统 CMD 命令行下则需要去掉./。