ApplicationId与PackageName的区别

来源:互联网 发布:js 单选按钮改变事件 编辑:程序博客网 时间:2024/05/22 19:59

在android开发中,应用包名应用的唯一标示

在没有采用Gradle构建系统之前,包名是通过AndroidManifest.xml中的package属性标识的,如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.XXXX.app.XXX">
在eclipse中 包名的作用为:

包名是应用的唯一标示

包名属性同时作为项目源文件索引的R资源文件、Activity类文件的前缀(包名),通过制定包名,项目源文件可以省去输入完整路径的R文件等

Gradle构建系统允许构建不同版本的app

如“free”和“pro”版本并同时发布和安装,因此需要不同的“包名”来标示区分。这与上面的package属性唯一标识一个app产生冲突,

为了解决这个问题,Gradle引入了“applicationId”,使得package属性与applicationId解耦。

1.applicationId属性唯一标识app,包括在Google Play和设备上;

2,,package属性仍然作为项目源码引用R资源文件以及相关的Activity/Service时使用的包名前缀。

这样做的好处在于,你可以随便修改项目内部的“包名”,此时只需要修改项目源码结构以及AndroidManifest.xml文件中的package属性,

从而保证项目源码内部引用的R资源文件和Activity等源文件路径正确,而不会影响到发布到Google Play或者设备上,此时app的唯一标识只

认设备打包配置时使用的applicationId属性。

另一方面,你可以通过配置构建脚本进行多渠道多版本打包,而这个过程与以前的package属性无关

如果你没有在build.gradle中显式制定applicationId属性,该属性默认与AndroidManifest.xml中的package相同,最好是分开标识。

 defaultConfig {        //applicationId "com.xxxxxx.app.mlc"        applicationId "com.xxxxxx.app.uat"        minSdkVersion 16        targetSdkVersion 22        versionCode 2        versionName "1.2.1"        multiDexEnabled true    }





0 0