admin管理员组

文章数量:1534198

今天我们聊聊framework分析中遇到的问题。
针对网上关于framework问题分析及修改资料相对较少,尤其实际工作中遇到问题及解决少之又少。现在好多厂商framework模块开发基本都是系统问题分析定位,大部分都是三方稳定性问题,实际工作中framework问题分析及修改案例比较少。
自己在2020-2021年中在某厂商工作中,framework模块问题分析定位中遇到的几个实际问题及修改策略。

1.相机不显示优先保存到SD卡功能/插入SD卡电脑端不显示SD卡/图库里不显示SD卡里的图片和视频
adoptable_storage 被移除了,涉及文件系统。

StorageManagerService的onVolumeCreated方法传进来的DiskId对应disk信息flags 未包含 ADOPTABLE,导致。
代码分析:
StorageManagerService的onVolumeCreated 方法未vol.mountFlags

if ((isX10 || isX100) && vol.disk.isSd()) {
        vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE;
 }

StorageVolume的mState属性变化
VolumeInfo的静态代码块MEDIA_MOUNTED动作
内部类StorageManagerServiceHandler的H_VOLUME_BROADCAST 发广播

adb shell pm list features | grep android.software.adoptable_storage

查看版本前后的dumpsys mount;

旧版本:

目前分析进展:StorageManagerService的mount方法 log中mountFlags=0 标志位导致,正常mountFlags=VISIBLE

SDCard 挂载和卸载,4/2之前的版本是发广播的MEDIA_MOUNTED|MEDIA_UNMOUNTED ,导致camera app 收不到挂载/卸载广播出现问题。

2.打开糖豆,拍摄视频,选择任意道具,无效果。
1.分析对比log:

正常log:
03-16 17:28:30.406  7050 18557 D TDDecoder: deviceBrand=*******,deviceModel=GM1910,cpuName=Qualcomm Technologies, Inc SM8150,mIsUseSoftCodec=true
03-16 17:28:30.431  7050 18557 D TDAVEditor: Decoder::init use soft codec, isUseSoftCodec:1, codec_id:28
03-16 17:28:30.432  7050 18557 I TDAVEditor: TDDecoderJni: createDecoder() success handle=30.
异常log:
03-15 16:49:27.371 10240 28552 32423 D TDDecoder: deviceBrand=*******,deviceModel=DE2118,cpuName=qcom,mIsUseSoftCodec=false
03-15 16:49:27.394 10240 28552 32423 D TDAVEditor: Decoder::init find decoder: h264_mediacodec
03-15 16:49:27.394 10240 28552 32423 D TDAVEditor: Decoder::init use hw codec, isUseSoftCodec:0, codec_id:28
03-15 16:49:27.602 10240 28552 32423 E IJKMEDIA: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
03-15 16:49:27.604 10240 28552 32423 E TDAVEditor: Decoder::init failed, Could not open codec

2.通过反编译代码,发现数组中未有当前产品CPU name,导致使用默认硬解码。
3.查看cpu name

adb shell cat /proc/cpuinfo | findstr Hardware 

当前产品的cpuinfo中hardware未配置,获取当前产品的cpu Name名字不包含在应用自定义常量数组中,默认使用安卓硬解码,解码错误导致。应该配置hardware,和对比产品一致,包含cpu Name使用软件解码。
修改代码,在此代码中增加:
arch/arm64/kernel/cpuinfo.c

seq_puts(m, "Hardware\t: Qualcomm Technologies, Inc SM4350\n");

3.进入信息会话界面点击暗色模式,信息无响应。
起XXDialtactsActivity界面异常导致,窗口失去焦点。

//起XXDialtactsActivity
03-16 08:41:27.008  1693  2066 I ActivityManager: Start proc 25341:com.*******.dialer/u0a198 for pre-top-activity {com.*******.dialer/com.android.dialer.*******.activity.XXDialtactsActivity}
//XXDialtactsActivity.onCreate异常导致
03-16 08:41:27.788 25341 25341 W Bundle  : Attempt to cast generated internal exception:
03-16 08:41:27.788 25341 25341 W Bundle  : java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
03-16 08:41:27.788 25341 25341 W Bundle  :  at android.os.BaseBundle.getString(BaseBundle.java:1199)
03-16 08:41:27.788 25341 25341 W Bundle  :  at a.c.d.u0.o.e.onCreate(SourceFile:14)
03-16 08:41:27.788 25341 25341 W Bundle  :  at androidx.fragment.app.Fragment.performCreate(SourceFile:5)
03-16 08:41:27.788 25341 25341 W Bundle  :  at d.n.a.j.a(SourceFile:189)
03-16 08:41:27.788 25341 25341 W Bundle  :  at d.n.a.j.h(SourceFile:7)
03-16 08:41:27.788 25341 25341 W Bundle  :  at d.n.a.j.a(SourceFile:327)
03-16 08:41:27.788 25341 25341 W Bundle  :  at d.n.a.j.b(SourceFile:37)
03-16 08:41:27.788 25341 25341 W Bundle  :  at d.n.a.j.i(SourceFile:8)
03-16 08:41:27.788 25341 25341 W Bundle  :  at d.n.a.d.onCreate(SourceFile:25)
03-16 08:41:27.788 25341 25341 W Bundle  :  at d.c.k.k.onCreate(SourceFile:3)
03-16 08:41:27.788 25341 25341 W Bundle  :  at a.c.d.p1.n.onCreate(SourceFile:1)
03-16 08:41:27.788 25341 25341 W Bundle  :  at com.android.dialer.*******.activity.XXDialtactsActivity.onCreate(SourceFile:4)
03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.Activity.performCreate(Activity.java:8006)
03-16 08:41:27.788 25341 25341 W Bundle  : at android.app.Activity.performCreate(Activity.java:7990)
03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3589)03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3780)03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2251)
03-16 08:41:27.788 25341 25341 W Bundle  :  at android.os.Handler.dispatchMessage(Handler.java:106)
03-16 08:41:27.788 25341 25341 W Bundle  :  at android.os.Looper.loop(Looper.java:233)
03-16 08:41:27.788 25341 25341 W Bundle  :  at android.app.ActivityThread.main(ActivityThread.java:8063)
03-16 08:41:27.788 25341 25341 W Bundle  :  at java.lang.reflect.Method.invoke(Native Method)
03-16 08:41:27.788 25341 25341 W Bundle  :  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
03-16 08:41:27.788 25341 25341 W Bundle  :  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
//window最早失去焦点,XXDialtactsActivity 没有窗口有焦点
03-16 08:41:28.294  1693  2293 W InputDispatcher: Waiting because no window has focus but ActivityRecord{3db5459 u0 com.*******.dialer/com.android.dialer.*******.activity.XXDialtactsActivity t99} may eventually add a window when it finishes starting up. Will wait for 5000ms
03-16 08:41:28.295  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 4996ms
03- 16 08:42:38.821  1693  2293 D InputDispatcher: Waiting to send key to Window{89b3a u0 com.*******.mms/com.android.mms.ui.conversation.ConversationActivity} because there are unprocessed events that may cause focus to change
03-16 08:42:48.314  1693  2046 I WindowManager: Screen frozen for +899ms due to Window{faad4b5 u0 NavigationBar0}
03-16 08:43:06.523  1693 26869 I ActivityManager: Dumping to /data/anr/anr_2021-03-16-08-43-06-523
03-16 08:43:06.523  1693 26869 I ActivityManager: Collecting stacks for pid 26414
03-16 08:43:15.910  1693  2293 E InputDispatcher: Dropping KEY event because there is no focused window
03-16 08:43:15.910  1693  2293 W InputDispatcher: Asynchronous input event injection failed.
03-16 08:43:16.000  1693  2293 W InputDispatcher: Waiting because no window has focus but ActivityRecord{e9ccc15 u0 com.*******.mms/com.android.mms.ui.conversation.ConversationActivity t120} may eventually add a window when it finishes starting up. Will wait for 5000ms
03-16 08:43:16.000  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 4999ms
03-16 08:43:18.955  1693 26869 E ActivityManager: ANR in com.*******.mms (com.*******.mms/com.android.mms.ui.conversation.ConversationActivity)
03-16 08:43:18.955  1693 26869 E ActivityManager: PID: 26414
03-16 08:43:18.955  1693 26869 E ActivityManager: Reason: Input dispatching timed out (ActivityRecord{e9ccc15 u0 com.*******.mms/com.android.mms.ui.conversation.ConversationActivity t120} does not have a focused window)
03-16 08:43:18.955  1693 26869 E ActivityManager: Parent: com.*******.mms/com.android.mms.ui.conversation.ConversationActivity

4.qq飞车内置直播观看中接通微信视频电话挂断后需要重新登录QQ飞车
日志分析:

//30016进程低内存被lmkd杀,需要优化组分析
03-05 18:00:18.772  1000  1643  2001 I ActivityManager: Start proc 30016:com.tencent.tmgp.speedmobile:tgaPlugin/u0a244 for service {com.tencent.tmgp.speedmobile/com.tencent.tga.livesdk.service.plugin.PluginProcessService}
03-05 18:00:54.079  1000  1643  5986 I ActivityTaskManager: The Process com.tencent.tmgp.speedmobile:tgaPlugin Already Exists in BG. So sending its PID: 30016
03-05 18:03:51.256  lmkd   584   584 I killinfo: [30016,10244,905,701,123788,-1,3566252,85004,714628,40744,1468,25188,66576,2150396,750736,362332,362872,313140,312840,75724,282312,58240,106496,0,0,472,528]
//30016进程不存在
03-05 18:03:51.378  1000  1643  7228 I ActivityManager: Process com.tencent.tmgp.speedmobile:tgaPlugin (pid 30016) has died: cch+5 CEM 
03-05 18:03:51.557  1000  1643  1974 W WindowManager: Failed to schedule DisplayAdjustmentsItem to ProcessRecord{49bb9aa 30016:com.tencent.tmgp.speedmobile:tgaPlugin/u0a244}
03-05 18:03:51.557  1000  1643  1974 W WindowManager: android.os.DeadObjectException
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at IApplicationThread$Stub$Proxy.scheduleTransaction(IApplicationThread.java:2579)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at android.app.servertransaction.ClientTransaction.schedule(ClientTransaction.java:136)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.ClientLifecycleManager.scheduleTransaction(ClientLifecycleManager.java:47)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.ClientLifecycleManager.scheduleTransaction(ClientLifecycleManager.java:100)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.WindowToken.notifyFixedRotationTransform(WindowToken.java:670)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.WindowToken.finishFixedRotationTransform(WindowToken.java:636)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.DisplayContent.applyRotationAndFinishFixedRotation(DisplayContent.java:5815)
03-05 18:03:51.557  100android.os.BinderProxy.transactNative(Native Method)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at android.os.BinderProxy.transact(BinderProxy.java:591)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at android.app.
IApplicationThread$Stub$Proxy.scheduleTransaction(IApplicationThread.java:2579)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at android.app.servertransaction.ClientTransaction.schedule(ClientTransaction.java:136)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.ClientLifecycleManager.scheduleTransaction(ClientLifecycleManager.java:47)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.ClientLifecycleManager.scheduleTransaction(ClientLifecycleManager.java:100)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.WindowToken.notifyFixedRotationTransform(WindowToken.java:670)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.WindowToken.finishFixedRotationTransform(WindowToken.java:636)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.DisplayContent.applyRotationAndFinishFixedRotation(DisplayContent.java:5815)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.DisplayContent.onRequestedOverrideConfigurationChanged(DisplayContent.java:5792)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.DisplayContent.performDisplayOverrideConfigUpdate(DisplayContent.java:5766)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.ActivityTaskManagerService.updateGlobalConfigurationLocked(ActivityTaskManagerService.java:5571)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.DisplayContent.updateDisplayOverrideConfigurationLocked(DisplayContent.java:5740)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.DisplayContent.updateDisplayOverrideConfigurationLocked(DisplayContent.java:5717)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.wm.DisplayContent.sendNewConfiguration(DisplayContent.java:1433)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.a1974 W WindowManager:  at android.os.Handler.handleCallback(Handler.java:938)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at android.os.Handler.dispatchMessage(Handler.java:99)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at android.os.Looper.loop(Looper.java:233)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at android.os.HandlerThread.run(HandlerThread.java:67)
03-05 18:03:51.557  1000  1643  1974 W WindowManager:  at com.android.server.ServiceThread.run(ServiceThread.java:44

5.R项目ROM修改

build/oem_buildinfo/oem_buildinfo.sh
build/generate_oem_buildinfo.mk

6.Cinema 4K打开应用后预览界面黑屏,拍照出现闪退
Media编解码报错,mediarecoder prepare失败。

7.[设置]已去除阻止响铃菜单,但点击power键和音量上键仍能实现该功能 [2/2台,10/10次]
正常关闭后:点击power键和音量上键,不会有吐司提示

允许手势电源+音量调高来改变铃声模式是交互式的。
frameworks/base/core/res/res/values/config.xml 	
3257    <!-- Allow the gesture power + volume up to change the ringer mode while the device is interactive. -->
3259    <bool name="config_volumeHushGestureEnabled">true</bool>

8.后台开启王者荣耀游戏直播,进入游戏过会弹出系统无响应弹框
CPU使用占比99%,Load: 41.85 / 20.9 / 15.38 ,1分钟/5分钟/15分钟较高,负载用户打开应用较多。

9.Power StandbyTest Fail 安卓系统重启
厂商定制
support_lib/src/com/*******/compat/config/ConfigObserverNative.java
ConfigUpdaterNative对象为空 发生空指针。略…

10.进入信息会话界面点击暗色模式,信息无响应。


```java
短信anr
//起短信应用
03-16 08:42:21.846  1693  2066 I ActivityManager: Start proc 26414:com.*******.mms/u0a196 for pre-top-activity {com.*******.mms/com.android.mms.ui.ConversationList}
//BugleApplication的onCreate异常导致未释放window focus,请分析处理
03-16 08:42:22.268 26414 26414 W System.err: android.content.pm.PackageManager$NameNotFoundException: com.recognize.number
03-16 08:42:22.271 26414 26414 W System.err:  at android.app.ApplicationPackageManager.getApplicationInfoAsUser(ApplicationPackageManager.java:428)
03-16 08:42:22.271 26414 26414 W System.err:  at android.app.ApplicationPackageManager.getApplicationInfo(ApplicationPackageManager.java:417)
03-16 08:42:22.271 26414 26414 W System.err:  at com.*******.superyellowpage.XXYuloreHelperImpl.b(SourceFile:4)
03-16 08:42:22.271   956 17585 I QC2C2DEngine: calcYSize: unsupported or RGB color format, RGBA8888_UBWC(-1040187392)
03-16 08:42:22.271 26414 26414 W System.err:  at com.*******.superyellowpage.XXYuloreHelperImpl.a(SourceFile:32)
03-16 08:42:22.271 26414 26414 W System.err:  at b.l.m.j.a(SourceFile:10)
03-16 08:42:22.271 26414 26414 W System.err:  at com.android.mms.BugleApplication.e(SourceFile:3)
03-16 08:42:22.271 26414 26414 W System.err:  at com.android.mms.BugleApplication.onCreate(SourceFile:14)
03-16 08:42:22.271 26414 26414 W System.err:  at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1208)
03-16 08:42:22.271 26414 26414 W System.err:  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7024)
03-16 08:42:22.271 26414 26414 W System.err:  at android.app.ActivityThread.access$1700(ActivityThread.java:274)
03-16 08:42:22.271 26414 26414 W System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2098)
03-16 08:42:22.271 26414 26414 W System.err:  at android.os.Handler.dispatchMessage(Handler.java:106)
03-16 08:42:22.271 26414 26414 W System.err:  at android.os.Looper.loop(Looper.java:233)
03-16 08:42:22.271 26414 26414 W System.err:  at android.app.ActivityThread.main(ActivityThread.java:8063)
03-16 08:42:22.271 26414 26414 W System.err:  at java.lang.reflect.Method.invoke(Native Method)
03-16 08:42:22.271 26414 26414 W System.err:  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
03-16 08:42:22.271 26414 26414 W System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
03-16 08:42:33.409  1693  3146 I ActivityTaskManager: START u0 {flg=0x4000000 cmp=com.*******.mms/com.android.mms.ui.conversation.ConversationActivity (has extras)} from uid 10196 pid 26414
03-16 08:43:00.722  1693  2293 W InputDispatcher: Waiting because no window has focus but ActivityRecord{e9ccc15 u0 com.*******.mms/com.android.mms.ui.conversation.ConversationActivity t120} may eventually add a window when it finishes starting up. Will wait for 5000ms
03-16 08:43:00.722  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 4999ms
03-16 08:43:05.294  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 427ms
03-16 08:43:05.847  1693  2293 W InputDispatcher: Waiting because no window has focus but ActivityRecord{e9ccc15 u0 com.*******.mms/com.android.mms.ui.conversation.ConversationActivity t120} may eventually add a window when it finishes starting up. Will wait for 5000ms
03-16 08:43:05.847  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 4999ms
//已经ANR
03-16 08:43:06.523  1693 26869 I ActivityManager: Dumping to /data/anr/anr_2021-03-16-08-43-06-523
03-16 08:43:06.523  1693 26869 I ActivityManager: Collecting stacks for pid 26414
03-16 08:43:07.106  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 3741ms
03-16 08:43:10.909  1693  2293 W InputDispatcher: Waiting because no window has focus but ActivityRecord{e9ccc15 u0 com.*******.mms/com.android.mms.ui.conversation.ConversationActivity t120} may eventually add a window when it finishes starting up. Will wait for 5000ms
03-16 08:43:10.909  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 4999ms
03-16 08:43:15.180  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 728ms
03-16 08:43:15.910  1693  2293 E InputDispatcher: Dropping KEY event because there is no focused window
03-16 08:43:15.910  1693  2293 W InputDispatcher: Asynchronous input event injection failed.
03-16 08:43:16.000  1693  2293 W InputDispatcher: Waiting because no window has focus but ActivityRecord{e9ccc15 u0 com.*******.mms/com.android.mms.ui.conversation.ConversationActivity t120} may eventually add a window when it finishes starting up. Will wait for 5000ms
03-16 08:43:16.000  1693  2293 W InputDispatcher: Still no focused window. Will drop the event in 4999ms
03-16 08:43:18.955  1693 26869 E ActivityManager: ANR in com.*******.mms (com.*******.mms/com.android.mms.ui.conversation.ConversationActivity)
03-16 08:43:18.955  1693 26869 E ActivityManager: PID: 26414
03-16 08:43:18.955  1693 26869 E ActivityManager: Reason: Input dispatching timed out (ActivityRecord{e9ccc15 u0 com.*******.mms/com.android.mms.ui.conversation.ConversationActivity t120} does not have a focused window)
03-16 08:43:18.955  1693 26869 E ActivityManager: Parent: com.*******.mms/com.android.mms.ui.conversation.ConversationActivity

屏幕按键:Input dispatching timed out (Waiting to send key event because the focused window has not finished processing all of the input events that were previously delivered to it.  Outbound queue length: 0. Wait queue length: 1.
实体按键:Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 6.  Wait queue head age: 5507.1ms.

https://blog.csdn/abm1993/article/details/80497039
Android ANR 问题第二弹------Input超时实战问题解析上

https://blog.csdn/sinat_22657459/article/details/52780759
Android ANR问题原因分析no window has focus

https://www.jianshu/p/31b1a4aef550
Android App性能评测分析-cpu占用篇

https://wwwblogs/1996swg/archive/2018/11/23/10007602.html
Android性能分析工具systrace使用

https://blog.csdn/dadoneo/article/details/8270107
如何分析解决Android ANR

本文标签: 模块Framework