配置应用模块

本页面介绍模块级 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

默认情况下,构建工具会为您的 插桩测试 APK 应用一个应用 ID,该 ID 是给定构建变体的应用 ID 后附加 .test。例如,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 属性设置的名称应始终与您的项目基础软件包名称匹配,您可以在其中存放您的 activity 和其他应用代码。您的项目可以包含其他子软件包,但这些文件必须使用 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 应用