此页面介绍了模块级 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
。
尽管通常无需更改,但您也可以通过在 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
属性设置的名称应始终与项目的基包名称匹配,您在其中保存活动和其他应用代码。您的项目中可以包含其他子包,但这些文件必须使用来自 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 上测试应用。