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

如何在多个Android项目间共享Sample data?库未编译sampledata文件夹

多Android项目间共享示例数据(Sample Data)的可行方案

针对你遇到的「包含sampledata的库未将该目录编译进AAR,导致无法跨项目共享」的问题,我整理了两种场景下的解决方案:


方案1:单仓库(Monorepo)多模块共享

如果你的库和应用模块都在同一个项目仓库中,这是最简便的实现方式:

  1. 确保库模块的示例数据放在src/main/sampledata目录下(若自定义位置,可通过sourceSets配置指定)。
  2. 在应用模块的build.gradle(或build.gradle.kts)中,将库的sampledata目录添加到自身的sampledata源集合:

Groovy版本

android {
    sourceSets {
        main {
            sampledata.srcDirs += project(':你的库模块名称').sourceSets.main.sampledata.srcDirs
        }
    }
}

Kotlin DSL版本

android {
    sourceSets {
        named("main") {
            sampledata.srcDirs(project(":你的库模块名称").sourceSets.named("main").get().sampledata.srcDirs)
        }
    }
}

配置完成后,应用模块的布局预览就能直接调用库中的示例数据,无需额外打包操作。


方案2:跨仓库(库发布到Maven)共享

如果你的库是独立发布到Maven仓库的,需要先将sampledata打包进AAR,再让依赖项目提取使用:

步骤1:配置库模块的Gradle,将sampledata打包进AAR

在库的build.gradle中添加以下配置,确保sampledata被打包为附加Artifact:

Groovy版本

android {
    sourceSets {
        main {
            sampledata.srcDirs = ['src/main/sampledata']
        }
    }
}

// 打包sampledata为单独的Jar包
task packageSampleData(type: Jar) {
    from sourceSets.main.sampledata.srcDirs
    archiveName = "sampledata.jar"
    destinationDir = file("$buildDir/intermediates/sampledata")
}

// 将sampledata.jar作为附加产物发布
artifacts {
    archives packageSampleData
}

// 确保构建AAR前完成sampledata打包
assemble.finalizedBy(packageSampleData)

Kotlin DSL版本

android {
    sourceSets {
        named("main") {
            sampledata.srcDirs("src/main/sampledata")
        }
    }
}

val packageSampleData by tasks.registering(Jar::class) {
    from(sourceSets.named("main").get().sampledata.srcDirs)
    archiveName = "sampledata.jar"
    destinationDir = file("$buildDir/intermediates/sampledata")
}

artifacts {
    archives(packageSampleData)
}

tasks.named("assemble") {
    finalizedBy(packageSampleData)
}

步骤2:在依赖项目中提取库的sampledata

在应用模块的build.gradle中,添加库依赖并配置sourceSets提取AAR中的sampledata:

Groovy版本

dependencies {
    implementation 'com.example:你的库包名:版本号'
}

android {
    sourceSets {
        main {
            // 从依赖的库AAR中提取sampledata目录
            sampledata.srcDirs += zipTree(configurations.implementation.find { it.name.contains('你的库包名') }.absolutePath).matching {
                include 'sampledata/**'
            }.files
        }
    }
}

Kotlin DSL版本

dependencies {
    implementation("com.example:你的库包名:版本号")
}

android {
    sourceSets {
        named("main") {
            sampledata.srcDirs(
                configurations.implementation.get().filter { it.name.contains("你的库包名") }
                    .map { zipTree(it).matching { include("sampledata/**") }.files }
            )
        }
    }
}

配置完成后,应用项目会自动从依赖的库AAR中提取sampledata,布局预览可直接使用这些示例数据。


备选方案:用资源目录替代sampledata

如果上述方案遇到兼容性问题,也可以将示例数据放在库的assets或res/raw目录下,在布局预览中通过tools:sample直接引用资源文件。这种方式需要手动处理数据读取,但兼容性更强。

内容的提问来源于stack exchange,提问作者Vladimir Jovanović

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:10:54