在制作差分包的过程中发现这个问题,后来发现这个项目在编译的过程中就已经报错了,只是不影响.img .bin文件的生成而已。
错误提示:
Traceback (most recent call last):
File "./build/tools/releasetools/ota_from_target_files", line 1107, in <module>
main(sys.argv[1:])
File "./build/tools/releasetools/ota_from_target_files", line 1075, in main
WriteFullOTAPackage(input_zip, output_zip, OPTIONS.fota)
File "./build/tools/releasetools/ota_from_target_files", line 460, in WriteFullOTAPackage
Item.GetMetadata(input_zip)
File "./build/tools/releasetools/ota_from_target_files", line 177, in GetMetadata
name, uid, gid, mode = line.split()
ValueError: too many values to unpack
make: *** [out/{Project Name}/target/product/<span style="font-family:Arial,Helvetica,sans-serif">{Project Name}</span>/<span style="font-family:Arial,Helvetica,sans-serif">{Project Name}</span>-ota-eng.root_2k.zip] Error 1
错误的函数:
def GetMetadata(cls, input_zip):
try:
# See if the target_files contains a record of what the uid,
# gid, and mode is supposed to be.
output = input_zip.read("META/filesystem_config.txt")
except KeyError:
# Run the external 'fs_config' program to determine the desired
# uid, gid, and mode for every Item object. Note this uses the
# one in the client now, which might not be the same as the one
# used when this target_files was built.
p = common.Run(["fs_config"], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
suffix = { False: "", True: "/" }
input = "".join(["%s%s\n" % (i.name, suffix[i.dir])
for i in cls.ITEMS.itervalues() if i.name])
output, error = p.communicate(input)
assert not error
for line in output.split("\n"):
if not line: continue
name, uid, gid, mode = line.split()
i = cls.ITEMS.get(name, None)
if i is not None:
i.uid = int(uid)
i.gid = int(gid)
i.mode = int(mode, 8)
if i.dir:
i.children.sort(key=lambda i: i.name)
# set metadata for the files generated by this script.
i = cls.ITEMS.get("system/recovery-from-boot.p", None)
if i: i.uid, i.gid, i.mode = 0, 0, 0644
i = cls.ITEMS.get("system/etc/install-recovery.sh", None)
if i: i.uid, i.gid, i.mode = 0, 0, 0544
解决:这个问题最终解决了,首先回顾项目背景
改项目有通过暗码可以切换19个运营商,因为各个运营商开关机动画,壁纸等不一样,还有一些出厂自带的apk,也对有的apk做了过滤,为了能正常切换对应运营商实现不同定制,生成编译文件系统中添加了 /SYSTEM/vendor/thirdparty目录并且添加了客户提供的几个apk。
在编译后filesystem_config.txt中也有该目录的体现。但是因为提交apk时直接按照客户给的,没有重命名apk,而apk名字中有空格,就导致了该问题。
错误2
Traceback (most recent call last):
File "./build/tools/releasetools/ota_from_target_files", line 1159, in <module>
main(sys.argv[1:])
File "./build/tools/releasetools/ota_from_target_files", line 1136, in main
OPTIONS.source_info_dict = common.LoadInfoDict(source_zip, OPTIONS.device_type)
File "/workspace/Q885SHIP/build/tools/releasetools/common.py", line 111, in LoadInfoDict
raise ValueError("can't find recovery API version in input target-files")
ValueError: can't find recovery API version in input target-files