Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> 系統備份 >> 如何完全備份android系統上的system分區和data分區

如何完全備份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上通過命令行的方式執行。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved