Android 多用户详情

目录
  • Android 多用户
    • 一、Linux 用户和组

Android 多用户

一、Linux 用户和组

Linux作为一个多用户的操作系统,每个用户在机器上都有一个私有空间,特别是它会拥有配额的磁盘空间,以存储文件、接收私有的mail消息等。Linux必须保证这部分私有空间只对它的拥有者是可见的(类似于银行账户,当然只能对于储户自己可见啦),而且应该确保没有用户可以使用系统应用程序来侵犯其他用户的私有空间(当然也就是不能让别人随便来动我银行账户的资金啦)。

在Linux操作系统中,所有的用户都是通过唯一的用户ID(UID->User ID)来识别的。但是如果选择与其他用户共享资料,共享的用户就应该是一个或者多个组的成员,这个用组ID(GID->group ID)来识别(几个人出钱成立了一个小公司,这个公司名就是GID,我们的钱就是共享的资源,大家都可以使用和可见)。每个文件都可与一个确切的组相关联。如:作为文件拥有者的用户对该文件的读写权限,而组中其他用户则只拥有读权限,系统内非组中的用户则没有任何权限(不可读不可写不可执行)。

1、超级用户:

在Linux系统中,有一个特殊的用户->超级用户(root),root用户几乎可以在Linux系统中做任何事情,因为OS没有对它采取一般的防护机制,root用户可以访问系统上的每个文件,可以管理每一个正在运行的用户程序。

2、普通用户和超级用户的切换

在Linux命令行输入命令:su -,然后输入root用户的密码即可切换至root用户,但是建议一般情况下,不要随意使用root用户,因为root用户操作失误会导致系统文件丢失甚至系统崩溃。

在传统计算机上,UID是跟随着「人」(例如计算机的使用者或用户)。Android里的UID是跟随着「软件」(例如Android应用程序)。
由于每个应用程序都有个UID,只有带着此UID,才能存取该UID所涵盖的有关资料。所以如果AP-1与AP-2的UID不同,则在预设(Default)情况下,双方都无法读取对方的数据。这种分而治之的方式,可以减轻黑客软件的恶意伤害数据,提升手机的安全性。
当手机使用者(即User)下载你(即开发者)的应用程序,在安装(Install)时,Android就会给予一个UID。这个UID可连结到该应用程序的 AndroidManifest.xml档案的内容。所以User在安装你的应用程序时,在屏幕上的窗口里可以检视这个AndroidManifest.xml档案的内容。在检视时,用户会看到你对应用程序的目的、权限等说明。当你接受这支程序的意图、权限说明之后,Android就安装它,并给它一个UID。万一在你的应用程序执行期间有越轨(企图做出非权限范围)的行为时,用户将会得到Android的警告讯息。
有一些特殊情形下,两支应用程序是可以持有一样的UID。例如,同一位开发者撰写的应用程序,常常需要推出新版本,这两种版本的程序可以持有一样的UID, 才有权限去将旧版程序所产生的数据拷贝转移到新版软件里。

Pid是进程IDUid是用户ID,只是Android和计算机不一样,计算机每个用户都具有一个Uid,哪个用户start的程序,这个程序的Uid就是那个用户,而Android中每个程序都有一个Uid,默认情况下,Android会给每个程序分配一个普通级别互不相同的 Uid,如果应用之间要互相调用,只能是Uid相同才行,这就使得共享数据具有了一定安全性,每个软件之间是不能随意获得数据的。而同一个application 只有一个Uid,所以application下的Activity之间不存在访问权限的问题。

关于APPID UID userid,在单用户的情况下,appid 就是Uid,在多用户的时候通过appid 和userid 重新计算新的uid

public static int getUid(@UserIdInt int userId, @AppIdInt int appId) {
    if (MU_ENABLED) {

        return userId * PER_USER_RANGE + (appId % PER_USER_RANGE);
    } else {
        return appId;
    }
}

UserHandle包含三种概念:userid,uid,appid

  • userid:就是有多少个实际的用户罗,例如老爸很穷,要跟儿子共用一台手机,那可以跟手机将两个用户,user 0和user 1。两个用户的应用和数据是独立的。
  • uid:跟应用进程相关。除了sharduid的应用,每个用户的每个应用的uid不一样的。用户0的应用的uid从一万开始算。
  • appid:跟app相关,包名相同的appid都一样。即使是不同用户。例如你和儿子都在这台手机装了微信,但这两个微信的appid是一样的。
appid 的范围是
public static final int FIRST_APPLICATION_UID = 10000;

/**
 * Last of application-specific UIDs starting at
 * {@link #FIRST_APPLICATION_UID}.
 */
public static final int LAST_APPLICATION_UID = 19999;

对于用户组的进程来说,似于u0_a86这样的UID。这个UID的前一部分表示userId,后一部分表示appId(减去Process.FIRST_APPLICATION_UID的结果)。

   //uid 不能超出限制。Android 对 UID 进行了分类,应用 APK 所在进程的 UID 从 10000 开始,
    //而系统 APK 所在进程小于 10000

到此这篇关于Android 多用户详情的文章就介绍到这了,更多相关Android 多用户内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android权限如何禁止以及友好提示用户开通必要权限详解

    Android权限 Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用.操作系统或用户有不利影响的任何操作.这包括读写用户的私有数据(联系人,短信,相册,位置).读写其他应用的文件.执行网络访问.使设备保持唤醒状态等等. 如果是一些正常的权限(非高危权限),比如网络访问等在应用清单文件(AndroidManifest.xml)中配置,系统会自动授予, 但是如果有一些高危权限,位置,文件存储,短信等这个时候系统会要求用户授予权限,Android 发出权限请求的方式取决于系统版

  • android实现记住用户名和密码以及自动登录

    毕业刚开始上班接触的第一个项目移动护士站,接到了第一任务就是登录,要用到自动登录功能,所以在这做个记录,以后用的时候直接来粘贴复制,废话少说,直奔主题 先上一下效果图,由于只是实现功能,界面没有美化,见谅 由于xml文件内容,就不展现在这了,自己写一写就好,爸妈再也不用担心我的学习了,so easy package com.sdufe.login; import android.app.Activity; import android.content.Context; import androi

  • Android EditText 监听用户输入完成的实例

    我们都知道, Android EditText输入框,并没有监听用户输入完成的功能,需要我们自己实现. 下面是实现的方法,仅供参考: EditText editText = (EditText) findViewById(R.id.edit); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, i

  • Android基于AlarmManager实现用户在线心跳功能示例

    本文实例讲述了Android基于AlarmManager实现用户在线心跳功能.分享给大家供大家参考,具体如下: 在做即时通信或者其他检测是否在线等操作时要用到心跳.比较常用的是AlarmManager全局定时器 去实现. AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.其实它的作用和Timer有点相似.都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个

  • Android实现用户圆形头像和模糊背景

    本文实例为大家分享了Android实现用户圆形头像和模糊背景的具体代码,供大家参考,具体内容如下 1.效果展示 2.在build.gradle(Module)中的dependencies里面加入下面依赖 注意:glide依赖的版本 //图片加载框架 implementation 'jp.wasabeef:glide-transformations:2.0.2' //图片模糊效果 compile 'com.github.bumptech.glide:glide:3.7.0' //圆形头像 impl

  • Android 用户Session管理的设计方案

    相信大家都知道,每一个App都需要登录,登录信息都保存在本地文件中,然后我们就写一堆的操作SharedPreferences的代码了. 现在,你可以完全抛弃这种方法,一句代码搞定登录信息,用户信息管理.实现全局操作.为你的程序解耦. public void sessionDemo() { // 获取登录信息 TokenInfo token = SessionManager.getDefault().getUserToken(); // 获取用户信息 UserInfo userInfo = Ses

  • Android启动页用户相关政策弹框的实现代码

    现在Android上架各大平台都要求App首页添加一个弹框,显示用户协议以及一些隐私政策,不然上架各大平台,现在就来简单的实现一下这个对话框 既然是一个对话框,那我们就先来简单的封装一个对话框,这样方便后续的一些修改: widget_user_dialog.xml <?xml version="1.0" encoding="utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:an

  • Android 如何拦截用户频繁操作(点击事件)

    目录 前言 解决方案 场景1 场景2 总结 前言 在 Android 界面开发中,频繁操作是一个需要注意的点. 频繁操作: 频繁点击一个按钮,或者同时点击多个item,等产生的冲突情况. 解决方案 场景1 假设在 Activiyt A 界面有一个 按钮 T ,点击T 将跳转到 Activity B. void handleClick(){ Intent intent = new Intent(ActivityA.this,ActivityB.class); startActivity(inten

  • android10 隐藏SystemUI锁屏下的多用户图标的示例代码

    需求:如上图,需要隐藏右上角的多用户蓝色图标. 修改后结果如下: 锁屏相关的布局在SystemUI frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java //更新多用户图标的可见性 private void updateVisibilities() { if (mMultiUserSwitch.getParent() != mStatusIconA

  • Android百度地图定位、显示用户当前位置

    本文实例为大家分享了Android百度地图定位.显示用户当前位置的工具类,供大家参考,具体内容如下 1.构建定位Option的工具类 import com.baidu.location.LocationClientOption; /** * 建造 LocationClientOption 项 * * @author peter 2018-12-21 10:58 */ public class LocationClientOptionBuilder { private LocationClient

  • Android实现简单用户注册案例

    本文实例为大家分享了Android实现简单用户注册的具体代码,供大家参考,具体内容如下 目标: 设计一个用户注册案例.在主界面中对输入的手机号.密码.性别.爱好和城市后,可以在界面二中进行显示. 提示: 1.页面布局的元素用到TextView.EditText.Button.RadioButton.CheckBox.Spinner: 2.通过intent实现主界面跳转到界面二 3.涉及传递多个的数据时,使用Bundle对象作为容器,通过调用Bundle的putString先将数据存储到Bundl

  • Android模拟用户点击的实现方法

    前言 Android模拟用户点击.在自动化测试中可使用的工具. 可以利用adb命令,也可以使用Android SDK中的monkeyrunner工具. win7-64 gitbash 使用adb命令 主要使用input命令 usage: input ... input text <string> input keyevent <key code number or name> input tap <x> <y> input swipe <x1>

  • 详解Android Studio实现用户登陆界面demo(xml实现)

    使用Android Studio 编写的第一个demo,使用布局文件-xml实现用户登录界面 注:所建工程均为Android 6.0 所以只要是Android 6.0(包括6.0)以上的真机,模拟机都可以使用 Step1:Android Studio 开发环境的搭建: 1.安装JDK (1.8): 2.安装Android studio (3.3.1) 包含 gradle.sdk manage .avd manage : 3.使用sdk manage 下载安装 sdk: 4.使用avd manag

随机推荐