平台:Mstar 系统版本:Android 8.0
1.frameworksasecorejavaandroidproviderSettings.java
settings.apk的默认参数是从SettingsProvider app中读取的,保存在provider中说明是系统全局性的,很多地方都会使用里面的参数。
private static final HashSet<String> MOVED_TO_GLOBAL;
MOVED_TO_GLOBAL.add(Settings.Global.WIFI_ON);
MOVED_TO_GLOBAL.add(Settings.Global.WIFI_AP_ON);
MOVED_TO_GLOBAL.add(Settings.Global.ETHERNET_ON);
2.frameworksasepackagesSettingsProvider esvaluesdefaults.xml
defaults.xml中有各种setting应用使用的参数,但是只是部分,并不完全, 如果想知道自己修改的参数具体对应的参数名,通过对比 /data/system/users/0/settings_***.xml 文件中修改前后参数的变化即可。
如配置默认网络状态:有线网络开启、无线关闭、热点开启
<bool name="def_ethernet_on">true</bool> <bool name="def_wifi_on">false</bool> <bool name="def_wifi_ap_on">true</bool>
3.frameworksasepackagesSettingsProvidersrccomandroidproviderssettingsDatabaseHelper.java
系统出厂默认配置会解析xml中各参数值,绑定到SQLiteStatement:
loadBooleanSetting(stmt, Settings.Global.ETHERNET_ON,
R.bool.def_ethernet_on);
loadBooleanSetting(stmt, Settings.Global.WIFI_ON,
R.bool.def_wifi_on);
loadBooleanSetting(stmt, Settings.Global.WIFI_AP_ON,
R.bool.def_wifi_ap_on);
4.devicemstarsugarcaneoverlayframeworksasepackagesSettingsProvider esvaluesdefaults.xml
对于有些系统,为了防止用户修改默认值,会强制重新覆盖默认值,overlay 机制是在源码的 device/xxx/xxx 目录下新建一个 overlay 文件夹(已有的话就不用创建了),添加与 framework 一致的目录和文件,编译时就会将 overlay 下的文件覆盖 frameworks 的文件,从而实现对 frameworks 的修改,一般都是修改图片资源或者存放数据字段的 xml :
<!-- Enable ethernet --> <bool name="def_ethernet_on">true</bool> <!-- Enable wifi --> <bool name="def_wifi_on">false</bool> <!-- Enable ap --> <bool name="def_wifi_ap_on">true</bool>
部分编译及更新验证,需要删除原来的xml文件,替换 SettingsProvider.apk 重启后会重新加载默认值:
mmm frameworks/base/packages/SettingsProvider/ adb push out argetproductsugarcanesystempriv-appSettingsProviderSettingsProvider.apk system/priv-app/SettingsProvider/ adb shell "rm data/system/users/0/settings_global.xml" adb reboot