Android UID 和 userID 以及 appID
我们知道Android 操作系统是基于Linux内核的,所以Android 的UID 是基于 Linux UID的。
Linux UID
Linux 本身就是一个多用户操作系统,每一个用户都会有一个UID,不同UID 之间的资源访问是受限的。
其中,Linux的DAC权限模型,控制的不同UID资源间的读、写、执行。也就是所谓的 “777” 权限。
d: 标识文件夹
r : 读权限
w:写权限
x : 执行权限

Android 平台就是利用基于 Linux 用户的保护机制识别和隔离应用资源,为此,Android 会为每个 Android 应用分配一个唯一的用户 ID (UID),并在自己的进程中运行。
例如,应用的内部存储,data/data/应用包名/ 正是此机制一个直接应用,每个应用都有一个单独的UID,无法对彼此数据的直接访问。

Android appID
在单用户时代, 每个package单独分配一个uid/gid来进行管理(共享uid/gid的除外)。而在支持多用户之后,同一个 app, 在不同的 android user 下运行时, 其 uid 是不同的。 因此,无法使用唯一的 uid 来标识一个 android package。所以引入了 appID 来标识一个 android package, appID 在安装时确定, 与运行状态无关, 因此, 在不同的 android user 下, 同一个 package 的 appID 是不变的。
如果默认不创建多个用户时,android 只有一个用户时 uid == appID
public static final int FIRST_APPLICATION_UID = 10000;public static final int LAST_APPLICATION_UID = 19999;size ==> 第几个安装。所以 最多安装9999 个应用appId = Process.FIRST_APPLICATION_UID + size;
Linux userID
Android在创建每个用户时,都会分配一个整型的 userID。对于主用户(正常下的默认用户)来说,userId为0,之后创建的userId将从10开始计算,每增加一个userId加1。
有了 appID 和 UserID之后,我们就可以通过组合它们来生成新的 UID,但是有两种情况。
如果默认不创建多个用户时,
UserID = 0
uid = appID
创建多用户时:
UserID = 10
uid = UserID * 100000 + appID
我们来看看 UserID 的规则代码
// frameworks/base/core/java/android/os/UserHandle.javapublic static int getUid(@UserIdInt int userId, @AppIdInt int appId) {if (MU_ENABLED && appId >= 0) {return userId * PER_USER_RANGE + (appId % PER_USER_RANGE);} else {return appId;}}public static @UserIdInt int getUserId(int uid) {if (MU_ENABLED) {// public static final int PER_USER_RANGE = 100000;return uid / PER_USER_RANGE;} else {return UserHandle.USER_SYSTEM;}}
相关文章:
Android UID 和 userID 以及 appID
我们知道Android 操作系统是基于Linux内核的,所以Android 的UID 是基于 Linux UID的。 Linux UID Linux 本身就是一个多用户操作系统,每一个用户都会有一个UID,不同UID 之间的资源访问是受限的。 其中,Linux的DAC权限模型&#…...
Kafka的三高设计原理
1.生产者缓存机制--高性能 生产者缓存机制的主要目的是将消息打包,减少网络IO频率 kafka生产者端存在消息累加器RecordAccumulator,它会对每个Partition维护一个双端队列,队列中消息到达一定数量后 或者 到达一定时间后,通过sen…...
生信圆桌x生信宝库:生物信息学资源与工具的终极指南
介绍 生物信息学作为现代生物科学的重要分支,涉及到大量的数据处理、分析和存储工作。随着领域的不断发展,各类生物信息学资源与工具也如雨后春笋般涌现。这些资源涵盖了从基因组数据、蛋白质结构到代谢路径的方方面面,极大地丰富了科研人员的…...
centos7 install rocketmq 宿主机快速搭建RocketMQ单机开发环境_centos7 单机部署rocketmq命令
2214 Jps 2071 BrokerStartup 1947 NamesrvStartup ### 第四步:发送消息测试消费着启动export NAMESRV_ADDRlocalhost:9876 ./tools.sh org.apache.rocketmq.example.quickstart.Consumer 发送测试消息export NAMESRV_ADDRlocalhost:9876 ./tools.sh org.apache.roc…...
2024高教社杯全国大学生数学建模竞赛(A题)深度剖析 _ 建模完整过程+详细思路+代码全解析
问题1解答过程 1.1 螺线运动的基本几何模型 板凳龙的舞动路径为等距螺线。螺线是极坐标中一类常见曲线,其特点是半径随角度线性增加。我们可以用以下极坐标方程描述这条螺线: r ( θ ) p 2 π θ r(\theta) \frac{p}{2\pi} \theta r(θ)2πpθ 其…...
What is Approximation Ratio?
Approximation Ratio 近似比率是用来衡量一个算法找到的近似解与最优解之间的差距的一个量化指标. 假设有一个优化问题,其最优解的值是OPT,用时间T,而我们的算法得到的解的值是ALG,用时间t。如果算法有一个2的近似比率,那么我们…...
探索Unity与C#的无限潜能:从新手到高手的编程之旅
在数字创意与技术创新交织的今天,Unity游戏引擎凭借其强大的跨平台能力和灵活的编程接口,成为了无数开发者心中的首选。而C#,作为Unity的官方脚本语言,更是以其面向对象的特性和丰富的库支持,为游戏开发注入了无限可能…...
初始MYSQL数据库(2)——创建、查询、更新、删除数据表的相关操作
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: MYSQL 前面我们学习了创建、删除数据库以及创建、查看、删除数据表的相关操作。 我们知道数据库中所存储的数据其实就是数据表中一条一条的记…...
OpenCV直方图计算
#include <opencv2/opencv.hpp> #include <vector>using namespace cv; using namespace std;int main() {cout << "直方图calcHist" << endl;Mat src imread("left.png", IMREAD_GRAYSCALE);if (src.empty()){cout << &qu…...
多线程篇(并发相关类- 原子操作类)(持续更新迭代)
目录 前言 一、原子变量操作类(AtomicLong为例) 1. 前言 2. 实例 二、JDK 8新增的原子操作类LongAdder 三、LongAccumulator类原理探究 前言 JUC包提供了一系列的原子性操作类,这些类都是使用非阻塞算法CAS实现的,相比使用…...
数学建模常用工具总结
数学建模常用工具总结 绘图篇pythonMATLABLIVEGAP CHARTSApache EChartsBioLadderHiplot Pro 生物医学可视化平台Graph EditorRAWGraphs 2.0ExcalidrawPPT绘图 配色篇Color SpaceAdobe Color 素材篇手绘素材插画网iconfont-阿里巴巴矢量图标库下面四个都是实物风格的素材&#…...
【Redis】为什么选择 Redis 做缓存?
近期文章: 【Redis】Redis 底层的数据结构(结合源码) 【MySQL】索引底层的数据结构 BTree 在系统开发中,我们经常会使用 Redis 作为缓存系统,但你知道为什么要使用缓存吗?为什么是使用 Redis 作为缓存呢&…...
Flutter 开发常用第三方库总结
Flutter 开发常用第三方库总结 常用库 常用库 屏幕适配flutter_screenutil加载 svg flutter_svg状态管理 flutter_bloc(bloc、equatable)、provider视频播放器chewie图片缓存cached_network_image网络请求 dio设备信息查询device_info_plus文件路径 pat…...
OpenCV中的颜色映射函数applyColorMap的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 OpenCV 中应用类似于 GNU Octave 或 MATLAB 中的颜色映射,虽然 OpenCV 中的颜色映射类型与 GNU Octave 或 MATLAB 中的颜色映射类型名…...
Ubuntu22.04安装colmap
首先上这里查看自己电脑GPU的CMAKE_CUDA_ARCHITECTURES 终端输入以下内容安装预先的前置依赖 sudo apt-get install \git cmake ninja-build build-essential \libboost-program-options-dev libboost-filesystem-dev \libboost-graph-dev libboost-system-dev libboost-tes…...
认识GO语言中的nil,零值与空结构体
go语言的初学者,特别是java开发者新学习go语言,对于一些和java类似但是又有差异的概念很容易混淆,比如说go中的零值,nil 和 空结构体。本文就来详细探讨一下go中这些特殊概念的含义和实际场景中的应用: 零值 零值&…...
Node.js sqlite3:Statement对象详解
在Node.js的sqlite3库中,Statement对象是一个非常重要的概念。它代表了一个预编译的SQL语句,可以多次执行以提高性能。通过使用Statement对象,你可以避免重复解析和编译SQL语句的开销,特别是在需要频繁执行相同SQL语句的情况下。本…...
ELK学习笔记——如何给Kibana新增用户和角色
Kibana新增用户和角色 首先用超管账号登录上Kibana,按照下面步骤操作 1、创建角色 按图操作 2、创建用户 按图操作 3、给用户分配角色 至此,角色和用户绑定成功; 最后,可以退出管理员账号,登录这个新…...
Minikube Install Kubernetes v1.18.1
文章目录 简介安装工具配置代理运行集群检查集群加入rancher 简介 模拟客户环境,测试 kubernetes v1.18.x 是否可以被 rancher v2.9.1 纳管。 安装工具 docker 安装Install and Set Up kubectl on Linux 安装 minikube 配置代理 docker proxylinux proxy 运行…...
重修设计模式-创建型-工厂模式
重修设计模式-创建型-工厂模式 一、概述 工厂模式(Factory Pattern)是设计模式中非常基础且常用的一种模式,主要目的是通过封装对象的创建过程,从而实现代码的解耦和灵活性的提升。 工厂模式的核心思想 封装对象的创建&#x…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
