这篇文章将为大家详细讲解有关如何避免多模块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重复”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。