Mac M1上GitLab Runner Docker执行React Native Android打包AAPT2错误
解决思路
1. 切换到arm64架构的Android构建镜像
M1是arm64架构,若使用x86_64的Docker镜像,依赖Rosetta转译会触发AAPT2的兼容性问题。直接改用arm64原生镜像:
- 修改Dockerfile,指定arm64基础镜像,例如:
FROM --platform=linux/arm64 ubuntu:22.04 - 安装Android SDK时,确保下载arm64版本的组件,使用
sdkmanager安装时可指定架构相关参数,避免拉取x86组件。
2. 禁用AAPT2守护进程
强制关闭AAPT2的守护模式,绕开转译环境下的启动失败问题:
- 在app模块的
build.gradle中添加配置:android { aaptOptions { disableDaemon true } } - 高版本Gradle中
useNewAapt2选项已废弃,无需添加,仅保留disableDaemon即可。
3. 强制Docker容器使用arm64架构
在CI配置中明确指定容器平台,避免Docker自动选择x86_64镜像:
- 在
.gitlab-ci.yml的build_android任务中添加变量:build_android: variables: DOCKER_DEFAULT_PLATFORM: linux/arm64 # 其他原有配置
4. 验证容器内环境架构
在CI流水线中添加调试步骤,确认容器运行在arm64环境:
- 增加脚本步骤:
build_android: script: - uname -m # 输出应为aarch64 - ls -l /lib64/ # arm64环境下无ld-linux-x86-64.so.2文件 # 原有构建命令
若输出为x86_64,说明镜像或平台配置错误,需调整镜像来源或平台参数。
5. 对齐Gradle与Android Build Tools版本
React Native 0.74.2对应的Gradle版本建议为8.6,Android Build Tools建议为34.0.0,确保版本完全匹配:
- 项目根目录
build.gradle中:dependencies { classpath("com.android.tools.build:gradle:8.6.0") // 其他依赖 } gradle-wrapper.properties中:distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
内容的提问来源于stack exchange,提问作者Hoài Vũ Lệ
相关产品推荐
相关产品推荐

