应用ID
- 每个Android 应用有唯一的应用ID
- 应用ID 可以在设备上和 Google Play 商店中对应用进行唯一标识。
- 应用版本更新必须保证 应用ID(以及使用它签署的证书)与原始 APK 相同。
- 应用发布后绝不应该更改应用ID。
设置应用ID
通过模块的 build.gradle 文件中的 applicationId 属性定义,如下面所示:
android {
defaultConfig {
applicationId "com.example.myapp"
...
}
...
}
应用 ID 的命名规则
- 必须至少包含两段(一个或多个圆点)。
- 每段必须以字母开头。
- 所有字符必须为字母数字或下划线 [a-zA-Z0-9_]。
注意: 有些 Android API 会在其方法名称和参数名称中使用术语“包名”,这实际上是应用 ID。例如,Context.getPackageName() 方法返回的是应用ID 而不是包名。
打包动态更改 应用ID
比如我们想要对游戏进行OPPO和VIVO两个渠道打包。(两个渠道包内容一样,单单是应用ID 不一样),进行如下配置。
android {
defaultConfig {
applicationId "com.example.game"
}
productFlavors {
free {
//applicationIdSuffix是添加后缀的意思
applicationIdSuffix ".oppo"
// 上面配置等同于
// applicationId "com.example.game.oppo"
}
pro {
applicationIdSuffix ".vivo"
}
}
}
配置运行后最终会生成 应用ID 为“com.example.game.oppo”和“com.example.game.vivo”的apk。
注意: 对于与之前的 SDK 工具的兼容性,如果您不在 build.gradle
文件中定义 applicationId 属性,构建工具会将 AndroidManifest.xml 文件中的包名用作应用 ID。
这种情况下,重构包名也会更改应用 ID。
package 属性
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp"
android:versionCode="1"
android:versionName="1.0" >
Android 构建工具会将 package 属性用于下面两方面:
-
它会将此名称用作应用生成的 R.java 类的命名空间。
示例:对于上面的清单,R 类将为 com.example.myapp.R。
-
它会使用此名称解析清单文件中声明的任何相关类名称。
示例:对于上面的清单,声明为 的 Activity 将解析为 com.example.myapp.MainActivity。
注意: 尽管清单 package 和 Gradle applicationId 可以具有不同的名称,但构建工具会在构建结束时将应用 ID 复制到 APK 的最终清单文件中。
所以,如果在构建后检查 AndroidManifest.xml 文件,package 属性发生更改就不足为奇。
实际上,Google Play 商店和 Android 平台会注意 package 属性来标识应用;所以构建利用原始值后(用作 R 类的命名空间并解析清单类名称),它将会舍弃此值并将其替换为应用 ID。