You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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ệ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:52:42