网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月21日漏签0天
覆盖吧 关注:15,324贴子:186,440
  • 看贴

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 58回复贴,共2页
  • ,跳到 页  
<<返回覆盖吧
>0< 加载中...

app覆盖安装的时候,会改变UID吗?

  • 只看楼主
  • 收藏

  • 回复
  • 520
  • 乱码
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
UID和sharedUID并不是一回事,题主不要被误导了。
1.每个软件安装在手机的时候,手机都会分配一个UID为唯一标示,当软件App覆盖安装的时候,这个UID会发生变化吗?是不是固定不变的?
--------一般情况下不会变化,除非出现错误或者异常.
这个是PackageManagerService在scanPackageLI中实现的,/data/system/packages.xml也就是packageSettings中保存了package的信息,其中就包括了uid,在覆盖安装的第二部覆盖中,会读取packageSetting中Uid赋给新安装的应用
pkg.applicationInfo.uid = pkgSetting.appId;
2.如果系统在app覆盖安装的时候UID发生变化了,是否合理?如果不合理,那不合理的原因是什么?
-----------不合理,你要知道,data下面的/data/data/com.douniwan.douniwan/这个目录的owner就是你的应用(你可以ls下看看),如果uid发生变化了,那么新安装后的应用就会对这个目录失去读写权限而导致问题(如保存的用户数据没了),因此,在Pms安装的过程中会对这一异常进行检查,如果发现UID不匹配就会报INSTALL_FAILED_UID_CHANGED异常。
然后,对于特殊的app,如system的app,pms还会进行修复,也就是删除这个更新的包,重新创建data目录。
3.目前对于Android系统而言,有没有一些明确的规则规定系统ROM在app覆盖安装时,UID必须固定不发生变化
------如上面的回答1和2,现有的机制就是保证。
sharedUid是另外一种权限控制,不要搞混淆了。


  • 江寒
  • 词组覆盖
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
冲


2025-05-21 22:25:22
广告
  • 贴吧用户_0EaKJaE
  • 火单覆盖
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好酷,但是看不懂


  • 520
  • 乱码
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1.覆盖安装(同版本覆盖以及升级)时,一般UID不会发生变化,一般都是在安装时确定的。
PackageManager中定义了一个INSTALL_FAILED_UID_CHANGED变量。
Installation return code: this is passed to the {@link IPackageInstallObserver} by{@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} ifthe new package is assigned a different UID than it previously held.
意思就是说在安装包时如果出现UID不一致,就会安装失败。
实际测试使用统一包名应用进行升级、覆盖安装UID不变,卸载后重新安装UID会递增,与之前不同。
2.既然前面说到了一般情形,那肯定有例外。
一般任何两个应用的UID都不一样,那如果多个应用要互相访问数据(数据库,缓存,文件),而除此之外的其他应用不能访问他们的数据该怎么办?
这时候android:sharedUserId(AndroidManfest.xml manifest节点属性)就发挥作用了。只要不同应用使用了相同的android:sharedUserId,而且,使用了相同的秘钥进行签名。就可以完成之前说的应用之前数据互访。
上面说的有什么卵用呢?
考虑这样一种情形,手机安装了A的1.0版本、B的1.0版本,都没有定义android:sharedUserId属性。安装完成后UID都不同。现在2.0版本之后都带上这个属性。根据Android官方描述,他们升级后要UID要一样,那肯定A或者B肯定有一个的UID要变化。
什么?你说有可能根本不能升级,那这就是个bug了。可以报给Google了。
另外一种情形,就是root后可以通过使用root权限,人为修改uid。理论上绝对可信。但是貌似没什么卵用。要拿数据的话,直接拿就行了,没必要多此一举改uid。当然,这是特殊情形。
3.根据公开的文档,并没有像JVM一样有虚拟机规范类似的东西。只是代码逻辑里面是不变的。
具体细节官方PackageManagerService(附录第一个链接),代码太壮观了。比如PackageManagerService的scanPackageLI方法太壮观了。。。
具体是如何实现的,我觉得可研究下apk的安装过程,里面会有详细的介绍。
然后也没必要纠结于UID的变化,一般是不会变化的,除了一些特殊情形。


  • 喷神
  • 文渣覆盖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我


  • 喷神
  • 文渣覆盖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这太难了


  • 也受过不少伤
  • 词组覆盖
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
牛


  • 520
  • 乱码
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
额外补充:
1. 添加和删除 android:sharedUserId 都会触发UID改变,造成无法安装
2. 在测试Nexus S with CyanogenMod Android 4.3 的过程中发现,升级失败后,原应用无法使用,使用的jni库无法加载。
2.1 原因是/data/data/<package_name>lib如链接到/data/app-lib/<package_name>-1, 但升级后,链接到/data/app-lib/<package_name>-2,同时这个目录不存在,所以无法正常启动。
2.2 重启手机后/data/app-lib/<package_name>-2会被重新建立,则应用可以正常工作。但/data/app-lib/<package_name>-1目录一直存在,即使在设置页面卸载应用,仍然存在。
2.3 在一次正常(成功)的升级过程中
/data/app-lib/<package_name>-1会被删除
链接/data/data/<package_name>lib到/data/app-lib/<package_name>-2
从APK中释放so到/data/app-lib/<package_name>-2
看起来好像执行的顺序有问题,在升级失败的时候,已经链接过去,但是lib库没有从APK中释放出来到/data/app-lib/<package_name>-2。造成升级失败,而且原来的应用也无法使用了。
(我去,本来写评论的,写成新答案了。补充一下结论就是 UID 一旦安装就不会改变。)


2025-05-21 22:19:22
广告
  • 贴吧用户_QM3GANG
  • 火单覆盖
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
额


  • 云
  • 超长覆盖
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
UID不符合UNAME


  • 璐村惂鐢ㄦ埛_7EbPt6D馃惥
  • 火单覆盖
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看不懂o.o


  • 只想去成全自己
  • 单字覆盖
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
當上吧主別忘了我的小吧


  • 贴吧用户_78UtS7U
  • 火单覆盖
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
红裤衩


  • 甜甜圈
  • 单字覆盖
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
厉害


2025-05-21 22:13:22
广告
  • 索隆的洋娃娃
  • 超长覆盖
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看哭了。太难了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 58回复贴,共2页
  • ,跳到 页  
<<返回覆盖吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示