阅读更多

首先声明这个问题我没有解决。留个记录待有时间再继续研究,也希望高手提示。

 

需求目标

首先备份软件设置,包括应用相关的Preference和Database数据

第二步:卸载软件,并重新安装

第三步:将第一步备份的数据恢复到新安装的应用,应用恢复到卸载前状态。

 

实现思路:

android应用安装后会在相应/data/app目录和/data/data目录创建应用相关的文件,其中Preference数据和Sqlite产生的数据分别存放在/data/data/packagename/databases和/data/data/packagename/shared_prefs目录下。备份过程就是以root身份将/data/data/packagename/目录下的文件copy到SDcard一份,到应用安装完成,重新用备份的文件覆盖新安装应用的目录文件。

 

问题:

备份、恢复过程都可以完好的实现,当运行恢复数据后的应用时,如果应用涉及到database操作,会出现如下错误:ERROR/AndroidRuntime(31206): Caused by: android.database.sqlite.SQLiteException: error code 8: attempt to write a readonly database。意思是试图去写一个只读的数据库文件。应该是权限问题所致,设置目录及文件权限,chmod 755,错误依然存在。通过观察,每个应用安装后系统对会给应用分配一个用户ID,可以通过ApplicationInfo的uid属性得到,通过root身份备份、恢复的文件,虽然设置了权限,但对应用来说依然是只读的。

 

可能的解决方案

1、通过root用户分配权限给databases

2、以应用的uid拷贝文件

3、采用Sqlite方式导入数据

 

目前测试结果第一种方式肯定是行不通的,第三种方式也有问题,应用程序刚刚安装时并不会建立database等目录,一般都是在应用第一次启动时才会建立,第二种方式目前还没有测试,希望能成功。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android原生页面Activity与React页面相互跳转
  6. android获取证书文件
  7. ListView----Adapter的使用
  8. 解决VS2015安装Android(安卓)SDK 后文件不全及更新问题
  9. Android实现拨打电话功能

随机推荐

  1. android 对话框(Dialog)使用(2)
  2. 【Android】this和this.getApplictionCon
  3. Android View如何获取焦点
  4. 关于Android视频播放的一些事
  5. Android Bitmap 内存以及OOM问题讨论
  6. 关于AndroidManifest.xml中的android:deb
  7. Android判断当前网络是否可用
  8. Android加载字体包及封装
  9. Android多用户原理
  10. mac 上的android源码下载编译查看