查看: 50|回复: 0

Android应用开发中的applicationId与package

[复制链接]

0

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-1-11
发表于 2021-3-27 18:32:00 | 显示全部楼层 |阅读模式

2021-03-27

关键字:


 

每一个Android应用都有一个“唯一身份标识”,即ID号。也即是本文标题中的 applicationId。

 

而 package 则是定义在 AndroidManifest.xml 中用于区分不同代码相对位置的。package的命名都是按目录层级结构走的。如下图所示:

  

在Android系统中,想要定位到某一具体的应用,我们需要 applicationId。想要定位到某一具体的应用的某个组件(Activity, Service, Provider, Receiver),我们则需要 applicationId + package。

 

在早期的APK开发中(简单理解成Android Studio尚未发布的时候),applicationId与package的值是相同的,且一般都关注不到applicationId属性,于是我们很自然的就认为唯一确定一个应用仅需依靠AndroidManifest.xml中的package+类名即可。

com.jarwen.scanner/com.jarwen.scanner.MainActivity

类名中package部分可以简写成相对路径的形式:

com.jarwen.scanner/.MainActivity

 

当Android Studio开始流行以后,应用gradle中的applicationId才逐渐进入开发者们的视野,也才逐渐让我们了解到原来二者之间是有区别的。正如文首所说,applicationId才是正版ID号,package仅仅是描述代码文件位置的索引值。并且这两个值可以不一样。

 

最常见的一种做应用形式是只更改applicationId的值而不改变package。例如,我们经常会遇到两个应用程序中绝大部分功能与内容都相同仅小部分信息不同的情况,这种情况下两个应用很大的几率是共享同一套代码仅靠配置文件来区分的。而我们又难免会有需要在同一个设备或者同一个应用商店内同时存在这两个应用的情况。这个时候package不变单独修改applicationId就能完美满足我们的需求了。而且,最最重要的是在Android Studio中单独修改applicationId太方便了。直接在app的build.gradle中任意修改随后编译发布即可。如下图所示:

 

 

按照上图修改完成后,应用的定位形式就如下所示了:

com.jarwen.scanner.th.nf5501/com.jarwen.scanner.MainActivity

并且在类名中不可以再缩写成相对路径的形式了。

 

另外,如果需要通过applicationId来区分同一套应用的不同版本,且有定义content provider组件的情况下,provider的authorities必须写成相对形式而不能直接填写携带package的绝对值形式,否则的话同一设备中会因为有两个应用具有相同的content provider而无法共存,直接在安装应用时报 INSTALL_FAILED_CONFLICTING_PROVIDER 错误。可行的写法如下图所示:

 

  


 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部