一:概念
<1>applicationId:
Android应用的唯一标识,在Android设备和应用市场中中所有的应用程序的applicationId都是唯一的,要对一个应用进行更新,必须保证applicationId的值相同,否则就认为是不同的应用。
<2>packageName:
Android应用包名。
二:比较
<1>在eclipse中:
applicationId等同于包名。
<2>在AndroidStudio中:
a.在创建新项目时applilcationId和packageName是默认相同的,即与项目结构中的包名相同,在项目创建完毕后两者的修改互不影响,但要保证在AndroidManifest.xml中的package与项目结构路径的包名相同,否则会运行报错;
b.如果没有在gradle中设置applicationId的值,则项目默认读取packageName作为applicationId的值;
c.packageName可理解为项目代码和资源的路径;
<3>补充
a.在使用三方sdk时,要求填写的包名为项目唯一标识,及applicationId;
b.虽然applicationId和gradle中的applicationId的值可能会不同,但是再build之后,AndroidManifest.xml中的package会自动复制applicationId的值,但是activity的name值仍为编译前packageName的值(体现了packageName为寻找代码和资源的路径);
三.使用
<1>可以根据设置不同的applicationId值来实现在同一个手机里同时安装测试和正式包的功能;
使用步骤:
a.在app的build文件中添加debug包用到的applicationId;
b.直接运行项目或者打debug包;
tips:在直接运行项目,或者打debug包的时候会自动引用debug的applicationIdSuffix的值,“.”之前的部分自动补全为applicationId的值,在debug的applicationIdSuffix也可以覆盖定义名称,如 “com.test.app”,则不再补全;
<2>可以根据打包时设置不同渠道不同的applicationId值来打出不同的应用;
a.在app的build文件中添加productFlavors中的渠道,并设置相应applicationId的名称;
b.在打包时直接选择相应渠道进行打包,如图;
tips:在多渠道打包设置applicationId时,最好采用覆盖方式进行命名(即不以“.”开头),否则会引起报错;
<3>在使用一些三方sdk时,可以根据不同的applicationId值来生命测试和正式的应用账号,方便测试(例如极光推送,要根据不同的applicationId值来产生不同的APPKey,并识别进行推送)。
<4>可在AndroidManifest.xml中使用${applicationId}引用applicationId。
ps:第一次写文章,有些的不正确的地方请留言提出,多多指教,多谢!
同时借鉴了一些大牛的文章,在此表示感谢,附带链接:
https://blog.csdn.net/u011105728/article/details/53197783
https://zhidao.baidu.com/question/620123351579513012.html