如何在Gradle中动态修改sourceSets的java.srcDirs?按需构建AAR求方案
动态配置Android Gradle SourceSets并按需构建AAR
方法一:通过命令行参数动态修改SourceSets
你可以借助Gradle的项目属性传递命令行参数,在脚本里根据参数动态指定源码目录:
- 修改模块级
build.gradle:
android { // 读取命令行传入的buildVariant参数,默认用open作为兜底选项 def targetVariant = project.hasProperty('buildVariant') ? project.buildVariant : 'open' sourceSets { main { // 动态拼接源码目录路径 java.srcDirs = ["src/${targetVariant}/java"] } } }
- 执行构建命令时传入参数:
构建gdt版本的AAR:
./gradlew assembleRelease -PbuildVariant=gdt
构建open版本的AAR:
./gradlew assembleRelease -PbuildVariant=open
更优方案:使用Product Flavors(官方推荐)
手动修改sourceSets属于临时配置方式,Gradle官方更推荐用Product Flavors实现多变体构建,这种方式更规范,调试和维护成本更低:
- 修改模块级
build.gradle:
android { // 定义flavor维度(仅一组变体时,维度名可自定义) flavorDimensions "variantType" productFlavors { gdt { dimension "variantType" // 无需手动指定srcDirs——Gradle默认会识别`src/gdt/java`、`src/gdt/res`等目录 } open { dimension "variantType" } } }
- 构建对应版本的AAR:
直接调用自动生成的构建任务即可,无需额外传参:
# 构建gdt版本的release AAR ./gradlew assembleGdtRelease # 构建open版本的release AAR ./gradlew assembleOpenRelease
该方案的优势
- 自动适配多目录:除Java源码外,还能自动识别对应变体的资源(res)、Manifest文件、JNI库等,无需手动配置sourceSets的其他属性
- 开发调试便捷:在Android Studio的「Build Variants」面板可直接切换gdt/open变体,不用每次修改脚本或传命令行参数
- 任务逻辑清晰:每个变体对应独立的构建任务,避免参数传递出错
内容的提问来源于stack exchange,提问作者Taylor
相关产品推荐
相关产品推荐

