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

Android模块化配置疑问:能否仅在App模块统一设置基础参数?

Android模块化SDK参数统一配置指南

核心问题解答

不需要每个模块都手动配置minSdk、targetSdk这类基础参数,完全可以通过自定义Gradle插件或者约定式脚本实现统一管理,同时保留各模块的独立配置(比如namespace)。

NowInAndroid的实现思路

你看到的NowInAndroid Feature模块代码里,那些nowinandroid.android.feature类的插件是关键——这是项目自定义的复合Gradle插件,里面已经封装了所有通用配置:

  • 统一设置minSdk、targetSdk、compileSdk
  • 预设通用编译选项、测试配置
  • 集成Compose、Jacoco这类常用工具的默认配置

所以模块里只需要声明自己的namespace和特有依赖就行,不用重复写通用配置。

解决apply方式的痛点:用预编译脚本插件

你提到的apply继承共享脚本的问题确实存在——把namespace写在共享脚本里会导致所有模块共用同一个命名空间,资源访问冲突。换用预编译脚本插件就能解决:

  1. 在项目根目录的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。

  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:50:11