一. 问题描述
1.1 问题JIRA
1.2 现象
手机无限重启,清数据后能开机,恢复数据的时候还是会无限重启.
1.3 结论
1.无限重启的原因:
由于每次开机AccessibilityManagerService都会去解析每个有辅助功能的app,system_server每次解析到千牛时就会crash,然后陷入无限循环.
2.恢复出厂设置后能开机,恢复数据时又无限重启:
恢复出厂设置后千牛会被卸载,开机时不会解析到它,所以能正常开机.恢复数据又会安装上千牛,安装上之后又会走到AccessibilityManagerService去解析千牛app,所以又会无限重启.
1.4导致问题的patch:
XXX
1.5修复链接:
XXX
二. 初步分析
2.1 查看system_server crash traces
03-25 15:38:07.968 1000 2311 2311 W ResourceType: Bad string block: string #6751 is not null-terminated
03-25 15:38:07.968 1000 2311 2311 W ResourceType: CREATING STRING CACHE OF 179048 bytes
03-25 15:38:07.968 1000 2311 2311 W ResourceType: Bad string block: string #6751 decoded length is not correct -1 vs 77
03-25 15:38:07.968 1000 2311 2311 D AndroidRuntime: Shutting down VM
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.USER_SWITCHED flg=0x50000010 (has extras) } in com.android.server.accessibility.AccessibilityManagerService$2@5f00bfc
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_51571(LoadedApk.java:1314)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.$m$0(Unknown Source:4)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.run(Unknown Source:0)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:789)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:98)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.os.Looper.loop(Looper.java:164)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:438)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:275)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:780)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: Caused by: java.lang.IndexOutOfBoundsException
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.content.res.StringBlock.nativeGetString(Native Method)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.content.res.StringBlock.get(StringBlock.java:82)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.content.res.AssetManager.getPooledStringForCookie(AssetManager.java:336)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:1274)
03-25 15:38:07.969 1000 2311 2311 E AndroidRuntime: at android.content.res.TypedArray.getValueAt(TypedArray.java:1260)
03-25 15:38:07.969 1000 2311 2311 E And