今天我们聊聊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 : Qualcomm Technologies, Inc SM4350
");
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: