本页面介绍模块级 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
。
尽管不应有此必要,但您可以通过在 defaultConfig
或 productFlavor
块中定义 testApplicationId
属性来更改应用 ID。
设置命名空间
每个 Android 模块都有一个命名空间,它用作其生成的 R
和 BuildConfig
类的 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 平台实际查找以识别您应用的位置。
更改用于测试的命名空间
androidTest
和 test
源集的默认命名空间是主命名空间,其末尾添加了 .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" ... }
注意:请勿将 testNamespace
和 namespace
设置为相同的值,否则会导致命名空间冲突。
如需详细了解测试,请参阅测试 Android 应用。