安德鲁斯系统备份是非常的情况下,可以使用。下面的这个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. [RxJS] Split an RxJS Observable into groups with groupBy

    groupBy() is another RxJS operator to create higher order observables. In this lesson we will learn ...

  2. #import </usr/include/objc/objc-class.h> not such file or directory问题的解决方法

    近期在使用一些开源的demo,打开后出现这个错误,然后能够把 #import </usr/include/objc/objc-class.h> 改动为以下 #import <objc ...

  3. UUIDUtils工具类

    原理是根据自身的操作系统和电脑硬件生成的一个32位的随机字符串,如果是一台电脑使用的话,一年不会重复,经过java之后貌似编程了36位,多了4个"-",下面是代码实现: impor ...

  4. string与QString之间的转换(两种方法:fromStdString直接转换,或者fromLocal8Bit(cstr.c_str())

    string str;QString qstr; //从QString 到 std::stringstr = qstr.toStdString(); //从std::string 到QStringqs ...

  5. Fragment使用LocalBroadcastManager接收广播消息

    这种方式不用在配置文件加东西 变量声明 LocalBroadcastManager broadcastManager; IntentFilter intentFilter; BroadcastRece ...

  6. 移动端UI界面设计:APP字体排版设计的七个原则

    移动端UI界面设计:APP字体排版设计的七个原则 发布于: 2015 年 2 月 9 日 by admin 再来谈移动端APP字体排版设计,也许有人会说,这个还有什么好说的呢?但是真正能够运用好APP ...

  7. [React] Use React.cloneElement to Extend Functionality of Children Components

    We can utilize React.cloneElement in order to create new components with extended data or functional ...

  8. J2EE学习篇之--JQuery技术具体解释

    前面我们解说了的J2EE的技术都是服务端的技术,以下我们来看一下前端的一些开发技术,这一篇我们来看一下jQuery技术 简单介绍: jQuery由美国人John Resig创建,至今已吸引了来自世界各 ...

  9. TimeUnit用法

    TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段 1.主要作用 时间颗粒度转换 延时 2.常用的颗粒度 TimeUnit.DAYS //天 TimeU ...

  10. 【u222】选课

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