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

如何在Android Library中导出依赖?AGP 3.0.0+及静态文件依赖场景

解决Android Library模块依赖导出与静态类跨模块访问问题

我来帮你理清AGP 3.0.0之后模块依赖导出的逻辑,以及静态类跨模块访问的解决办法:

一、先搞懂AGP 3.0+的api vs implementation

从AGP 3.0.0开始,Gradle引入了api和implementation两种依赖声明方式,核心区别就是是否传递依赖:

  • 使用api声明的依赖:会把这个依赖完整导出到所有依赖当前模块的上层模块(比如你的主应用),上层模块可以直接访问该依赖的所有类和资源。
  • 使用implementation声明的依赖:仅当前模块内部可用,上层模块看不到这个依赖的内容,只能通过当前模块暴露的接口间接使用。

举个实际配置例子,在你的Android Library模块的build.gradle里:

// 这个依赖会被传递给主应用,主应用能直接用它的类
api project(":some-common-module")
// 这个依赖仅当前Library自己能用,主应用访问不到
implementation "com.google.guava:guava:31.0.1-android"

二、静态类NeededEverywhere的跨模块访问处理

如果你的NeededEverywhere类在独立的everywhere Gradle模块里,要让依赖Library的主应用也能直接访问它,只需要两步:

  1. 确保everywhere模块是一个标准的Android Library或Java Library模块(根据类的类型选择,纯Java类就用Java Library);
  2. 在你的业务Library模块里,用api依赖这个everywhere模块:
api project(":everywhere")

这样主应用在依赖你的业务Library后,不需要额外依赖everywhere模块,就能直接导入并使用NeededEverywhere类了。

三、常见问题排查

如果按上面配置后还是访问不到传递依赖,可以检查这几点:

  • 确认项目的AGP版本确实≥3.0.0:在项目根目录的build.gradle里查看com.android.tools.build:gradle的版本号;
  • 有没有不小心把api写成了implementation?这是最容易犯的错误;
  • 清理Gradle缓存并重新构建:执行命令./gradlew clean build(Windows用gradlew.bat clean build),有时候缓存会导致依赖关系不更新;
  • 静态类的访问权限:确保NeededEverywhere是public修饰的,包路径也没有写错;如果开启了混淆,要在proguard规则里添加保留该类的配置,避免被混淆掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:12:15