但是这个工具使用的输入文件是sparse ext4fs image镜像[参见博文:http://blog.csdn.net/howellzhu/article/details/43165507]。因此很多同学因此碰到如下的错误:
__init__ValueError: Magic should be 0xED26FF3A but is 0x00000000
注意到windows下的大多数工具都只能制作raw ext4fs镜像,很多同学无法制作sparse ext4fs镜像。因此本文提供工具直接由raw ext4fs镜像来制作system.new.dat,并且提供linux和windows版本工具下载。
制作步骤:
[欢迎转载,但请注明出处:http://http://blog.csdn.net/howellzhu]
1. 由system目录制作raw ext4fs镜像system.rimg:
比如参考linux下的Android提供的make_ext4fs工具,则使用如下的命令:
$ make_ext4fs -T 0 -S file_contexts -l 1073741824 -a system system.rimg system/
简单解释一下,
-T代表对镜像中的unix文件时间戳进行设置,这里设置为0,表示1970-1-1。
-S 代表file_contexts,即selinux的文件selabel,必须指定;注意是大写S。
-l 表示文件分区的length,也是制作出来的镜像文件的大小;这里n5指定为1G。
-a 表示android中分区的名字,这里表示system分区;
system/表示制作源目录。
通过上面的步骤,得到一个1GB的文件system.rimg。
需要注意2点:
1) 一定不要用-s参数,因为-s参数会生成sparse image,不适合第二步的工具;
2) -T参数是android-5.0才加入的参数,如果你的make_ext4fs工具不支持该参数,请去掉后执行;
2. 用rimg2sdat工具制作system.new.dat:
[欢迎转载,但请注明出处:http://http://blog.csdn.net/howellzhu]
下载博文最后提供的rimg2sdat工具,然后执行:
$ ./rimg2sdat system.rimg
这样,会在当前目录下生成2个文件:system.new.dat system.transfer.list。自己再创建一个空的system.patch.dat即可。
附录: