这篇文章上次修改于 1517 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

1. 解压Android升级包payload.bin文件

需求:提取升级包的payload.bin文件
代码:见附件payload_dumper.zip
注意:Payload Dumper工具只能用于从完整的OTA软件包中提取Payload.bin文件。它不适用于增量OTA软件包。

2. Python使用sudo方式执行命令

需求:自动挂载Android的system.img,复制出system.img内内容并删除挂载点,然后设置拷贝后的内容为755权限
代码:

# 运行环境Linux Python3.7
import os
import uuid
from pathlib import Path    # 新的路径管理模块

origin_img = '/home/paul/decompression_img/lxx-system.img'

path = Path(origin_img)
# 下面是模块常见方法的用法
# print(path.resolve())
# print(str(path.parent))
# print(type(path.parent))
# print(path.anchor)
# print(path.name)
# print(path.stem)
# print(path.suffix)
target_img = str(path.parent) + "/" + path.stem + ".raw" + path.suffix
print(target_img)

res = os.popen('file {0}'.format(origin_img))     # 判断文件是.img.ext4格式,还是Linux原生EXT4模式
des = res.read()
if 'Android sparse image' in des:    
    print(des)

folder = str(path.parent) + "/" + str(uuid.uuid4())
output = folder + "-output"
print(output)
d = os.popen('simg2img {0} {1}'.format(origin_img, target_img))    # 如果是.img.ext4则使用simg2img命令转换为Linux 原生模式使之可以被挂在提取
print(d.read())


os.popen("mkdir {0}".format(folder))    # 创建挂载点
os.popen("mkdir {0}".format(output))    # 创建保存结果文件夹

sudoPassword = 'yours_sudo_password'    # 如果是以root权限执行该脚本,则无下面过程,可直接使用os.popen()方法即可。
mount = "sudo mount {0} {1}".format(target_img, folder)
p = os.system('echo %s|sudo -S %s' % (sudoPassword, mount))

cp_cmd = 'cp -a {0} {1}'.format(folder, output)
p = os.system('echo %s|sudo -S %s' % (sudoPassword, cp_cmd))
umount = "sudo umount {0}".format(folder)
p = os.system('echo %s|sudo -S %s' % (sudoPassword, umount))
rm_cmd = "rm -fr {0}".format(folder)
p = os.system('echo %s|sudo -S %s' % (sudoPassword, rm_cmd))
chmod_cmd = "chmod -R 755 {0}".format(output)
p = os.system('echo %s|sudo -S %s' % (sudoPassword, chmod_cmd))

Linux安装ADBD(Android Debug Bridge)服务

# Linux执行下面命令
sudo apt-get install -y android-tools-adbd
sudo adbd&
# client执行
adb connect IP:PORT 连接即可

VMwareFusion克隆主机修改IP地址

sudo dhclient -r 适配器名称
sudo dhclient 适配器名称
# 若不生效,重启服务器即可

VMwareFusion配置静态IP地址

sudo vim /etc/netplan/
# 编辑的内容如下面两图示意
sudo netplan apply

Snipaste_2020-11-08_20-33-49.jpg
1604838907807.jpg

参考:

ext4解包和重新打包
Packaging and unpacking of 'android' system.img file