26
2017
09

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

这里写图片描述

注:
(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保存的路径相对于之前的数据库路径比较安全,大概是考虑到多用户吧)

这里写图片描述


2>media数据库

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

这里写图片描述

二、Settings目录结构

1、待续

三、总结

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

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

上一篇:RecyclerView系列(7)—自定义LayoutManager 下一篇:渐变圆环进度条实现