Android7.0 Settings 源码剖析一——Settings概括



前言: 今日付出的汗水,只为明日不一样的自己。唯有坚持不懈的努力,才能过上自己想要的生活

转载请标明出处:
http://blog.csdn.net/w690333243/article/details/78082176
更多内容请访问【-小沫-博客】

一、主要内容

        此篇文章主要给大家介绍Settings相关的基础知识:代码路径,手机中相关数据库、文件的路径,等。

二、相关路径

        Android7.0 对Settings进行了重构,相比5.0,6.0而言,7.0的Settings有很大的不同,这里主要介绍7.0 Settings相关的内容。给大家提供一个android系统源码网站:Android系统源码
Settings涉及的目录路径(只列出部分):

1、代码相关目录:

android\frameworks\base\packages\SettingsLib 7.0重构Settings后多出来的部分
android\frameworks\base\packages\SettingsProvider settings数据库相关
android\packages\apps\Settings Settings相关
android\frameworks\base\core\java\android\provider settings数据库字段定义相关
android\packages\providers\MediaProvider铃声相关
android\packages\screensavers屏保相关
android\packages\inputmethods输入法相关

2、apk相关目录:
1>源码编译后apk生成目录:

android\out\target\product\msm8940_64\system\priv-app\Settings\Settings.apk
android\out\target\product\msm8940_64\system\priv-app\MediaProvider\MediaProvider.apk
android\out\target\product\msm8940_64\system\priv-app\SettingsProvider\SettingsProvider.apk

2>手机中apk路径:

cmd下,adb shell
system/priv-app/Settings/Settings.apk
system/priv-app/MediaProvider/MediaProvider.apk
system/priv-app/SettingsProvider/SettingsProvider.apk

Android7.0 Settings 源码剖析一——Settings概括_第1张图片

注:
(1)手机中apk的路径和源码编译后 平台(根据自己公司使用的平台)目录后面的路径是一致的(一般情况下都是这样的) 。
即在电脑文件目录下的路径如果是 android\out\target\product\msm8940_64\aaa\bbb\ccc\dd.apk
那么在手机中的路径是aaa\bbb\ccc\dd.apk
(2)msm8940_64 即msm8940平台 64位系统
(3)细心的同学会发现windows和linux下的文件目录分隔符是不一样的(/ ),这里知道就行(分隔符我有的地方写的不一定正确)

3、暗码:

手机暗码(字母和数字组合):在拨号界面输入暗码即可进入相应的选项或打开相关的功能,各个类型的手机暗码不一样,这里说的是我司用的暗码,另外暗码主要为了方便研发开发使用,有的手机厂商在手机量产前会去掉暗码功能(即暗码无效)
后台log暗码:##564##
版本号暗码:##123321##
root暗码:##55555##

4、数据库:

1>Settings数据库

Android L (5.1)及以前版本Settings相关的数据库在
/data/data/com.android.providers.settings/databases/settings.db里,里面有三个表global, system, secure.
查看数据库方式:
(1)cmd下(不确认是否需配置sqlite3环境变量,如果不能使用sqlite3命令,请百度)
adb shell sqlite3 data/data/com.android.providers.settings/databases/settings.db “select * from system”
(2)或者
adb pull data/data/com.android.providers.settings/databases/settings.db D:\xx 到本地,然后用SQLite Expert Professional 软件打开即可

Android M (6.0)之后的谷歌对SettingsProvider进行了重构,所以Settings数据库的路径有了变化
在手机目录/data/system/users/0路径下,以xml的形式存储数据,有settings_global.xml, settings_system.xml, settings_secure.xml
其中不同用户的数据库放不同的用户路径下,如果没有创建新用户,则在/data/system/users/0下。
修改数据库中的字段使用命令
adb shell settings get global captive_portal_server
adb shell settings put global captive_portal_server 0

注:这里虽然手机目录中数据库存储是以xml的形式,但是代码中操作时操作的仍然是数据库。系统会先生成Settings.db数据库,然后将其中的内容保存到xml文件中,最后删除Settings.db数据库(SettingsProvider的功能,后续会讲到)。
这里为何先生成数据库后又删除,主要是为了兼容之前的版本。
为什么以xml的形式保存字段:节省资源,简单,安全(xml保存的路径相对于之前的数据库路径比较安全,大概是考虑到多用户吧)

Android7.0 Settings 源码剖析一——Settings概括_第2张图片


2>media数据库

media相关的数据路径:
data/data/com.android.providers.meida
external.db是外置文件路径(SD卡存储的文件)
internal.db是内存文件路径(手机存储的文件)

这里写图片描述

三、目录结构

        SettingsLib和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.2
- - 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 清单文件

四、总结

        Settings主要的功能一句话描述:保存用户设置的值到Settings数据库,其他应用或Framework层通过监听SettingsProvider数据库的变化,来做一些相应的处理操作。
本篇主要给大家讲述了

博客中如果有不正确的地方,还望斧正。让我们一起努力,见证明日不一样的自己。QQ交流群: 238696947

参考文章:
http://blog.csdn.net/h_gao/article/details/58201121
http://blog.csdn.net/kv110/article/details/51520207

你可能感兴趣的:(android系统应用开发)