Settings简介
- 简介
Settings主要功能是改变系统设置,其 UID 是 SYSTEM_UID,值为1000,是系统核心应用,能够使用系统级权限,能够访问系统隐藏的API(@hide方法)和internal资源。
Settings | 普通应用 | |
UID | 1000 | 应用安装时分配,>10000 |
编译方式 | 基于Android源码编译 | 基于Android SDK编译 |
安装方式 | adb push Settings.apk /system/priv-app/Settings | adb install App.apk |
安装位置 | /system/priv-app/ | /data/app/ |
数据位置 | /data/user_de/ | /data/data/ |
代码位置 | packages/apps/Settings/ |
- 功能介绍
Settings主界面
Settings功能特点
1、Settings页面很多,但是Activity却很少,基本上都是使用PreferenceFragment
2、Settings中包含大量对provider的操作与监听
3、Settings UI基本上都是采用Preference来实现
Settings架构
1、Settings主界面Activity使用的是Settings
2、Settings子界面Activity基本上都是使用SubSettings
3、Settings与SubSettings中都是空Activity,这里的空Activity指的是没有重写7大生命周期方法
4、Settings与SubSettings都是继承于SettingsActivity
5、主界面使用的layout是:settings_main_dashboard,子界面使用的layout是:settings_main_prefs
6、主界面settings_main_dashboard中是使用DashboardSummary(Fragment)进行填充,子界面都是使用各自的Fragment进行填充
7、子界面fragment基本上都是直接或间接继承SettingsPreferenceFragment
8、主界面选项列表是定义在dashboard_categories.xml中,此文件是在SettingsActivity的buildDashboardCategories方法中进行解析的
9、在Settings类中定义了很多static class,这些类都是继承SettingsActivity,但都是空的,如BluetoothSettingsActivity
这些类主要用于对外提供跳转页面,比如从SystemUI跳转至Settings中的某个界面
10、Settings类中定义了的static class被定义在AndroidManifest中,通过meta-data参数将对应的Fragment绑定在一起
11、在Activity中填充Fragment主要使用的是SettingsActivity中的switchToFragment方法
SettingsProvider简介
SettingsProvider包含全局性、系统级别的用户编好设置,Settings里面做很多设备的设置,这些用户偏好的设置很多就保存在SettingsProvider中,Settings会对SettingsProvider中的数据库进行操作和监听,Settings中大部分选项都会涉及到对SettingsProvider的操作。
SettingsProvider源码位置:frameworks/base/packages/SettingsProvider/
db在数据库中存在的位置:
/data/data/com.android.providers.settings/databases/settings.db
SettingsLib简介
SettingsLib作为Settings功能上的依赖库,与Settings结构目录分工有相对于关系。
1、Settings目录结构
android\packages\apps\Settings
- src
- - com.android.settings Settings应用整体所用的java文件
- - com.android.settings.accessibility 辅助功能相关
- - com.android.settings.accounts 账户相关
- - com.android.settings.application 应用管理相关
- - com.android.settings.backup 备份相关
- - com.android.settings.bluetooth 蓝牙相关
- - com.android.settings.dashboard Settings主界面相关
- - com.android.settings.datausage 数据流量相关
- - com.android.settings.deletionhelper
- - com.android.settings.deviceinfo 关于手机相关
- - com.android.settings.display 显示相关
- - com.android.settings.drawable 菜单图片相关
- - com.android.settings.fingerprint 指纹相关
- - com.android.settings.fuelgauge
- - com.android.settings.gestures 手势相关
- - com.android.settings.inputmethod 输入法相关
- - com.android.settings.localepicker 语言相关
- - com.android.settings.location 位置相关
- - com.android.settings.nfc nfc相关
- - com.android.settings.notification 通知相关相关
- - com.android.settings.overlay
- - com.android.settings.password 密码相关
- - com.android.settings.print 打印相关
- - com.android.settings.qstile
- - com.android.settings.search 快速搜索相关
- - com.android.settings.sim SIM卡相关
- - com.android.settings.support
- - com.android.settings.tts tts播报相关
- - com.android.settings.users 用户相关
- - com.android.settings.utils 工具类
- - com.android.settings.voice
- - com.android.settings.vpn2
- - com.android.settings.wfd
- - com.android.settings.widget 小部件相关
- - com.android.settings.wifi wifi相关
- AndroidManifest.xml 清单文件
2、SettingsLib目录结构
android\frameworks\base\packages\SettingsLib\src\com\android\settingslib
- src
- - com.android.settingslib.accessibility 辅助功能相关
- - com.android.settingslib.accounts 账户相关
- - com.android.settingslib.animation 动画相关
- - com.android.settingslib.application 应用管理相关
- - com.android.settingslib.bluetooth 蓝牙相关
- - com.android.settingslib.datetime 日期相关
- - com.android.settingslib.deviceinfo 关于手机相关
- - com.android.settingslib.display 显示相关
- - com.android.settingslib.drawable 菜单图片相关
- - com.android.settingslib.drawer 侧滑菜单相关
- - com.android.settings.dream 休眠相关
- - com.android.settings.graph
- - com.android.settings.location 位置相关
- - com.android.settings.net 网络相关
- - com.android.settings.users 用户相关
- - com.android.settings.widget 小部件相关
- - com.android.settings.wifi wifi相关
- AndroidManifest.xml 清单文件
adb/Settings
adb shell settings 控制安卓系统设置以获取、修改相关系统属性, Android4.2的android-17\com\android\commands目录下较之前的版本多了一个settings命令- SettingsCmd.java,该命令可以很方便的更改系统设置中的参数(如修改系统默认输入法)。
例如:adb shell settings get secure default_input_method com.sohu.inputmethod.sogouoem/.SogouIME