配置应用模块

此页面介绍了模块级 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 的值。

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 15
        targetSdk = 24
        versionCode = 1
        versionName = "1.0"
    }
    ...
}
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 最初设置为您在 创建项目 时选择的包名称。

android {
    namespace = "com.example.myapp"
    ...
}
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 属性,如下面的代码片段所示。

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

警告:不要将 testNamespacenamespace 设置为相同的值,否则会导致命名空间冲突。

要详细了解测试,请参阅 在 Android 上测试应用