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修改的.

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐