配置应用模块

此页面介绍了模块级 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。如果更改应用 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 上测试应用