apk-channelization
apk-channelization copied to clipboard
Raw file lost after repackage
原始的模板apk中是包含 raw目录下文件,重打包之后 raw目录下文件都丢失了。
可参考#3
@javalue 你可以将修改后的提一个pr
好的,@yrom,我在后续开发中,又发现, 在gradle中的那个task,好像在2.2以后就失效了。大致搜了一下,好像是那个afterEvaluate的函数更新了,这是一个问题。然后是2.2打出来的apk好像精简掉了一些zip(apk)信息,会导致unzip失败,好像是报什么unzip 超过1980,请问有什么好的办法去解决吗。
@javalue 1980这个问题我遇到过,unzip之后很多文件的时间都会变成低于1980,然后使用
shutil.make_archive(tempzip_name, 'zip', temp)
进行zip打包的时候会判断文件时间,在zipfile.py:
self.filename = filename # Normalized file name
self.date_time = date_time # year, month, day, hour, min, sec
if date_time[0] < 1980:
raise ValueError('ZIP does not support timestamps before 1980')
我的解决方法是在unzip后进行修改时间,把time<1980的都改成now:
- repackage.py
os.system('unzip -q '+apkfile+' -d '+temp)
# update time
updatetime.update_file_time(temp)
- updatetime.py
#!/usr/bin/env python
import os, time
def update_file_time(dir_path):
for root,dirs,files in os.walk(dir_path):
for file in files:
file_path = os.path.join(root, file)
st = os.stat(file_path)
mtime = time.localtime(st.st_mtime)
file_time = mtime[0:6]
#ZIP does not support timestamps before 1980
if file_time[0] < 1980:
now = int(time.time())
os.utime(file_path, (now, now))
@yrom 工头,我提了个PR https://github.com/Bilibili/apk-channelization/pull/4 ,你看看。。
@javalue unzip失败是因为Android升级了签名方式导致。话句话说,这个多渠道打包的方式已经落伍了~ 如果你的项目已经开始使用v2签名,建议参考或使用美团的兼容v2签名的渠道打包方式Walle
@yrom 这个之前就有看到过,把channel写在zip的block里,有点不算是“正规”的方法,而且对apk安装和app的启动有一定的影响。