Android Studio中manifest文件中的package包名和module中的build.gradle中applicationId的区别

在还没有从eclipse转到Android Studio开发的时候,我们都知道一个项目的包名定义在AndroidManifest文件中的package,如下图:

Android Studio中manifest文件中的package包名和module中的build.gradle中applicationId的区别_第1张图片

我们来看下定义:

包名(package):指定本应用内java主程序包的包名。当没有指定apk的文件名时,编译后产生程序包将以此命名。本包名应当在Android系统运行时唯一。 

在两个不同的Application之间,用Application A的Activity A调用Application B的Activity B的时候,在AndroidManifest.xml中的package名称不能一样,否则安装完一个apk之后,再去安装另一个Application的apk的时候,会提示不存在,会有冲突,(install的时候,以内部package名字等信息为准,不是apk的名字为准),即使apk名字不同,AndroidManifest.xml中的package名相同会提示冲突。

所以,不同的Application,AndroidManifest.xml中的package名一定要不同,当一个Application中有多个package的时候,以这个Application的入口(MAIN+LAUNCHER的intent-filter)所在的包名为AndroidManifest.xml中的package名。如果一个Application没有入口程序,如packages/apps/Bluetooth,那以哪个包名作为AndroidManifest.xml中的package名都可以。

同时R文件对应的引用地址也是包名地址,所以每次更改工程包名我都十分痛苦,要替换所有文件中R文件的引用路径,如下图:

Android Studio中manifest文件中的package包名和module中的build.gradle中applicationId的区别_第2张图片

但是Android Studio却拯救了我,当我把工程从eclipse转到Android Studio之后,他出现了一个新的定义:ApplicationId,他允许我们在不改变AndroidManifest文件中的package情况下,更改applicationID,不同的applicationID相当于不同的包名程序,具体官方文档翻译:http://blog.csdn.net/maosidiaoxian/article/details/41719357

Android Studio中manifest文件中的package包名和module中的build.gradle中applicationId的区别_第3张图片Android Studio中manifest文件中的package包名和module中的build.gradle中applicationId的区别_第4张图片Android Studio中manifest文件中的package包名和module中的build.gradle中applicationId的区别_第5张图片

可以清楚地看到,我们的package包名在工程中的作用只剩下索引R文件,而ApplicationId成为了真正的包名,并且要注意的是,在集成jpush第三方sdk的时候,需要我们提供包名等信息,这里要引用applicationId

因此,总的来说就一句话:在Android Studio中build.gradle构建工程后,manifest文件中的packagename只用作R文件的引用包名,而applicationId变成了这个程序真正的包名。

你可能感兴趣的:(Android,IDE常见问题(eclipse,AS))