You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AOSP中实现恢复出厂设置后持久化存储整数数据?

本地持久化整数数据(跨Factory Reset)的AOSP实现方案

针对你需要在设备恢复出厂设置后保留整数数据的需求,结合你拥有完整AOSP代码权限的情况,以下是几个可行的本地实现方案:

方案1:利用/persist分区存储文件

/persist是AOSP官方设计的跨出厂重置保留数据的专用分区,默认不会被factory reset清除,是最优选择。

  • 实现步骤:
    1. 配置权限:在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 };
      
    2. 文件读写:将整数转为字符串写入/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);
      }
      
    3. 目录初始化:可以在init.rc中添加脚本,开机时自动创建/persist/my_custom_data目录,避免文件写入失败:
      mkdir /persist/my_custom_data 0755 system system
      

方案2:定制持久化系统属性

默认persist.*属性存在/data/property会被清除,但可以修改AOSP源码让指定属性存储到非易失分区:

  • 实现步骤:
    1. 修改属性存储逻辑:在system/core/init/property_service.cpp中,为你的自定义属性(比如persist.myapp.counter)添加特殊处理,将其存储到/persist/property目录
    2. 注册属性:在system/core/rootdir/init.rc中添加属性定义,确保属性可被读写:
      setprop persist.myapp.counter 0
      
    3. 读写属性:直接用系统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清除,但默认只读,适合存储不常修改的数据:

  • 实现步骤:
    1. 编译时写入初始数据:在AOSP编译时,将初始整数数据写入/vendor/etc/my_counter.conf文件,随系统镜像一起打包
    2. 动态修改处理:如果需要动态更新数据,可在init.rc中添加脚本,开机时临时挂载/vendor为可读写,写入后再恢复只读:
      mount -o remount,rw /vendor
      echo "789" > /vendor/etc/my_counter.conf
      mount -o remount,ro /vendor
      
    3. 读取数据:直接读取/vendor/etc/my_counter.conf内容转换为整数即可

关键注意事项

  • 所有方案都需要调整sepolicy或init脚本,确保你的进程拥有对应分区的访问权限
  • 测试时必须执行完整的factory reset流程验证数据是否保留,避免依赖错误的分区
  • 优先选择/persist分区,这是官方推荐的持久化路径,适配性和稳定性最佳

内容的提问来源于stack exchange,提问作者Invader Zim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:23:25