Android Studio中如何将Android Library模块作为依赖引入纯Java模块?
首先,你遇到的核心问题是Android Library模块默认会生成多个构建变体(debug、release、测试相关等),而纯Java模块的Gradle配置无法自动识别并选择合适的变体,导致依赖解析失败。下面给你两种可行的解决方案,优先推荐第一种:
方案一:指定Android Library的单一变体供Java模块依赖
这是最优雅且维护性最高的方案,通过配置Android Library发布一个明确的变体(比如release),让Java模块直接依赖这个变体的运行时类文件。
步骤1:配置Android Library模块(:androidtestlib)
在:androidtestlib的build.gradle(或build.gradle.kts)中添加变体发布配置:
Groovy版本:
android { // 保留你原有的compileSdk、defaultConfig等配置... publishing { singleVariant("release") { withSourcesJar() // 可选:如果需要让Java模块能查看源码 withJavadocJar() // 可选:生成Javadoc } } }
Kotlin DSL版本:
android { // 保留你原有的compileSdk、defaultConfig等配置... publishing { singleVariant("release") { withSourcesJar() withJavadocJar() } } }
这个配置会让Android Library只对外暴露release变体的相关产物,避免多变体选择的冲突。
步骤2:配置纯Java模块(:javatest)的依赖
在:javatest的build.gradle(或build.gradle.kts)中,明确依赖Android Library的releaseRuntimeElements配置:
Groovy版本:
dependencies { implementation project(path: ':androidtestlib', configuration: 'releaseRuntimeElements') }
Kotlin DSL版本:
dependencies { implementation(project(path = ":androidtestlib", configuration = "releaseRuntimeElements")) }
为什么这个方案有效?
releaseRuntimeElements是Android Library的release变体对应的运行时类路径配置,包含了编译好的class文件和依赖的第三方库,纯Java模块可以直接识别并使用这个配置下的产物,解决了变体不匹配的问题。
⚠️ 注意:如果你的Android Library中使用了Android特有的API(比如Context、View等),纯Java模块中不能直接调用这些API,因为纯Java模块没有依赖Android SDK,编译时会报错找不到相关类。
方案二:生成独立Jar供Java模块依赖
如果方案一不适用(比如需要同时依赖多个变体),可以手动让Android Library生成一个兼容纯Java的Jar包,再让Java模块依赖这个Jar。
步骤1:在Android Library中添加生成Jar的任务
在:androidtestlib的build.gradle中添加:
task createJavaCompatJar(type: Jar) { // 打包main源码编译后的class文件 from android.sourceSets.main.java.outputDir // 打包资源文件(如果有需要) from android.sourceSets.main.resources.outputDir // 给Jar加个后缀标识 archiveClassifier = "java-compat" } // 将这个Jar作为产物发布 artifacts { archives createJavaCompatJar }
步骤2:在Java模块中依赖该Jar
在:javatest的build.gradle中:
dependencies { implementation project(path: ':androidtestlib', configuration: 'archives') }
这个方案的局限性
- 需要手动维护Jar生成任务,Android Library的依赖不会自动传递到Java模块,你需要在Java模块中手动添加所有Android Library依赖的第三方库。
- 无法自动同步Android Library的代码变更(需要手动执行
createJavaCompatJar任务),开发体验不如方案一。
解释你之前遇到的错误
使用
implementation project(':androidtestlib')构建失败:
纯Java模块的Gradle配置默认是找兼容Java 7的runtime库,而Android Library的变体是针对Android环境的,Gradle无法从多个Android变体中自动选择匹配的产物,导致依赖解析失败。使用废弃的
compile project(path: ':androidtestlib', configuration: 'default')同步成功但构建失败:default配置在新版Android Gradle插件中已经不再被正确支持,IDE同步时能通过源码索引找到类,但构建时Gradle无法正确解析该配置下的类路径,导致找不到包。
内容的提问来源于stack exchange,提问作者Petrakeas

