资源简介
android镜像system.new.dat解包解压缩sdat2img。
使用说明:需安装python环境,将system.new.dat,system.transfer.list和解压文件放在同一目录下,linux系统下,直接执行.py文件;windows下,直接双击执行.bat文件
代码片段和文件信息
#!/usr/bin/env python
#encoding:utf8
#===============================================================================
# FILE: sdat2img.py
# AUTHOR: luxi78@gmail.com
# CREATED: 2014年12月21日 15时25分15秒 CST
# REVISION: ---
#===============================================================================
import sys
TRANSFER_LIST_FILE = ‘system.transfer.list‘
NEW_DATA_FILE = ‘system.new.dat‘
OUTPUT_IMAGE_FILE = ‘system.img‘
BLOCK_SIZE = 4096
def rangeset(src):
src_set = src.split(‘‘)
num_set = [int(item) for item in src_set]
if len(num_set) != num_set[0]+1:
print ‘Error for parsiing following data to rangeset:\n%s‘ % src
sys.exit(1)
return tuple ([ (num_set[i] num_set[i+1]) for i in range(1 len(num_set) 2) ])
def parse_transfer_list_file(path):
trans_list = open(TRANSFER_LIST_FILE ‘r‘)
version = int(trans_list.readline())
new_blocks = int(trans_list.readline())
for line in trans_list:
line = line.split(‘ ‘)
cmd = line[0]
if ‘0\n‘ == cmd:
print ‘read 0\\n‘
elif ‘erase‘ == cmd:
erase_block_set = rangeset(line[1])
elif ‘new‘ == cmd:
new_block_set = rangeset(line[1])
else:
print ‘Error command %s‘ % cmd
trans_list.close()
sys.exit(1)
trans_list.close()
return version new_blocks erase_block_set new_block_set
def init_output_file_size(output_file_obj erase_block_set):
max_block_num = max(pair[1] for pair in erase_block_set)
output_file_obj.seek(max_block_num*BLOCK_SIZE - 1)
output_file_obj.write(‘\0‘)
output_file_obj.flush()
def main(argv):
version new_blocks erase_block_set new_block_set = parse_transfer_list_file(TRANSFER_LIST_FILE)
output_img = file( OUTPUT_IMAGE_FILE ‘wb‘)
init_output_file_size(output_img erase_block_set)
new_data_file = file(NEW_DATA_FILE ‘rb‘)
for block in new_block_set:
begin = block[0]
end = block[1]
block_count = end - begin
print “Reading %d blocks...“ % block_count
data = new_data_file.read(block_count*BLOCK_SIZE)
print “writing to %d...“ % begin
output_img.seek(begin*BLOCK_SIZE)
output_img.write(data)
print “finish!“
output_img.close()
new_data_file.close()
if __name__ == “__main__“:
main(sys.argv)
- 上一篇:课题设计——科研成果申报管理系统JSP
- 下一篇:SpringBoot实战
相关资源
- android带百分比进度条的文件上传,使
- 美食天下项目Android版源码和Web版源码
- Android之自定义ToggleButton使用
- Android非常漂亮的登录界面
- pc与android通过usb socket实现手机通信
- android毕业设计
- 百度地图自定义Markerandroid
- Android分区工具包
- android-support-v4.jar已打包进去源代码
- u-blox_Android_GNSS_Driver_v3.10驱动源码+中
- 个人根据Android移动开发案例详解手写
- android 视频播放器 项目和原码
- Android【动画】【特效】 17种动画特效
- 基于Android智能家居详细设计(经典)
- android通过JDBC连接Mysql数据库
- Android通讯录的源代码
- android 瀑布流Demo
- 指纹传感器FPC1080在android下的驱动
- delphi xe5 android 调用照相机摄像头拍照
- Android手机连连看游戏源码
- android-sdk-windows v2.3离线完整版
- android 底部弹出菜单(带透明背景)
- Android工程模式简介.rar
- Android蓝牙和Cors网络开发源码
- Android powermanger wakelock
- Android v7的一些jar包
- 最新android supportV7包
- android图片压缩工具类分享
- 单机搭建Android(解决Network is unreach
- Android上监听收到的短信(SMS)
评论
共有 条评论