M66B/XPrivacy项目数据库结构详解与操作指南
前言:数据库操作风险提示
重要警告:直接修改数据库可能导致设备出现问题(包括启动循环)。操作前请务必进行完整备份,并自行承担风险。建议在恢复模式下进行数据库备份操作,因为在运行系统中无法安全完成文件备份。
一、XPrivacy数据库概述
M66B/XPrivacy项目使用两个核心数据库文件:
- xprivacy.db - 存储应用权限限制的核心配置
- usage.db - 记录应用使用权限的历史数据
这两个数据库文件均位于系统的/data/system/xprivacy
目录下。
数据库完整性机制
XPrivacy在系统启动时会执行以下关键操作:
- 完整性检查:使用SQLite的
PRAGMA integrity_check
命令验证数据库完整性 - 自动修复:若检测到损坏,系统会删除损坏的数据库(而非尝试修复)
- 压缩优化:启动时执行
VACUUM
命令压缩数据库,提升性能
值得注意的是,usage.db因性能考虑设置为异步模式(PRAGMA synchronous=OFF
),这使其比xprivacy.db更易出现损坏情况。
二、数据库访问方法
2.1 通过PC访问
adb shell
su
sqlite3 /data/system/xprivacy/xprivacy.db
2.2 通过Android终端模拟器访问
su
sqlite3 /data/system/xprivacy/xprivacy.db
注:部分设备可能需要单独安装sqlite3二进制文件
三、xprivacy.db核心表结构
3.1 restriction表(权限限制表)
存储每个UID应用的权限限制和按需(OnDemand)设置。
| 字段 | 类型 | 可空性 | 说明 | |------------|---------|----------|-----------------------------| | uid | INTEGER | NOT NULL | 应用唯一标识符 | | restriction| TEXT | NOT NULL | 限制类别(如Accounts、Browser等)| | method | TEXT | NOT NULL | 限制方法(可为空) | | restricted | INTEGER | | 限制状态(0-3) |
restricted字段详解
对于限制类别:
| 值 | XPrivacy显示 | 含义 | |----|--------------|-------------------| | 0 | [ ] [?] | 不限制,询问 | | 1 | [x] [?] | 限制,询问 | | 2 | [ ] [ ] | 不限制,已询问 | | 3 | [x] [ ] | 限制,已询问 |
对于限制方法:
| 值 | XPrivacy显示 | 含义 | |----|--------------|-------------------| | 0 | [x] [?] | 限制,询问 | | 1 | [ ] [?] | 不限制,询问 | | 2 | [x] [ ] | 限制,已询问 | | 3 | [ ] [ ] | 不限制,已询问 |
重要提示:修改此表后需刷新服务端缓存才能生效,可通过以下方式实现:
- 重启设备
- 使用"菜单-设置"中的"刷新缓存"选项
- 发送特定intent命令
3.2 setting表(设置表)
存储全局设置、用户特定设置及白/黑名单信息。
| 字段 | 类型 | 可空性 | 说明 | |-------|---------|----------|-------------------------| | uid | INTEGER | NOT NULL | 用户ID(0表示主用户) | | name | TEXT | NOT NULL | 设置名称 | | value | TEXT | | 设置值 | | type | TEXT | | 类型标识 |
关键查询示例:
-
WHERE name='State'
:获取应用状态- value='0':需关注限制(橙色)
- value='1':限制已更改(灰色)
- value='2':限制已提交(绿色)
-
WHERE uid='0' and type='Template'
:获取限制模板值 -
WHERE type IN (Command, Filename,...)
:获取各类白/黑名单条目
四、usage.db核心表结构
4.1 usage表(使用记录表)
记录应用实际使用的权限情况。
| 字段 | 类型 | 可空性 | 说明 | |------------|---------|----------|-----------------------------| | uid | INTEGER | NOT NULL | 应用唯一标识符 | | restriction| TEXT | NOT NULL | 限制类别 | | method | TEXT | NOT NULL | 限制方法 | | extra | TEXT | NOT NULL | 额外参数(可为空) | | restricted | INTEGER | NOT NULL | 是否被限制(0允许/1拒绝) | | time | INTEGER | NOT NULL | 最后访问时间(UNIX时间戳) | | value | TEXT | NOT NULL | 相关值 |
五、实用SQL查询示例
5.1 xprivacy.db查询
-
查看全局设置:
SELECT * FROM setting WHERE uid='0';
-
查看特定应用限制:
SELECT * FROM restriction WHERE uid='1000';
-
查找未启用OnDemand的应用:
SELECT * from setting WHERE name='OnDemand' and value='false';
-
批量修改设置:
UPDATE setting SET value='true' where name='OnDemand' and uid IN (10001,10002,10003);
5.2 usage.db查询
-
按时间排序查看使用记录:
SELECT * FROM usage ORDER BY time DESC;
-
清除特定应用使用记录:
DELETE FROM usage where uid='1000';
六、数据库维护建议
- 定期监控:检查
/data/system
分区剩余空间,避免磁盘满导致数据库损坏 - 谨慎操作:修改数据库前确保理解每个字段含义
- 备份策略:在恢复模式下进行完整备份
- 性能优化:系统启动时的VACUUM操作需要临时双倍存储空间
通过深入理解这些数据库结构,高级用户可以更灵活地管理XPrivacy的权限控制策略,实现更精细化的隐私保护配置。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考