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是另外一种权限控制,不要搞混淆了。
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是另外一种权限控制,不要搞混淆了。