当前位置: 首页 > news >正文

【趣谈】Android多用户导致的UserID、UID、shareUserId、UserHandle术语混乱讨论

【趣谈】Android多用户导致的UserID、UID、shareUserId、UserHandle术语混乱讨论

  • 备注
  • 一、概述
  • 二、概念对比
    • 1.UID
    • 2.shareUserId
    • 3.UserHandle
    • 4.UserID
  • 三、结论

备注

2025/07/02 星期三
在与Android打交道时总遇到UserID、UID、shareUserId、UserHandle这些术语,但是这些术语非常混乱,梳理总结一下

一、概述

Android是基于Linux内核实现的操作系统,因此直接复用了Linux为多用户隔离设计的文件权限来实现应用的沙盒隔离,在后续的更新中又引入了多用户的功能,就导致了一定的混乱。

二、概念对比

1.UID

Android的UID直接来自Linux内核的文件权限,Linux为每个用户赋予一个唯一的id值,称为user id,一般简称为uid,Android将每个应用(进程)视为一个Linux用户,由于不同应用的uid不同无法访问其他应用的文件就达到了沙盒隔离的效果。

2.shareUserId

作为应用开发者,我们有时候会希望打破Android的沙盒隔离,让多个应用可以互相访问,Android也提供了这样的功能,只需要在不同应用的AndroidManifest.xml文件中通过将android:sharedUserId设置为相同的值(类似对暗号),并且不同应用的开发者签名相同,不同应用即可获得相同uid从而打破沙盒隔离。由于历史原因,这里使用的是shareUserId而不是shareUID,但是实际上这里实现的是共享uid的操作。

3.UserHandle

Android多用户机制实际通过UserHandle类进行提供,主用户UserHandleID为0,其他用户(次要用户)ID值从10开始依次增长。我们可以通过与UserHandle相关的还有一个AppID的概念,简单来说就是相同包名的应用具有相同的AppID,Android通过用UID=UserHandleID*10000+AppID的方式实现了多用户运行相同应用的功能。

4.UserID

其实Android中并没有一个UserID的概念,UserID经常被混用为UID和UserHandleID,如果非要使用的话,其实更建议将UserID作为UID的字符串形式,因为当使用ps命令打印进程信息的时候我们看到的user一列显示的是root、system、u0_axx形式而不是数字值,这是因为Android在显示时进行了转换,也也更符合明确使用的android:shareUserId字段功能。

三、结论

Android使用Linux文件权限并引入多用户机制造成了一定的术语混乱,所以应该尽量减少存在争议术语UserID的使用,如果一定要使用更加建议将UserID当作UID的字符形式

http://www.dtcms.com/a/264569.html

相关文章:

  • Ubuntu主机FFmpeg推流+云服务器Django+WebSocket接收+Web显示
  • 【RTSP从零实践】6、实现最简单的同时传输H264、AAC的RTSP服务器
  • nignx+Tomcat+NFS负载均衡加共享储存服务脚本
  • 解决 Cannot create Swift scratch context
  • 【技术前沿:飞算JavaAI如何用AI引擎颠覆传统Java开发模式】
  • 洞若观火 - 运行时安全检测
  • Node.js、npm 与 nvm 使用全指南:安装、版本管理与开发环境配置详解
  • 运用逆元优化组合计算#数论
  • [HDLBits] Cs450/timer
  • 工业网络安全新范式——从风险可见性到量化防御的进化
  • 优雅草蜻蜓R实时音视频会议系统技术规划与全球RTC开源技术全景分析·优雅草卓伊凡|麻子|贝贝|clam
  • CentOS系统如何安装和使用docker
  • SpringSSM
  • NV113NV116美光固态闪存NV120NV130
  • 7月2日星期三今日早报简报微语报早读
  • 【一起来学AI大模型】通义千问API入门教程
  • NVIDIA智能汽车技术公开课笔记
  • 【Maven】Maven核心机制的 万字 深度解析
  • Oracle 证书等级介绍
  • Spring AI 源码
  • 全面的 Spring Boot 整合 RabbitMQ 的 `application.yml` 配置示例
  • 将文件使用base64存入数据库并在微信小程序中实现文件下载
  • springboot 显示打印加载bean耗时工具类
  • iOS App无源码安全加固实战:如何对成品IPA实现结构混淆与资源保护
  • python中两种策略模式的实现
  • 2-RuoYi-UI管理平台的启动
  • 大语言模型随意猜测网址引发网络安全危机
  • 零信任安全:重塑网络安全架构的革命性理念
  • 【Unity3D实现加载在线地图——WebGL】
  • 【ABAP】 从无到有 新建一个Webdynpro程序