【Android】非System用户下Persist应用不自动拉起
非System用户下Persist应用不自动拉起
- Android版本:11、12。
背景
- 先说结论:Android在多用户场景下,系统不会启动非User 0(System)的Persist应用。
应用A配置了Persist应用,且无android:singleUser=true配置。但在多用户环境下,只启动了system(user 0)进程。
排查怀疑点
- pm list package --user userID: 查看应用A在对应的用户下是否安装
- /data/system/user/userID/package-restrcition.xml:查看应用A是否有异常信息。
排查上述两点问题后,发现应用A在对应的userID下已经安装。
- 尝试手动启动应用,发现可以启动。且手动kill后,可以被Aosp作为Persist应用重新拉起。
# 在User X下启动Service
am startservice --user X-n com.***.A/com.***.A.AService
# 在User X下启动Activity
am start --user X-n com.***.A/com.***.A.AActivity
问题原因
Aosp的多用户管理模块中UserController.java,非User 0(System)下,默认不会拉起Persist应用。
在finishUserUnlocked的函数中。判断了,只有UserID为USER_SYSTEM的,才会启动Persist类型且“android:directBootAware=false”的应用。
如何解决这个问题
- 监听开机广播、或者其他广播做自启动
- 或者尝试修改Aosp代码