Android中的uid

Android中的uid,第1张

uid 是user 用户id

Android 里的UID是基于应用程序,每一个程序都有一个UID,如果应用程序1和应用程序2的uid不同,则在default情况下,二者无法读取对方的数据,这样提升了应用的安全性。

当使用者安装了某一应用程序时,android系统就会赋予一个uid,用户可以在屏幕上的窗口里可以检视这个AndroidManifest.xml档案的内容,用户回了解这个应用程序的目的、权限等,并选择接受与不接受。

一些特殊情形下,两个应用程序是可以持有一样的UID。

例如,当需要推出新版本时,这两种版本的程序可以持有一样的UID, 才有权限将旧版程序的数据转移到新版软件里。

Pid 是 process 进程ID,Uid 是 user 用户ID,只是Android和计算机不一样。

计算机每个用户都具有一个Uid,而Android中每个程序都有一个Uid。

默认情况下,Android会给每个程序分配一个普通级别互不相同的 Uid,如果用互相调用,只能是Uid相同才行,这就使得共享数据具有了一定安全性。

每一个不同的 程序 都能有一个UId,但是一个应用里面可以有多个PId。

一个用户可以打开多个进程(Pid),并且这些进程的uid是一样的;

一个pid对应一个进程,每次打开时系统都会赋予不同的pid,但是uid是当你安装Apk时,系统赋予的,是不变的,除非你卸载了重装,又会重新赋予一个Uid;

参考: 认识Android的UID(Unix user ID)与权限

ANDROID 中UID与PID的作用与区别

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

不对,UID不是数字,PID才是,PID也没有你说的那种情况。应用程序的UID是app_#,#代表数字。而系统进程的UID是root或者system

连上android设备或者模拟器,进入adb shell,top就可以看到当前所有进程。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11912306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存