Settings数据库导出的xml乱码

Settings中
很多数据通过SettingsProvider存储:
Settings.System.putFloat(getContext().getContentResolver(),
Settings.System.PEAK_REFRESH_RATE, 120f);
还有类似Settings.Secure.put…,Settings.Global.put…
分别对应三个xml,路径如下:
/data/system/users/0/settings_system.xml
/data/system/users/0/settings_secure.xml
/data/system/users/0/settings_global.xml

目前的版本Android15,adb pull /data/system/users/0/settings_system.xml,导出来后,直接打开,是乱码

解决方法:
修改frameworks/base/core/java/android/util/Xml.java

public static final boolean ENABLE_BINARY_DEFAULT = shouldEnableBinaryDefault();

把该值直接写死为false,然后重新编译framework即可.

make framework-minus-apex

adb push

重启

---------------------------------------------20251204更新-------------------------------------------------------
设置里面,数据持久化一般通过如下代码:

Settings.System.putInt(mContext.getContentResolver(), SYSTEM_KEY,
                isChecked ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : DEFAULT_VALUE);

也就是上面所说的最终存到如下文件:
/data/system/users/0/settings_system.xml
/data/system/users/0/settings_secure.xml
/data/system/users/0/settings_global.xml

其实可以不用导出该文件,也就是说不需要去修改frameworks/base/core/java/android/util/Xml.java 该文件,即可知道某个key最近被哪个应用所修改

我一般都是OTA后,有可能出现设置里面的某个开关的状态跟OTA前的不一样,测试会提这种bug,那么就需要看是被哪个应用给修改了,有更快的方法,通过如下命令行就能快速知道:

adb shell dumpsys settings system

找到对应的key,会有类似如下输出

_id:182 name:screen_brightness_mode pkg:com.android.settings value:0 default:0 defaultSystemSet:true

即可看到该值最近被Settings所修改,如果pkg:android,则表示是framework修改的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值