centos sftp 多用户_AndroidAutomotive 多用户场景及管理

在具体讨论多用户之前,我们需要先弄清楚,车载是否需要引入多用户。对于大多数家庭来说,家中的一台车是会有很多人来开的,而将来如果中控功能更加智能化,娱乐化后,驾驶者花费在中控娱乐的时间会比现在( 现在的中控功能不忍直视) 多数倍 ,由此当然会涉及到隐私保护, 家长听的音乐,观看的视频不是孩子喜欢的,可能也不希望孩子看到,而孩子观看的视频类型同样不对家长胃口。而多用户的出现会完美解决该问题, 每个驾驶者开启发动机的那一刻,一切都是自己熟悉的味道。其他情况, 如果你的车借给朋友开,你可临时为他创建一个权限比较低的用户类型,既大方有面子,又保护了自己的隐私。对于公务或商务用车,隐私保密会更严格,更有需求,多用户更能完美解决该问题, 每个用户的数据资料都是相互隔离的,完美的办公环境,完美的隐私保护。我觉得车载比平板更需要多用户的支撑,更有实际应用的场景, 毕竟多数家庭只有一台车。 安卓从4.2 引入对多用户的支持,主要是应用在平板项目,到目前安卓10 版本,发展也算是比较成熟,在此不再多做描述,只大概说一下多用户的系统配置, 和常用的shell 命令。 开启安卓的多用户支持,只需要修改frameworks/base/core/res/res/values/config.xml 下面两个configconfig_multiuserMaximumUsers 和config_enableMultiUserUI

的值,其关联关系如下:

config_enableMultiUserUI = config_multiuserMaximumUsers>1 ?true : false 那我们如何通过命令切换当前的用户以及查看系统的用户情况, 可以参考如下命令( 默认我们用的安卓版本都在8.0 以上) :

指令

具体含义

adb shell am instrument --user

针对特定用户构建测试,主要是在写测试case的过程中用到

adb install --user

在特定用户下安装APK

adb uninstall --user

卸载指定用户下的APK

adb shell am get-current-user

获得当前用户ID

adb shell pm list users

罗列已经创建的所有用户

adb shell pm create-user

创建新用户,并返回用户ID

Android-Automotive的多用户基于安卓的常规多用户特性,不过具有自己的特性。Automotive支持以下三种用户类型:

Headless system user,直译为无头用户,意思是该系统用户持有所有系统服务,但不会跟使用者直接打交道,具有以下特性:

            一个车载系统只有一个Headless system user;

          Headlesssystem user必须运行于后台;

除了在开机向导的特殊情况,Headlesssystem user不会被使用者直接使用或者删除;

只可以被工厂擦除模式清楚。

不支持安卓多用户里面Profile的概念。

Regular users ,常规用户, 比如一个家庭一台车,有三个人使用, 每个人是一个常规用户 ,可以在系统中进行创建。这个基本功能跟安卓的次要用户相同,具有以下特性:

                    不会再后台运行;

                    可通过界面创建,开机默认会创建一个;

默认具有通话和短信的权限,和独立的应用数据,但会共享热点,蓝牙等系统设置。

Guest User,访客用户,跟安卓一般访客用户基本相同, 临时创建,基本用于朋友借车等场景

要想打开Android-Automotive的多用户功能,需要进行如下配置:

              添加android.hardware.type.automotive的系统配置;

              设置ro.fw.multiuser.headless_system_user为true;

              设置config_multiuserMaximumUsers大于1。

以上就是车载多用户在系统层面的配置,下面我们具体从代码逻辑看。在安卓开机过程中,当启动到PHASE_THIRD_PARTY_APPS_CAN_START(600)时,CarServiceHelperService的onBootPhase函数会被SystemServer通过startBootPhase函数回调。而车载多用户的逻辑主要就集中在setupAndStartUsers函数里面。

695cbdb45b2df42e37a01a8821e40185.png

在setupAndStartUsers首先会判断DevicePolicyManager  服务是否启动,这个代表automotive 期望的多用户的建立过程只会在开机过程中跑一次,如果在其他逻辑中初始化过多用户,那么就会直接返回。

af32d7ad0c603cd9a55c60bfb08e1f52.png

如果是烧写镜像后第一次开机,默认是会进入到图片中所选的判断条件,这时我们会通过createNewAdminUser创建Automotive的第一个管理用户,这个是次要用户的类型,但具有管理权限。如果创建成功,就会获得用户id,而此时只有用户的基本信息,但没有在系统中运行起来。

c8b45ecd0c3d2b0a14cf4ddf90f0e5d6.png

在真正运行创建的次要用户前, 系统会先去解锁系统用户。unlockSystemUser 里面对系统用户的逻辑很多, 但主要的作用是调用的startUserInBackground 来启用的UserHandle.USER_SYSTEM ,这个操作就表示我们的无头系统用户在这里创建完成。

1a0fe459cbbfd90609c1a6fa00426aca.png

8c9e251c22298020271979defe6f1bcb.png

而我们前面创建的次要用户,会通过startUserInForegroundWithListener启动运行, 这表示该用户是运行于前台的。至此Android-Automotive的多用户系统的系统用户和次要用户都创建和启动完成, 至于最终系统的桌面系统是在哪个用户里面启动,大家可以顺着这个逻辑继续追踪下去,其实从前面的描述大家也可以猜的到系统用户只会运行系统级别的服务,次要用户才是真正跟使用者打交道的HMI,相关APK当然会是由次要用户启动。同时大家需要注意这是系统创建的第一个常规用户, 后面其他常规用户和访客用户都可以由它创建。而其他常规用户不一定具有管理权限,视管理者是否授权。

414f2ccaa0275ea475476abe4b6f3cb6.png

Android-Automotive 的多用户探索旅程到此告一段落, 希望大家通过该文章对车载多用户有一个架构方面的认知, 如有具体细节问题, 也欢迎反馈给号主。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值