Android 工具库 pandora 简介 - 沙盒的实现
Pandora 是一个优秀的开源 Android 开发工具,用来进行开发时候的一些辅助工作。本文简单介绍下 pandora 以下重要功能的对应实现方式:
- 沙盒文件
沙盒文件
pandora 展示的沙河文件有如下三类:
- Database 数据库的文件
- SharedPreferences 文件
- 应用沙盒目录下的文件树(即
context.getRootDir()
所获取到的目录)
接下来我们分别说这三类信息是如何获取到的,其关键的 API 分别是什么?
Database
主要涉及以下几个数据库相关 API :
-
context.databaseList()
用来获取应用的数据库列表,返回一个字符串数组 -
context.getDatabasePath(String databaseName)
用来获取某个数据库对应的文件,返回一个File
对象 -
SQLiteDatabase.openDatabase(File databaseFile, SQLiteDatabase.CursorFactory factory, int flags)
用来获取数据库信息,返回一个SQLiteDatabase
对象用来进行查询。该
openDatabase
函数执行后需要使用SQLiteDatabase.close()
方法关闭。类似于文件操作-
SQLiteDatabase
对象的rawQuery(String querySQL,String[] selectionArgs)
方法,获取游标后进行查询。 -
SQLiteDatabase
对象的compileStatement(String sql)
用来获取一个操作对象进行执行,返回一个SQLiteStatement
对象SQLiteStatement
对象类似于FragmentTransaction
对象,只是描述动作,并没有真正执行,需要下面的几个方法来提交执行 -
SQLiteStatement
提交执行的方法根据实际的语句不同而有差别,具体有使用executeUpdateDelete()
、executeInsert
这两种执行方式。
基于以上的 API,就可以实现以下操作:
- 查询应用所有的数据库
- 查询指定数据库的表
- 查询指定表中的数据
- 修改指定表中的数据
-
SharedPreferences
-
遍历应用 dataDirectory 的
/shared_prefs
目录,获取其中所有的.xml
文件,这里面的 xml 文件正常来说就是应用的 sharedPreferencnes 数据。 -
context.getSharedPreferences(String prefName, int mode)
方法用来读取指定 pref 文件里的数据信息。返回的是SharedPreferences
对象 -
SharedPreferences
对象的edit()
方法获取一个SharedPreferences.Editor
对象,并且使用putInt
/putBoolean
等方法进行更新。除了 dataDirectory 下的
/shared_prefs
目录包含有应用的 pref 文件外,还有一处和 "deviceProtect" 有关的目录也可能会有 pref 文件的存在,这个主要是目录问题,在此不讨论这个情况。具体可以参见 Android 官方文档 - DeviceProtectStorage
基于以上的 API,可以实现:
- 查询应用所有的 SharedPreferences 信息
- 获取指定的 SharedPreferences 里的数据
- 修改执行 SharedPreferences 中的数据
应用沙盒目录
该功能主要使用 File
一族相关的方法,因为及其常用,所以在此不加赘述了,主要包含:
-
File
对象的listFiles()
方法用来获取目录下的子文件。 -
exists()
、isDirectory()
等判断文件等。