如何完全备份android系统上的system分区和data分区

安卓的系统备份在很多场合下可能会用到,下面这个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分区

时间: 2024-10-04 16:26:39

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

在Android系统上安装linux发行版

Install linux distribution (Debian/Ubuntu/Kali Linux/Fedora/openSUSE/Gentoo/RootFS/Arch Linux) on Android system (Debian/Ubuntu/Kali Linux/Fedora/openSUSE/Gentoo/RootFS/Arch Linux) 1.所用的手机类型为Samsung Note2 Verizon i605 2.首先对自己的手机做下清理,将SD卡至少剩余4G以上空间: 3

MAC安装Win10出现”在efi系统上,windows只能安装到gpt分区”问题的解决

问题: 这两天帮同事在一台MAC BOOK AIR(2015)上安装WIN10双系统,在选择系统分区时出现了"在efi系统上,windows只能安装到gpt分区"的提示,在网上找了很多办法都没有解决.后来,使用了一个网友的方法,顺利完成安装. 解决办法: 1.在MAC OS中用bootcamp把win10安装分区调整好. 2.用磁盘工具抹掉新分的区,把分区格式选为mac日志式(切记!我在这走了多次弯路)! 3.重启电脑按住option键选择U盘或光盘(事先创建好WIN10安装U盘或光盘

Chromium on Android: Android系统上Chromium主消息循环的实现分析

摘要:刚一开始接触Chromium on Android时,就很好奇Chromium的主消息循环是怎么整合到Android应用程序中的.对于Android程序来说,一旦启动,主线程就会有一个Java层的消息循环处理用户输入事件等系统事件,而对Chromium来说,它有自己另一套消息循环的实现,这个实现有哪些特点,又将如何无缝整合到Android Java层的消息循环中去,正是本文所要讨论的话题. 原创文章系列,转载请注明原始出处为http://blog.csdn.net/hongbomin/ar

在android系统上写C语言程序--开机启动该程序不进入安卓系统

今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的.如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直接说实用的,怎么用这个东西. 关于这个问题,相信很多学Android的都会去关注这个问题,大家普遍会有个这样的疑问:安卓是怎么跑起来的? 最简单的说法,安卓系统是这样加载的: Bootloader------Kernel(对应平台版本的Linux内核)------filesystem文件系统(这个就

在低版本android系统上实现Material设计应用

?Material Design真的很好看,动画效果真的很实用.前面也写了一些文章介绍如何编写Material风格的程序,但是很多都是一些新的api,低版本上面没有这些api,我们没办法使用.但是不用气馁,google官方,以及一些大牛,给我们提供了一些程序,让我们在低版本上面可以实现Material风格的程序,这里就给大家介绍一下. 妹子图截屏 使用support library 使用support library最新的版本,appcomt21,可以在较低版本上面实现部分风格,在之前的文章我已

Android系统上的键盘监控

键盘监控 键盘监控,顾名思义是在应用软件在运行时,用户在设备上的一举一动都将被详细记录下来,更多的实在使用者毫无觉察的情况下将屏幕内容以图片的形式.按键内容以文本文档的形式保存在指定的文件夹或发送到指定的邮箱.键盘监控,包括物理按键与软键盘的监控,通常监控的事件有:点击,长按,滑动等,这些时间在Android上表现出来的都是一系列的KeyEvent. 为了实现键盘的监控,从新开发一个输入法是不现实的,一般的操作就是在系统的输入法机制中添加接口回调.我们知道,再应用程序中拿到按键的回调一般是监听o

Python在Android系统上运行

下载 Scripting Layer for Android (SL4A) https://github.com/damonkohler/sl4a https://www.tutorialspoint.com/sl4a/ https://mafiadoc.com/python-for-android-documentation_59bd673b1723ddb63c355d46.html pydev 功能及使用示例 http://blog.csdn.net/lainegates/article/d

在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6578352 在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行.今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件.因此,软件和硬件的关系,在一定程度上可以说,硬件是为软件服务的.硬件工程师研发出一款硬件设备,自然少了软件工程师为其编写驱动程序:而驱动程序的最终目的,是为

在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务(老罗学习笔记5)

在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行.今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件.因此,软件和硬件的关系,在一定程度上可以说,硬件是为软件服务的.硬件工程师研发出一款硬件设备,自然少了软件工程师为其编写驱动程序:而驱动程序的最终目的,是为了使得最上层的应用程序能够使用这些硬件提供的服务来为用户提供软件功能.对Android系统上的应用软件来说,就是要在系统的Application Frameworks