平台:Mstar 系统版本:Android 8.0
settings.apk的默认参数是从SettingsProvider app中读取的,保存在provider中说明是系统全局性的,很多地方都会使用里面的参数。
1.\frameworks\base\packages\SettingsProvider\res\values\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>
2.\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.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);
3.\device\mstar\sugarcane\overlay\frameworks\base\packages\SettingsProvider\res\values\defaults.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\target\product\sugarcane\system\priv-app\SettingsProvider\SettingsProvider.apk system/priv-app/SettingsProvider/ adb shell "rm data/system/users/0/settings_global.xml" adb reboot