配置应用模块

此页面介绍了模块级 build.gradle.kts 文件中一些有用的应用设置。除了概述在 build.gradle.kts 文件中设置的重要属性外,还将学习如何

  • 更改不同构建配置的应用 ID。
  • 安全地调整与应用 ID 无关的命名空间。

设置应用 ID

每个 Android 应用都有一个唯一的应用 ID,其格式类似于 Java 或 Kotlin 包名,例如 com.example.myapp。此 ID 在设备和 Google Play 商店中唯一标识您的应用。

您的应用 ID 由模块的 build.gradle.kts 文件中的 applicationId 属性定义,如下所示。通过将 com.example.myapp 替换为您的应用 ID 来更新 applicationId 的值

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 15
        targetSdk = 24
        versionCode = 1
        versionName = "1.0"
    }
    ...
}

Groovy

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    ...
}

尽管应用 ID 看起来像传统的 Kotlin 或 Java 包名,但应用 ID 的命名规则更加严格

  • 它必须至少包含两个部分(一个或多个点)。
  • 每个部分必须以字母开头。
  • 所有字符必须是字母数字或下划线 [a-zA-Z0-9_]。

当您在 Android Studio 中创建新项目时,applicationId 会自动分配您在设置过程中选择的包名。从那时起,您可以在技术上独立切换这两个属性,但不建议这样做。

建议您在设置应用 ID 时执行以下操作

  • 使应用 ID 与命名空间相同。这两个属性之间的区别可能有点令人困惑,但如果您使它们相同,则无需担心。
  • 发布应用后,请勿更改应用 ID。如果您更改它,Google Play 商店会将后续上传视为新的应用。
  • 显式定义应用 ID。如果未使用 applicationId 属性显式定义应用 ID,则它会自动采用与命名空间相同的值。这意味着更改命名空间会更改应用 ID,这通常不是您想要的。

更改应用 ID 以进行测试

默认情况下,构建工具会使用给定构建变体的应用 ID 附加 .test 来为您的 检测测试 APK 应用应用 ID。例如,com.example.myapp.free 构建变体的测试 APK 的应用 ID 为 com.example.myapp.free.test

尽管通常无需更改,但您也可以通过在 defaultConfigproductFlavor 代码块中定义 testApplicationId 属性来更改应用程序 ID。

设置命名空间

每个 Android 模块都有一个命名空间,它用作其生成的 RBuildConfig 类 的 Kotlin 或 Java 包名。

您的命名空间由模块 build.gradle.kts 文件中的 namespace 属性定义,如下面的代码片段所示。 namespace 最初设置为您在 创建项目 时选择的包名。

Kotlin

android {
    namespace = "com.example.myapp"
    ...
}

Groovy

android {
    namespace "com.example.myapp"
    ...
}

在将您的应用构建到最终的应用程序包 (APK) 中时,Android 构建工具会将命名空间用作应用的生成 R 类的命名空间,该类用于访问您的 应用资源。例如,在上一个构建文件中,R 类是在 com.example.myapp.R 中创建的。

您为 build.gradle.kts 文件的 namespace 属性设置的名称应始终与项目的基包名称匹配,您在其中保存活动和其他应用代码。您的项目中可以包含其他子包,但这些文件必须使用来自 namespace 属性的命名空间导入 R 类。

为了简化工作流程,请将您的命名空间与您的应用程序 ID 保持一致,因为它们在默认情况下是相同的。

更改命名空间

在大多数情况下,您应该将命名空间和应用程序 ID 保持一致,因为它们在默认情况下是相同的。但是,如果您正在重新组织代码或要避免命名空间冲突,则可能需要在某些时候更改命名空间。

在这些情况下,请通过更新模块 build.gradle.kts 文件中的 namespace 属性来更改命名空间,而与应用程序 ID 无关。在这样做之前,请确保您的应用程序 ID 已明确定义,以便更改命名空间不会同样更改应用程序 ID。有关命名空间如何影响应用程序 ID 的更多信息,请参阅 设置应用程序 ID

如果您为 namespace 和 Gradle applicationId 设置了不同的名称,则构建工具会在构建结束时将应用程序 ID 复制到应用的最终清单文件中。因此,如果您在构建后检查 AndroidManifest.xml 文件,则 package 属性将设置为应用程序 ID。合并清单的 package 属性是 Google Play 商店和 Android 平台实际用于识别您的应用的位置。

更改测试的命名空间

androidTesttest 源集的默认命名空间是主命名空间,并在末尾添加了 .test。例如,如果 build.gradle 文件中的 namespace 属性为 com.example.myapp,则测试命名空间在默认情况下设置为 com.example.myapp.test。要更改测试的命名空间,请使用 testNamespace 属性,如下面的代码片段所示

Kotlin

android {
    namespace = "com.example.myapp"
    testNamespace = "com.example.mytestapp"
    ...
}

Groovy

android {
    namespace "com.example.myapp"
    testNamespace "com.example.mytestapp"
    ...
}

注意:不要将 testNamespacenamespace 设置为相同的值,否则会发生命名空间冲突。

要了解有关测试的更多信息,请参阅 在 Android 上测试应用