安德鲁斯系统备份是非常的情况下,可以使用。下面的这个python脚本。它可以用来备份整个data分:所有data分区的文件和文件夹打包data.zip。并产生recovery专用edify脚本update-script.sh。

当然,备份system分区了,假设再加上几行代码,就能够备份boot,recovery,uboot等等分区。只是这要依据不同的分区来写不同的备份代码:

backup.py

import sys
import os
from os.path import join
from os import path
import zipfile
from zipfile import ZipFile def packdir(dir,z,dirinfo,emptydirs,linkinfo):
dirs = os.listdir(dir)
if not dirs:
emptydirs.append(dir)
else:
for d in dirs:
absdir = join(dir,d)
if not path.islink(absdir) and (path.isdir(absdir) or path.isfile(absdir)):
break
else:
emptydirs.append(dir) for d in dirs:
absdir = join(dir,d)
st = os.lstat(absdir)
info = [st.st_uid,st.st_gid,st.st_mode]
if path.islink(absdir):
info.append(absdir)
linkdir = os.readlink(absdir)
linkinfo[linkdir] = info
elif path.isdir(absdir):
dirinfo[absdir] = info
packdir(absdir,z,dirinfo,emptydirs,linkinfo)
elif path.isfile(absdir):
dirinfo[absdir] = info
os.utime(absdir,(1403408099,1403408099))
z.write(absdir)
else:
print 'file type unknow %s'%(absdir,) zi = ZipFile('data.zip','w',zipfile.ZIP_DEFLATED)
dirinfo = {}
emptydirs = []
linkinfo = {}
packdir('/data',zi,dirinfo,emptydirs,linkinfo) f = open('update-script.sh','wb'); f.write('ifelse(is_mounted("/data"),unmount("/data"),0);\n')
f.write('format("ext4", "EMMC", "/dev/block/data", "0", "/data");\n')
f.write('mount("ext4", "EMMC", "/dev/block/data", "/data");\n')
f.write('package_extract_dir("data", "/data");\n') mkdir_cmd = 'run_program("/sbin/busybox","mkdir","-p","'
mkdir_cmd += '","'.join(emptydirs)
mkdir_cmd += '");\n' f.write(mkdir_cmd) for key in dirinfo.keys():
info = dirinfo[key]
info = list(info)
info.append(key)
info = tuple(info)
set_perm = 'set_perm(%d, %d, %d, "%s");\n'%info
f.write(set_perm) for key in linkinfo:
info = linkinfo[key]
info = tuple(info)
symlink = 'symlink("%s", "%s");\n'%(key,info[3])
set_perm = 'run_program("/sbin/busybox","chown","-h","install:install","%s");\n'%(info[3],)
f.write(symlink)
f.write(set_perm) f.write('unmount("/data");') f.close()
update_script='update-script.sh'
os.utime(update_script,(1403408099,1403408099))
zi.write(update_script) zi.close()

怎样执行:

先要有root权限,另外,该脚本的执行依赖于python-for-android。

然后要将该包装脚本apk在。要么adb shell通过命令行运行。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

如何完全备份android在系统system分区和data分的更多相关文章

  1. 修改Android模拟器的system分区,以及加入SuperSU

      http://www.claudxiao.net/2013/10/persistent-change-emulator-system-partition/ 对Android的模拟器,如果要修改其s ...

  2. 图解Android - System Service 概论 和 Android GUI 系统

    通过 图解Android - Binder 和 Service 一文中,我们已经分析了Binder 和 Service的工作原理.接下来,我们来简要分析Android 系统里面都有哪些重要的Servi ...

  3. 图解Android - Android GUI 系统 (5) - Android的Event Input System

    Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: ...

  4. MTK Android修改System分区

    Z:\rk3326_p_hq_rf8637sa\device\rockchip\common\BoardConfig.mk #Calculate partition size from paramet ...

  5. Android双系统实现

    1. 前言: 刷机,似乎是安卓手机用户的一项专利,可是,会刷机的用户一般都是喜新厌旧的角色. 一个系统用久了.就想换到还有一个系统.或者认为没有原来的好,或者又认为要换回去.这样又要重刷. 可是刷来刷 ...

  6. Android A/B System OTA分析(一)概览【转】

    本文转载自:https://blog.csdn.net/guyongqiangx/article/details/71334889 Android从7.0开始引入新的OTA升级方式,A/B Syste ...

  7. UEFI+GPT模式下的Windows系统中分区结构和默认分区大小及硬盘整数分区研究

    内容摘要:本文主要讨论和分析在UEFI+GPT模式下的Windows系统(主要是最新的Win10X64)中默认的分区结构和默认的分区大小,硬盘整数分区.4K对齐.起始扇区.恢复分区.ESP分区.MSR ...

  8. 【转】理解 Android Build 系统----不错

    $ mmm -help用法:make [选项] [目标] ...选项: -b, -m 忽略兼容性. -B, --always-make Unconditionally make all targets ...

  9. MT8127:如何让system分区可读写(MTK安卓6.0)

    Android 系统默认情况下,system 分区是只读 mount 的,因为无法进行往里写数据的,可 以用 adb 命令 adb remount 重新 mount 一下. 也可以通过在板子上,输入以 ...

随机推荐

  1. 应用层协议实现系列(三)——FTPserver之设计与实现

    在实现了HTTPserver之后.本人打算再实现一个FTPserver. 因为FTP协议与HTTP一样都位于应用层,所以实现原理也类似. 在这里把实现的原理和源代码分享给大家. 首先须要明白的是FTP ...

  2. JasperReport html 导出

    In my last blog post I discussed about Generating jasper reports in different formats using json fil ...

  3. 《转》couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145

    couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145,有须要的朋友能够參考下. 应为昨天安装的时候没及时 ...

  4. 删除vector中的重复数据(unique)

    #include <iostream> #include <vector> #include <algorithm> #include <assert.h&g ...

  5. Struts2之配置使用

    重要声明:此次学习struts2使用的版本号为:struts-2.3.15.3.假设是用的其它版本号出现的问题能够联系我. 一. 1.首先就是打开myeclipse创建project名为:struts ...

  6. [Angular] Difference between Providers and ViewProviders

    For example we have a component: class TodoList { private todos: Todo[] = []; add(todo: Todo) {} rem ...

  7. js进阶 10-3 jquery中为什么用document.ready方法

    js进阶 10-3  jquery中为什么用document.ready方法 一.总结 一句话总结: 1.document.ready和window.onload的区别:用哪个好? document. ...

  8. 【u222】选课

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 黄黄游历完学校,就开始要选课上了. 黄黄同学所在的学校有一个奇怪的上课系统,有N种课可以选择,每种课可 ...

  9. HDU 1502 - dp + 压位

    传送门 题目大意: 3*n的字符串,A.B.C分别有n个,w(X)代表X字母出现的次数,要求该字符串的所有前缀中w(A) >= w(B) >= w(C),问合法方案数有多少. 题目分析: ...

  10. 【CTO俱乐部研修班开课】看板先驱David J. Anderson:看板核心在于创造一种能力——提升敏捷性

    看板开发方法是近年来最热门的敏捷和精益开发方法.看板之父David J. Anderson觉得其核心在于帮助企业创造一种能力--提升敏捷性.CTO俱乐部看板研修班将通过理论.沙盘模拟.真实案例分享等阐 ...