android7.0冻结开机动画无法进入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 up
 D/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::init
 I/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 connection
 I/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 Manager
 V/PackageManager( 3146): BuiltinPkg file :/system/etc/builtinapk
 I/PackageManager( 3146): Non-xml file /system/etc/permissions/extras in /system/etc/permissions directory, ignoring
 D/SELinuxMMAC( 3146): Couldn't find install policy /data/security/mac_permissions.xml
 D/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 Manager
 I/SystemServer( 3146): System Content Providers
 D/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 Policy
 I/SystemServer( 3146): Status Bar
 I/SystemServer( 3146): Clipboard Service
 I/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 Service
 I/SystemServer( 3146): Notification Manager

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

I/SystemServer( 3146): Device Storage Monitor

启动LocationManager:定位管理器服务

I/SystemServer( 3146): Location Manager

启动SearchService:定位搜索器服务

 I/SystemServer( 3146): Country Detector
 I/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 Service
 I/SystemServer( 3146): UI Mode Manager Service
 I/SystemServer( 3146): Backup Service

启动BackupService:备份管理服务

 I/SystemServer( 3146): Twilight Service
 I/SystemServer( 3146): UI Mode Manager Service
 I/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 Chains
 E/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 0
 I/LatinIME( 3315): Hardware accelerated drawing: false
 I/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开机流程改动较大


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容