leiwuhen-67's blog leiwuhen-67's blog
首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)

我的公众号

首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)
  • React

  • React Native

    • React Native之打包安卓apk优化
      • 一、启动代码混淆
      • 二、拆分cpu架构(ABI分包)
      • 三、启动Hermes引擎
      • 四、启用ProGuard
    • React Native之安卓apk架构区别解析
    • React Native之打包安卓修改Apk文件名
    • React Native之项目创建以及路由配置
  • 《React》笔记
  • React Native
心欲无痕
2025-05-23
目录

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
        }
    }
}
1
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
        }
    }
}
1
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
    // 其他配置...
]
1
2
3
4

如果找不到该配置块,直接手动添加以下内容:

project.ext.react = [
    enableHermes: true,  // 启用 Hermes
    bundleInDebug: false,
    bundleInRelease: true,
    devDisabledInRelease: true
]
1
2
3
4
5
6

# 四、启用 ProGuard

Proguard 是一个 Java 字节码混淆压缩工具,它可以移除掉 React Native Java(和它的依赖库中)中没有被使用到的部分,最终有效的减少 APK 的大小。
重要:启用 Proguard 之后,必须再次全面地测试应用
要启用 Proguard,需要修改 android/app/build.gradle 文件:

def enableProguardInReleaseBuilds = true
1

在 android/app/proguard-rules.pro 文件中添加:

-keep class com.facebook.hermes.unicode.** { *; }
-keep class com.facebook.jni.** { *; }
1
2

至此,就可进入 android 文件夹下执行打包操作了

$ cd android
$ ./gradlew assembleRelease
1
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 命令行下则需要去掉./。

编辑 (opens new window)
上次更新: 5/23/2025, 4:47:40 PM
React之自定义组件添加className与style
React Native之安卓apk架构区别解析

← React之自定义组件添加className与style React Native之安卓apk架构区别解析→

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式