Gradle/Maven/Android:通过Maven引入库时找不到库私有依赖问题
问题原因
- 核心问题是你发布AAR时生成的POM文件缺失
safetynet依赖声明:你当前的发布配置仅遍历configurations.api下的依赖写入POM,用implementation声明的私有依赖不会被加入到POM中。Maven依赖机制依赖POM文件感知传递依赖,上层App构建时自然不会拉取safetynet依赖,运行时就会出现类找不到的崩溃。 - 本地模块依赖正常是因为Gradle处理本地项目依赖时,会自动将子模块的
implementation依赖加入到宿主App的运行时classpath,不需要依赖POM文件。 - 你之前改成
api仍无效大概率是改完后没有清理本地Maven缓存的旧版本AAR/POM,App拉取的还是之前错误的旧版本,即便开启transitive=true也没有可传递的依赖条目可以加载。
解决方案
按如下步骤修改即可:
- 替换你的Maven发布配置,使用AGP官方提供的
components.release自动生成AAR和POM,无需手动处理依赖,避免漏写:
afterEvaluate { publishing { publications { release(MavenPublication) { groupId 'com.myapplication' artifactId 'library' version '1.0.3' // 移除原有手动指定artifact、手动生成POM的逻辑,替换为下面这行 from components.release } } repositories { mavenLocal() } } }
- 清理本地Maven缓存的旧版本library包:进入本地Maven仓库默认路径
~/.m2/repository/com/myapplication/library/,删除1.0.3文件夹下的所有内容。 - 重新执行library模块的
publishReleasePublicationToMavenLocal任务,生成新的AAR和正确的POM文件。 - 上层App执行Gradle同步后重新运行即可,无需修改App侧的依赖声明,也不需要上层手动引入
safetynet依赖。
内容的提问来源于stack exchange,提问作者muetzenflo
相关产品推荐
相关产品推荐

