如何在AOSP中实现恢复出厂设置后持久化存储整数数据?
本地持久化整数数据(跨Factory Reset)的AOSP实现方案
针对你需要在设备恢复出厂设置后保留整数数据的需求,结合你拥有完整AOSP代码权限的情况,以下是几个可行的本地实现方案:
方案1:利用/persist分区存储文件
/persist是AOSP官方设计的跨出厂重置保留数据的专用分区,默认不会被factory reset清除,是最优选择。
- 实现步骤:
- 配置权限:在sepolicy中添加进程访问/persist的规则,比如你的进程domain是
my_app,则添加:allow my_app persist_file:file { read write create open }; allow my_app persist_file:dir { read write create add_name }; - 文件读写:将整数转为字符串写入
/persist/my_custom_data/counter.txt,读取时再转回整数。示例代码(C++):// 写入 int counter = 123; FILE* fp = fopen("/persist/my_custom_data/counter.txt", "w"); if (fp) { fprintf(fp, "%d", counter); fclose(fp); } // 读取 int saved_counter = 0; FILE* fp = fopen("/persist/my_custom_data/counter.txt", "r"); if (fp) { fscanf(fp, "%d", &saved_counter); fclose(fp); } - 目录初始化:可以在init.rc中添加脚本,开机时自动创建
/persist/my_custom_data目录,避免文件写入失败:mkdir /persist/my_custom_data 0755 system system
- 配置权限:在sepolicy中添加进程访问/persist的规则,比如你的进程domain是
方案2:定制持久化系统属性
默认persist.*属性存在/data/property会被清除,但可以修改AOSP源码让指定属性存储到非易失分区:
- 实现步骤:
- 修改属性存储逻辑:在
system/core/init/property_service.cpp中,为你的自定义属性(比如persist.myapp.counter)添加特殊处理,将其存储到/persist/property目录 - 注册属性:在
system/core/rootdir/init.rc中添加属性定义,确保属性可被读写:setprop persist.myapp.counter 0 - 读写属性:直接用系统API操作,注意属性值是字符串,需要转换:
// 写入 int counter = 456; char buf[32]; snprintf(buf, sizeof(buf), "%d", counter); property_set("persist.myapp.counter", buf); // 读取 char value[32] = "0"; property_get("persist.myapp.counter", value, "0"); int saved_counter = atoi(value);
- 修改属性存储逻辑:在
方案3:利用/vendor分区存储(只读分区适配)
/vendor分区不会被factory reset清除,但默认只读,适合存储不常修改的数据:
- 实现步骤:
- 编译时写入初始数据:在AOSP编译时,将初始整数数据写入
/vendor/etc/my_counter.conf文件,随系统镜像一起打包 - 动态修改处理:如果需要动态更新数据,可在init.rc中添加脚本,开机时临时挂载/vendor为可读写,写入后再恢复只读:
mount -o remount,rw /vendor echo "789" > /vendor/etc/my_counter.conf mount -o remount,ro /vendor - 读取数据:直接读取
/vendor/etc/my_counter.conf内容转换为整数即可
- 编译时写入初始数据:在AOSP编译时,将初始整数数据写入
关键注意事项
- 所有方案都需要调整sepolicy或init脚本,确保你的进程拥有对应分区的访问权限
- 测试时必须执行完整的factory reset流程验证数据是否保留,避免依赖错误的分区
- 优先选择/persist分区,这是官方推荐的持久化路径,适配性和稳定性最佳
内容的提问来源于stack exchange,提问作者Invader Zim
相关产品推荐
相关产品推荐

