返回

焕发代码新机,谈一谈 Android Gradle 中的 sourceSets

Android

在软件开发中,组织代码是维护和管理大型项目的关键。当代码库变得庞大且复杂时,就需要一种系统性的方法来划分和管理不同的代码模块。在 Android 项目中,Gradle 构建工具提供了 sourceSets 来帮助我们实现这一目标。

什么是 sourceSets?

sourceSets 是一个用于组织源代码的集合。它允许我们将项目代码划分为不同的类别,如主代码、测试代码、集成测试代码等。通过使用 sourceSets,我们可以更轻松地管理和构建项目的不同部分。

Android 项目的默认源代码结构

在 Android 项目中,代码通常分为三个主要目录:

  • 主代码 (src/main):包含项目的主要源代码,包括 Java 代码、资源文件等。
  • 测试代码 (src/test):包含项目的单元测试代码。
  • 集成测试代码 (src/androidTest):包含项目的集成测试代码。

默认情况下,Gradle 会自动创建三个 sourceSets

  • main :对应于 src/main 目录。
  • test :对应于 src/test 目录。
  • androidTest :对应于 src/androidTest 目录。

创建自定义的 sourceSets

除了默认的 sourceSets,我们还可以根据需要创建自定义的 sourceSets。例如,我们可以创建一个名为 "library" 的 sourceSet,用于管理项目中的第三方库代码。

sourceSets {
    library {
        java.srcDirs = ['src/main/java/library']
        resources.srcDirs = ['src/main/resources/library']
    }
}

使用 sourceSets

创建 sourceSets 后,我们可以通过以下方式使用它们:

在构建任务中指定要构建的 sourceSets

task buildLibrary(type: Jar) {
    from sourceSets.library.output
}

在依赖管理中指定要依赖的 sourceSets

dependencies {
    implementation project(':library')
}

在测试任务中指定要测试的 sourceSets

task testLibrary(type: Test) {
    from sourceSets.library.testSourceSets
}

好处

通过使用 sourceSets,我们可以更轻松地管理和构建项目的不同部分。我们可以将代码划分成不同的类别,并根据需要创建自定义的 sourceSets。这可以帮助我们提高项目的可维护性和可扩展性。

常见问题解答

1. sourceSets 和包有什么区别?

sourceSets 是一个逻辑上的代码划分,而包是一个物理上的代码划分。sourceSets 可以跨多个包,反之亦然。

2. 我可以在一个 sourceSet 中同时包含 Java 和 Kotlin 代码吗?

可以,sourceSets 对代码类型没有限制。

3. 我如何将一个 sourceSet 排除在构建之外?

可以在构建任务中使用 exclude 方法来排除 sourceSets

task buildExcluded(type: Jar) {
    from sourceSets.main.output
    exclude sourceSets.main
}

4. 我如何分享 sourceSets 之间的代码?

可以通过使用 provided 依赖项来分享 sourceSets 之间的代码,该依赖项仅编译代码但不将其打包到输出中。

dependencies {
    provided 'com.example:library:1.0.0'
}

5. 我如何查看特定 sourceSet 中包含的文件?

可以在命令行中使用 gradlew sourceSets 命令来查看特定 sourceSet 中包含的文件。

结论

sourceSets 是管理 Android 项目中代码的重要工具。通过将代码划分成不同的类别,我们可以更轻松地维护和扩展我们的项目。

资源链接