android7.0冻结开机动画无法进入Launcher

2023-11-08 13:08

本文主要是介绍android7.0冻结开机动画无法进入Launcher,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明:/data/system/users/0目录下面的文件应该是自动扫描更新的。正常开机的机器,删除此目录下的文件,重启后也会正常进入到Launcher。并不会引起不能进入Launcher情况。

问题排查用到的知识点

/data/system/users/0/package-restrictions.xml

这个文件存储了所有应用程序的运行状态,开机立即读取,经过系统行为的判断,如果系统必须启动的APP被禁用了,则不能启动系统,一直重复重复的某个环节


通过pm命令:
pm enable [–user USER_ID] PACKAGE_OR_COMPONENT恢复为激活状态
pm disable [–user USER_ID] PACKAGE_OR_COMPONENT修改为禁用状态
pm list packages -d查看禁用的列表 (返回的package name 的列表)
查package信息(打印出来的是清单文件信息)
dumpsys package 包名


/system/priv-app 系统app目录主要是底层app,如setting 、systemUI、TelephonyProvider

/system/app 系统app目录 ,主要是三方定制app,如launcher 、Email、Calendar

/data/app 普通应用,push apk至该目录,reboot设备PM会自动扫描安装该目录下的app,正常的用户安装也是把apk文件存储在这个目录下面

日志分析

主要看日志确定几个过程是否正常,找到问题可能的点

  • 系统是否启动即FW是否就绪
  • PMS扫描是否完成
  • launcher启动的intent是否发出
  • socket、AMS、zygote工作是否正常,launcher process是否start

没有找到intent,可能是launcher没有编译进去,如果编译进去了PackageManager是否完成扫描,没有扫描检查其他system/app或者/system/priv-app 有没有扫描

Android7.0检查setting是否被禁用,因为在Android 7.0中,启动过程中有了新的一步。一旦您的手机完全启动并且Android正在运行,就有一种方法可供开发人员在您登录前允许通信。其他所有内容都会被锁定,您无法与任何其他应用进行交互。谷歌甚至为需要立即运行的应用程序插入了一个名为“ Device Storage”的新存储区域,因为他们无法访问正常的凭据保护文件系统

Android系统正常启动流程主要Log

启动android第一个进程init,通过解析init.rc脚本,生成文件系统,启动vold、media、SurfaceFlinger等Nativie服务。在这个阶段你可以看到带“Android”文字静态logo和带“android”文字的开机动画

[    3.947876] init: /dev/hw_random not found

挂载文件系统,一些挂载出错,主要是原因是文件不存在

[    4.049219] EXT4-fs (actc): mounted filesystem with ordered data mode. Opts: noauto_da_alloc
[    4.070701] EXT4-fs (acte): mounted filesystem with ordered data mode. Opts: nodelalloc

启动守护进程installd服务:apk安装的服务

16:00:06.510 I/installd( 1342): installd firing up

启动volume服务:主要是用来管理usb/sd卡等外部存储设备。平台可以对外部存储设备进行操作和轮询状态,当外部存储设备状态发生变化时,volume 服务也会实时报告平台

  I/Vold    ( 1326): Vold 2.1 (the revenge) firing upD/Vold    ( 1326): Volume sdcard state changing -1 (Initializing) -> 0 (No-Media)

启动SurfaceFlinger服务:合成图像并显示到屏幕。启动该服务过程中会触发init启动一个bootanimation进程,其会开始启动动画显示,也就是我们看到的带“android”字样的启动动画

 I/SurfaceFlinger( 1333): SurfaceFlinger is starting
I/SurfaceFlinger( 1333): SurfaceFlinger's main thread ready to run. Initializing graphics H/W...

bootanimation进程启动,如前所述,会启动带“android”字样的动画,直到luncher界面以后会停止动画

E/BootAnimation( 1299): BootAnimation::music:boot

启动mediaserver服务:音视频多媒体服务,通过binder的进程间通信方式来完成其他进程(如音乐播放器)的请求

I/mediaserver( 1341): ServiceManager: 0xb7460418

启动AudioFlinger服务:由mediaserver服务启动,是Android音频系统的两大服务之一,AudioFlinger向下访问AudioHardware,实现输出音频数据,控制音频参数。同时,AudioFlinger向上通过IAudioFinger接口提供服务

I/AudioFlinger( 1341): Using default 3000 mSec as standby time.

系统初始化时会开启一个CameraService的守护进程,为上层应用提供camera对应的功能接口。并与与硬件抽象层之间通过回调函数传递数据

 I/CameraService( 1341): CameraService started (pid=1341)D/CameraService( 1341): CameraService::initI/CameraService( 1341): Loaded "Actions CameraHal Module" camera module

Zygote进程启动:
1.生成Dalvik虚拟机,运行java程序
2.将需要的类与资源加载到内存中,新运行的程序可直接使用这些资源,不必重新加载,加快了运行速度
3.生成SystemService进程,该进程用来生成运行Android平台需要的一些主要的java核心服务
4.生成新的android应用程序


将需要的类、资源(xml文件、图像等)加载到内存中

I/Zygote  ( 1335): Preloading classes...
E/cutils-trace( 1335): Error opening trace file: No such file or directory 
D/dalvikvm( 1335): GC_EXPLICIT freed 40K, 8% free 522K/564K, paused 0ms+0ms, total 3ms
D/dalvikvm( 1335): GC_EXPLICIT freed 5K, 3% free 601K/616K, paused 0ms+1ms, total 7ms
D/dalvikvm( 1335): Note: class Landroid/app/ActivityManagerNative; has 179 unimplemented (abstract) method
I/Zygote  ( 1335): ...preloaded 2777 classes in 4497ms.I/Zygote  ( 1335): Preloading resources...
W/Resources( 1335): Preloaded drawable resource #0x1080096 (android:drawable/toast_frame) that varies with configuration!!
W/Resources( 1335): Preloaded drawable resource #0x1080105 (android:drawable/btn_check_on_pressed_holo_light) that varies with configuration!!
W/Resources( 1335): Preloaded drawable resource #0x1080104 (android:drawable/btn_check_on_pressed_holo_dark) that varies with configuration!!
W/Resources( 1335): Preloaded drawable resource #0x1080102 (android:drawable/btn_check_on_holo_light) that varies with configuration!!

启动SystemServer进程,该进程会启动电源管理器、Activity管理器、窗口管理器等java核心服务

I/SystemServer( 3146): Entered the Android system server!

启动PowerManagerService:电源管理服务

 D/Sensors ( 3146): AccelerationSensor::AccelerationSensor()D/Sensors ( 3146): AccelerationSensor::~enable(0, 0)I/Installer( 3146): connecting...I/installd( 1342): new connectionI/SystemServer( 3146): Power Manager

启动ActivityManagerService:创建Activity管理器的服务

I/SystemServer( 3146): Activity Manager

启动DisplayManagerService:显示管理服务

I/SystemServer( 3146): Display Manager

启动PackageManagerService:包管理器服务。遍历/system/priv-app、/system/app等目录下的apk的权限和安装信息等

 I/SystemServer( 3146): Package ManagerV/PackageManager( 3146): BuiltinPkg file :/system/etc/builtinapkI/PackageManager( 3146): Non-xml file /system/etc/permissions/extras in /system/etc/permissions directory, ignoringD/SELinuxMMAC( 3146): Couldn't find install policy /data/security/mac_permissions.xmlD/SELinuxMMAC( 3146): Using install policy file /system/etc/security/mac_permissions.xml

启动UserManagerService:用户管理服务

I/SystemServer( 3146): User Service
I/SystemServer( 3146): Account Manager

启动LightsService:光系统管理服务

 I/SystemServer( 3146): Content ManagerI/SystemServer( 3146): System Content ProvidersD/lights  ( 3146): #######open_lights  (backlight)######D/lights  ( 3146): #######open_lights  (backlight) OK######I/SystemServer( 3146): Lights Service

启动BatteryService:电池服务

 I/SystemServer( 3146): Battery Service

启动VibratorService:振动器系统管理服务

I/SystemServer( 3146): Vibrator Service

启动AlarmManagerService:定时器服务

[  33.765371] request_suspend_state: wakeup (3->0) at 33747188755
E/ConsumerIrService( 3146): Can't open consumer IR HW Module, error: -2
I/SystemServer( 3146): Alarm Manager

启动InputManagerService:输入子系统管理服务

I/SystemServer( 3146): Init Watchdog
I/SystemServer( 3146): Input Manager

启动WindowManagerService:窗口管理服务

I/InputManager( 3146): Initializing input manager, mUseDevInputEventForAudioJack=false
I/SystemServer( 3146): Window Manager

启动BluetoothManagerService:蓝牙服务

I/WindowManager( 3146): No existing display settings /data/system/display_settings.xml; starting empty
I/WindowManager( 3146): No keyguard interface!
D/BluetoothManagerService( 3146): Loading stored name and address
I/SystemServer( 3146): Bluetooth Manager Service

启动AccessibilityManager:

I/SystemServer( 3146): Input Method Service
D/EventHub( 3146): No input device configuration file found for device 'gslX680'.
I/SystemServer( 3146): Accessibility Manager

启动MountService:管理sd挂载服务

I/ActivityManager( 3146): Config changes=1df8 {1.0 ?mcc?mnc zh_CN ldltr sw480dp w800dp h480dp 160dpi lrg long
I/SystemServer( 3146): Mount Service

启动LockSettingsService:管理锁屏的服务

I/SystemServer( 3146): LockSettingsService

启动NetworkManagementService:网络管理服务

 I/SystemServer( 3146): Device PolicyI/SystemServer( 3146): Status BarI/SystemServer( 3146): Clipboard ServiceI/SystemServer( 3146): NetworkManagement Service

启动NetworkStatsService:网络状态服务

I/SystemServer( 3146): NetworkStats Service

启动NetworkPolicyService:网络策略服务

W/MountService( 3146): getSecureContainerList() called when storage not mounted
I/SystemServer( 3146): NetworkPolicy Service

启动WifiP2pService:管理P2P连接服务

I/SystemServer( 3146): Wi-Fi P2pService

启动WifiService:wifi管理服务

D/WifiHW  ( 3146): Unable to unload driver module "wlan_kk": No such file or directory
D/EthernetService( 3146): EthernetService construct starting
E/Netd    ( 1330): Failed to open /proc/sys/net/ipv6/conf/eth0/disable_ipv6: No such file or directory
F/SystemServer( 1627): java.lang.SecurityException: Unable to find app for caller android.app.ActivityThread$ApplicationThread@41924790 (pid=1627) when registering receiver android.app.LoadedApk$ReceiverDispatcher$InnerReceiver@41a2ed50

启动EtherhetService:wifi管理服务

I/SystemServer( 3146): Ethernet Service

启动ConnectivityService:数据连接管理服务

D/ethernet( 3146): Unable to unload driver module "asix": No such file or directory
I/SystemServer( 3146): Connectivity Service

启动NotificationManager:通知管理器服务

 I/SystemServer( 3146): UpdateLock ServiceI/SystemServer( 3146): Notification Manager

启动DeviceStorageMonitorService:设备存储监视服务

I/SystemServer( 3146): Device Storage Monitor

启动LocationManager:定位管理器服务

I/SystemServer( 3146): Location Manager

启动SearchService:定位搜索器服务

 I/SystemServer( 3146): Country DetectorI/SystemServer( 3146): Search Service

启动WallpaperService壁纸管理服务

 I/SystemServer( 3146): Wallpaper Service

启动AudioService:音频管理服务

I/SystemServer( 3146): Audio Service

启动UsbService:usb管理服务

E/UsbDeviceManager( 3146): failed to write to /sys/class/android_usb/android0/f_rndis/ethaddr
I/SystemServer( 3146): Serial Service

启动SerialService:串口管理服务

 I/SystemServer( 3146): Twilight ServiceI/SystemServer( 3146): UI Mode Manager ServiceI/SystemServer( 3146): Backup Service

启动BackupService:备份管理服务

 I/SystemServer( 3146): Twilight ServiceI/SystemServer( 3146): UI Mode Manager ServiceI/SystemServer( 3146): Backup Service

启动AppWidgetService:桌面管理服务

I/SystemServer( 3146): AppWidget Service

启动PrintService:打印管理服务

I/SystemServer( 3146): Print Service

启动KeyguardService服务管理锁屏

V/KeyguardService( 3198): onCreate()

启动SystemUIService服务,管理StatusBar(状态栏)、NavigationBar(导航栏)

 I/fsck_msdos( 1326): ** Phase 2 - Check Cluster ChainsE/ActionOMXPlugin( 1341): In ActionOMXPlugin: libOMX_Core.so is openning!E/ActionOMXPlugin( 1341): In ActionOMXPlugin: libAction_OMX_Core.so is openning!D/SystemUIService( 3198): loading: class

FW启动完毕(也就是ready之后),启动launcher,android动画结束,进入home界面

 I/ActivityManager( 3146): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher} from pid 0I/LatinIME( 3315): Hardware accelerated drawing: falseI/ActivityManager( 3146): Start proc com.android.launcher for activity com.android.launcher/com.android.launcher2.Launcher: pid=3371 uid=10013 gids={50013}


关于Android7.0 DirectBoot功能

Android7.0下的DirectBoot模式特点

  • 存储空间

1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用。

2.Device encrypted storage,主要对应的就是Direct Boot使用的存储空间。在Direct Boot模式下和用户解锁手机后都可以使用的存储空间

  • 应用运行

Direct Boot模式下app是无法运行的

要运行的话需要在AndroidManinfest.xml中设置 android:directBootAware="true"

  • Launcher启动变化
  1. launcher需要通过FallbackHome启动, FallbackHome是settings中的一个透明activity,settings的android:directBootAware为true

     

    透明activity

但是要注意:
一些定制的系统可能限制用户自由使用settings功能,会通过代码禁用settings,因此会导致Android7.0上无法启动launcher,具体表现为找不到intent(No home screen found for ),系统启动之后一直停留在开机动画,没有其他的任何错误日志


  1. Launcher非directBootAware应用,PMS中的限制导致此时无法启动Launcher

将Launcher标记为directBootAware应用会导致开机后Launcher crash。因为Launcher中的widget仍旧是非directBootAware的,此时仍旧无法启动,除非将widget相关的APP都标记为directBootAware


3.launcher启动流程增加了settings--->FallbackHome--->launcher,比较与Android6.0耗时更多

FallbackHome源码

FallbackHome时注册ACTION_USER_UNLOCKED广播,然后进行判断用户是否都已经解锁,如果没有就结束执行。之后就会等待接收ACTION_USER_UNLOCKED广播,继续判断用户是否已经解锁,如果此时已经解锁,就找Home界面,如果没有找到就发延迟消息500ms再找一次,如果找到Launcher就会将FallbackHome finish掉

PMS依赖手机当前的状态,需要user解锁才能正常查询。如果强制修改,不考虑DirectBoot和当前启动状态,即使当前user未解锁,依然可以查询符合条件的component,修改后会有无法开机的现象。因为Launcher不是directBootAware的,当前手机user尚未解锁,涉及存储相关的解锁也未进行

开机绕过FallbackHome涉及的修改面很多,并非通过修改APP或PMS可以实现,还涉及存储区域解锁以及用户状态和ACTION_USER_UNLOCKED广播的修改,对AOSP开机流程改动较大

这篇关于android7.0冻结开机动画无法进入Launcher的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/370048

相关文章

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

如何解决yum无法安装epel-release的问题

《如何解决yum无法安装epel-release的问题》:本文主要介绍如何解决yum无法安装epel-release的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录yum无法安装epel-release尝试了第一种方法第二种方法(我就是用这种方法解决的)总结yum

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Python的pip在命令行无法使用问题的解决方法

《Python的pip在命令行无法使用问题的解决方法》PIP是通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载、更新等功能,安装诸如Pygame、Pymysql等Pyt... 目录前言一. pip是什么?二. 为什么无法使用?1. 当我们在命令行输入指令并回车时,一般主要是出现以