千家信息网

如何避免多模块Android中的Gradle重复

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章将为大家详细讲解有关如何避免多模块Android中的Gradle重复,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当你有一个包含许多模块的 Android
千家信息网最后更新 2025年01月21日如何避免多模块Android中的Gradle重复

这篇文章将为大家详细讲解有关如何避免多模块Android中的Gradle重复,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

当你有一个包含许多模块的 Android 项目时,你可能会发现在各个模块中的 build.gradle 文件中复制了很多 gradle 配置(通常通过复制和粘贴)。

我在互联网上阅读了各种尝试避免这种情况的方法,直到看到了这篇博客文章。这篇文章使用模块的名称来确定要应用哪些 gradle 插件以及要用于该模块的配置。

在我的多个模块项目之一中,我使用过类似的东西。然而,不同之处在于我在每个单独的模块 build.gradle 中应用了所需的插件,在根 build.config 中,我同时使用模块名称和它的属性来添加适当的共享配置。

例如,这里是根 build.gradle 中所有模块的公共共享配置:

subprojects {    afterEvaluate { project ->        if (project.hasProperty("android")) {            android {                compileSdkVersion 30                buildToolsVersion '30.0.2'                defaultConfig {                    minSdkVersion 23                    targetSdkVersion 30                }                compileOptions {                    sourceCompatibility JavaVersion.VERSION_11                    targetCompatibility JavaVersion.VERSION_11                }            }        }}

这个应用程序是一个混合的 Java 和 Kotlin 项目,所以只有一些模块使用 Kotlin。在 Kotlin 模块中,我应用了 kotlin 插件。

apply plugin: 'com.android.library'apply plugin: 'kotlin-android'

然后在根 build.gradle 中,我可以将 Kotlin 配置添加到这些模块中:

if (project.hasProperty('kotlin')) {        android {            kotlinOptions {                jvmTarget = JavaVersion.VERSION_11.toString()            }        }        dependencies {            implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'            implementation 'androidx.core:core-ktx'        }}

如果有仅适用于某些模块的通用配置,我也可以使用模块名称作为过滤器,只为这些模块添加该配置。例如对于除 app 模块之外的所有模块:

if (project.hasProperty('android') && !name.equalsIgnoreCase('app')) {      ...}

同样对于具有特定名称的模块:

if (project.hasProperty('android') && name.equalsIgnoreCase('feature-1')) {      ...}

请注意,我使用根 build.gradle 来包含通用配置以保持简单,但也有更复杂的方法,可以使用 buildSrc 目录代替。

关于"如何避免多模块Android中的Gradle重复"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0