awtk/scripts/assets_zip.py
2024-11-05 16:53:55 +08:00

86 lines
2.7 KiB
Python

import os
import shutil
import sys
import zipfile
def main():
# 获取源目录和目标 ZIP 文件路径
src = sys.argv[1] if len(sys.argv) > 1 else 'res/assets'
dst = sys.argv[2] if len(sys.argv) > 2 else 'assets.zip'
create(src, dst)
def create(src, dst):
print(f'SRC={src}')
print(f'DST={dst}')
# 检查源目录是否存在
if not os.path.exists(src):
print(f"{src} not exists")
return
print("preparing...")
# 清理临时目录和目标文件
temp_dir = 'temp'
if os.path.exists(temp_dir):
shutil.rmtree(temp_dir)
if os.path.exists(dst):
os.remove(dst)
# 创建临时目录并复制源目录内容
os.makedirs(temp_dir)
shutil.copytree(src, os.path.join(temp_dir, 'assets'))
# 清理 .inc 文件
assets_dir = os.path.join(temp_dir, 'assets')
inc_files_removed = []
for root, dirs, files in os.walk(assets_dir):
# 删除所有 .inc 文件
for file in files:
if file.endswith('.inc'):
os.remove(os.path.join(root, file))
# 删除特定目录和文件
if 'inc' in dirs:
print(f'clean {os.path.basename(root)}')
shutil.rmtree(os.path.join(root, 'inc'))
# 删除特定路径下的 XML 文件
raw_ui_dir = os.path.join(root, 'raw', 'ui')
raw_styles_dir = os.path.join(root, 'raw', 'styles')
raw_strings_dir = os.path.join(root, 'raw', 'strings')
if os.path.exists(raw_ui_dir):
for xml_file in os.listdir(raw_ui_dir):
if xml_file.endswith('.xml'):
os.remove(os.path.join(raw_ui_dir, xml_file))
if os.path.exists(raw_styles_dir):
for xml_file in os.listdir(raw_styles_dir):
if xml_file.endswith('.xml'):
os.remove(os.path.join(raw_styles_dir, xml_file))
if os.path.exists(raw_strings_dir):
for xml_file in os.listdir(raw_strings_dir):
if xml_file.endswith('.xml'):
os.remove(os.path.join(raw_strings_dir, xml_file))
# 压缩 assets 目录
with zipfile.ZipFile(dst, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(os.path.join(temp_dir, 'assets')):
for file in files:
filenameOutZip = os.path.join(root, file)
filenameInZip = os.path.relpath(os.path.join(root, file), temp_dir);
zipf.write(filenameOutZip, filenameInZip)
# 清理临时目录
shutil.rmtree(temp_dir)
print(f"assets saved to {dst}:")
print(os.path.getsize(dst), "bytes") # 显示文件大小
if __name__ == "__main__":
main()