Gradle构建慢的首要原因是本地调试时默认编译全部4个ABI,而实际仅需1个;加--active-arch-only参数可将构建时间减少约75%,但发布时须移除该参数以防ABI缺失导致闪退。

Gradle构建慢?先确认是否真在本地跑全ABI
默认 react-native run-android 会同时编译 armeabi-v7a、arm64-v8a、x86、x86_64 四个 ABI,但你本地调试时几乎只用 arm64-v8a(模拟器)或 armeabi-v7a(旧真机)。白跑三份是主要瓶颈。
验证方式:运行 yarn react-native run-android 后看控制台输出是否有 info Detected architectures arm64-v8a —— 如果有,说明设备已识别,但 CLI 还是默认全编。
- 加
--active-arch-only参数可强制只编当前设备架构:yarn react-native run-android --active-arch-only - 该参数依赖 Gradle 层的
reactNativeArchitectures属性,不是纯 CLI 行为,所以必须确保项目里android/gradle.properties中没硬编码覆盖它 - CI 构建发布包时务必删掉这个参数,否则 APK 缺失 ABI 会导致部分机型闪退
gradle.properties 里哪些配置影响构建速度
gradle.properties 是 Android 构建的底层开关,改错一行可能让编译变慢或失败。
关键项(仅列出与速度强相关且易误配的):
-
org.gradle.daemon=true—— 必开,复用 Gradle JVM 进程,避免每次启动开销 -
org.gradle.parallel=true—— 多模块并行编译,对 RN 项目有效(app和react-native等子项目独立执行) -
org.gradle.configureondemand=true—— 跳过未参与构建的 module 配置阶段,小项目收益不大,大项目明显 -
android.useAndroidX=true和android.enableJetifier=true—— Jetifier 会扫描并转换所有依赖,耗时严重;如果所有依赖已迁移到 AndroidX,可关掉android.enableJetifier=false
注意:reactNativeArchitectures=arm64-v8a 这类手动指定 ABI 的写法,仅用于 CI 或特殊测试场景,日常开发用 --active-arch-only 更安全。
VSCode 调试时 Gradle 卡在 “Running Gradle task ‘assembleDebug’” 怎么办
这不是 VSCode 的问题,而是 Gradle 本身卡在某个环节。常见真实原因和对应动作:
- 首次构建时卡在
Downloading gradle-x.x-bin.zip:检查android/gradle/wrapper/gradle-wrapper.properties中的distributionUrl是否指向国内镜像(如https://mirrors.cloud.tencent.com/gradle/),否则墙内下载极慢甚至超时 - 卡在
Resolving dependencies:确认android/build.gradle里的repositories是否配置了阿里云或腾讯云 Maven 镜像,原生google()和mavenCentral()在国内不稳定 - 卡在
Transform classes with dexer:JDK 版本不匹配 —— RN 0.73+ 要求 JDK 17,若用 JDK 21 会出现此卡顿,降级到 17.x 即可 - VSCode 内置终端权限不足(尤其 Windows):右键 VSCode → “以管理员身份运行”,否则 Gradle 可能无法写入
.gradle缓存目录
Hermes 引擎启用后 Gradle 构建时间反而变长?
启用 Hermes 后首次构建确实更慢,因为要额外编译字节码并做混淆,但后续增量构建会快。如果持续慢,大概率是配置没生效或被绕过。
验证 Hermes 是否真正启用:
- 检查
android/app/build.gradle中是否含hermesEnabled = true(新版 RN 默认开启) - 运行
npx react-native run-android后查看android/app/build/generated/assets/react/目录下是否存在index.android.bundle(JS Bundle)和index.android.hbc(Hermes 字节码)两个文件,缺一不可 - 如果只有
.bundle没有.hbc,说明 Hermes 未触发 —— 常见原因是android/app/build.gradle里project.ext.react块中漏写了hermesCommand路径,或node_modules/hermes-engine被误删
真正影响构建速度的,不是 Hermes 本身,而是你是否在 debug 模式下还保留了 ProGuard/R8 混淆 —— 开发期应禁用:minifyEnabled false 和 shrinkResources false 必须设为 false。


















