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

EAS Build托管工作流下Expo应用添加Gradle仓库解决依赖缺失问题

解决方案

报错核心原因是替换为自定义fork的相机包后,EAS构建安卓项目时,没有将该npm包内携带cameraview aar的本地maven目录加入Gradle仓库寻址列表,导致依赖拉取失败。以下是无需脱离Expo托管工作流的可行方案,按实现成本从低到高排序:

方案1:通过官方expo-build-properties添加maven仓库(最简单,零自定义插件代码)

Expo官方提供的expo-build-properties配置插件原生支持添加自定义Gradle仓库,不需要自行编写插件逻辑:

  • 安装依赖:执行npx expo install expo-build-properties
  • 打开项目根目录的app.json/app.config.js,在plugins数组中添加如下配置:
{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "android": {
            "extraMavenRepos": ["../node_modules/myApp-expo-camera/android/maven"]
          }
        }
      ]
    ]
  }
}
  • 提交代码重新触发EAS构建即可,构建过程中会自动把该仓库路径加入安卓项目的Gradle仓库配置,正常拉取cameraview依赖。

方案2:自定义Config Plugin注入Gradle配置(适配旧版Expo SDK)

如果项目使用的Expo SDK版本较低,expo-build-properties不支持extraMavenRepos参数,可以自行编写轻量配置插件实现同样效果:

  • 在项目根目录创建plugins/with-custom-camera-maven.js文件,写入以下代码:
const { withProjectBuildGradle } = require('@expo/config-plugins');

module.exports = function withCustomCameraMaven(config) {
  return withProjectBuildGradle(config, (config) => {
    const mavenConfig = `
        maven {
            url "$rootDir/../node_modules/myApp-expo-camera/android/maven"
        }
`;
    // 避免重复注入配置
    if (config.modResults.contents.includes('myApp-expo-camera/android/maven')) {
      return config;
    }
    // 将maven配置插入到allprojects的repositories块中
    config.modResults.contents = config.modResults.contents.replace(
      /allprojects\s*\{[\s\S]*?repositories\s*\{/,
      match => match + mavenConfig
    );
    return config;
  });
};
  • 在app.json的plugins数组中引入该自定义插件:
{
  "expo": {
    "plugins": ["./plugins/with-custom-camera-maven.js"]
  }
}
  • 重新触发EAS构建即可生效。

方案3:在fork的包内内置expo插件配置(多项目复用最优)

如果后续需要在多个项目中复用这个fork的myApp-expo-camera包,可以直接在fork包内添加expo插件配置,实现依赖安装后自动注入maven仓库,不需要每个使用的项目单独修改配置:

  • 在fork的myApp-expo-camera包根目录创建plugin.js文件,逻辑和方案2中的插件一致,仅需根据npm包的依赖层级调整maven路径为相对路径即可
  • 在fork包的package.json中添加插件声明:
{
  "expo": {
    "plugin": "./plugin.js"
  }
}
  • 重新发布npm包后,只要项目安装了myApp-expo-camera,EAS构建时就会自动执行包内插件注入对应配置,无需额外修改项目设置。

注意:以上所有方案都不需要将项目从Expo托管工作流切换到裸工作流,所有原生配置修改都在EAS构建的prebuild阶段自动完成,不会在项目目录下生成常驻的android/ios原生文件夹。

内容的提问来源于stack exchange,提问作者Custo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:51:31