Android模块化配置疑问:能否仅在App模块统一设置基础参数?
Android模块化SDK参数统一配置指南
核心问题解答
不需要每个模块都手动配置minSdk、targetSdk这类基础参数,完全可以通过自定义Gradle插件或者约定式脚本实现统一管理,同时保留各模块的独立配置(比如namespace)。
NowInAndroid的实现思路
你看到的NowInAndroid Feature模块代码里,那些nowinandroid.android.feature类的插件是关键——这是项目自定义的复合Gradle插件,里面已经封装了所有通用配置:
- 统一设置
minSdk、targetSdk、compileSdk - 预设通用编译选项、测试配置
- 集成Compose、Jacoco这类常用工具的默认配置
所以模块里只需要声明自己的namespace和特有依赖就行,不用重复写通用配置。
解决apply方式的痛点:用预编译脚本插件
你提到的apply继承共享脚本的问题确实存在——把namespace写在共享脚本里会导致所有模块共用同一个命名空间,资源访问冲突。换用预编译脚本插件就能解决:
- 在项目根目录的
buildSrc/src/main/kotlin下创建通用配置脚本,比如AndroidLibraryConventions.kt:
plugins { id("com.android.library") id("org.jetbrains.kotlin.android") } android { compileSdk = 34 defaultConfig { minSdk = 24 targetSdk = 34 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } }
这里只放所有模块共用的配置,不包含namespace。
- 在Feature模块的
build.gradle.kts里引用这个插件,同时单独声明自己的namespace:
plugins { id("your.project.android-library-conventions") // 按需添加模块专属插件,比如compose、jacoco } android { namespace = "com.yourproject.feature.bookmarks" } dependencies { // 模块特有的依赖 }
这样既统一了SDK参数,每个模块又能拥有独立的namespace,不会出现资源访问问题。
能不能只在App模块统一设置?
不行。每个Android模块(包括Feature库模块)都是独立的构建单元,App模块的配置不会自动传递给库模块。库模块必须定义自己的minSdk等参数,否则Gradle构建会报错。但我们可以通过上面的自定义插件/约定脚本,让这些配置在后台自动应用,不用每个模块手动重复写。
内容的提问来源于stack exchange,提问作者Cuyer
相关产品推荐
相关产品推荐

