在Gradle 被用作默认的 Android 构建系统之前,PackageName 的主要作用有两个:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.my.app"
android:versionCode="1"
android:versionName="1.0" >
- 作为应用的
唯一标志和进程ID` - R 资源及四大组件中被用作包名
在 Gradle 被用作默认的 Android构建系统之后,一些就发生了改变:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "19.1"
defaultConfig {
applicationId "com.example.my.app"
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
AppliactionId 和 PackageName的分工:
applicationId负责App 的唯一标示和进程 IDpackage name负责R 的包名以及Manifest 中 Activity 等四大组件的相对包名
当我们在同一设备安装同一 App 的不同版本时,ApplicationId 可以很好的实现这一需求:
不同的 flavor 或者 build type 可以拥有不同的 application id,也就是不同的进程 id。
productFlavors {
pro {
applicationId = "com.example.my.pkg.pro"
}
free {
applicationId = "com.example.my.pkg.free"
}
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
如果
build.gradle中没有指定applicationId,那么applicationId的默认值就是manifest的package属性值
总结
有了上面的内容,我们可以简单总结如下:
applicationId 负责 App 的唯一标示和进程 ID,
package name 负责R 的包名以及 Manifest 中 Activity 等四大组件的相对包名,如果没有指定 applicationId 那么 package name 会负责全部的职责。
本文详细解析了在Gradle作为Android构建系统后,PackageName与ApplicationId的角色转变。PackageName主要负责R资源包名及四大组件的相对包名,而ApplicationId则承担了应用的唯一标识和进程ID的责任。通过配置不同版本或类型的App,可以实现同一设备上安装不同版本而不冲突。
1123

被折叠的 条评论
为什么被折叠?



