快速清理项目中的未使用资源

原文约3700字,阅读约需9分钟。发表于:

项目由于初期直接把两个app的资源文件全部复制到了项目内,需要图片的时候就可以直接引用了。但是,这么做的坏处就是安装包的体积有点太大了。这两天一个想上苹果的应用商店,另外一个是准备发小程序。 用的日历插件依然是各种bug,这个放到另外一篇文章再说吧,整个插件已经改了无数的内容了。 为了精简没有使用的资源,搜索了一下貌似也没什么好办法。还是自己想办法解决吧,初步想了一下: 1.找出代码中引用的各种图片资源,通过再文件中查找的方法来处理代码,命令中的>>用于追加,如果只用>则会重新从头开始写入。 MacBook-Pro ~ % grep -r ".webp" /Users/zhongming/PycharmProjects/dayima_uniapp/pages >png.txt MacBook-Pro ~ % grep -r ".png" /Users/zhongming/PycharmProjects/dayima_uniapp/pages >>png.txt MacBook-Pro ~ % grep -r ".jpg" /Users/zhongming/PycharmProjects/dayima_uniapp/pages >>png.txt MacBook-Pro ~ % grep -r ".jpeg" /Users/zhongming/PycharmProjects/dayima_uniapp/pages >>png.txt png.txt文件内容: /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/index.vue: src: '/static/my/apk_emotion_2.webp' /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/index.vue: src: '/static/my/apk_emotion_1.webp' /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/index.vue: src: '/static/my/apk_emotion_38.webp' /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/index.vue: src: '/static/my/apk_emotion_9.webp' /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/index.vue: src: '/static/my/apk_emotion_28.webp' /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/page/login.vue: /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/page/user.vue: src="/static/my/data_icon_zhouqi.webp"> /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/page/user.vue: src="/static/my/apk_image_chose_bg.webp"> /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/page/user.vue: src="/static/my/txy_ico_bmpn_heart.webp"> /drives/F/uniapp_projects/uniapp-app.ma.dayi/pages/page/user.vue: url: '/pages/page/webpage' 通过上面的文件内容,基本就能定位到所有的图片资源了。 2.有了文件,那么剩下的就是遍历目录下所有的资源,将代码中没有使用的删除掉。 import os from pathlib import Path import hashlib import shutil source_file_paths = [ Path(r'/Users/obaby/PycharmProjects/dayima_uniapp/static/icons'), Path(r'/Users/obaby/PycharmProjects/dayima_uniapp/static/my'), ] def print_hack(): print('*' * 100) # f = Figlet(font='slant') print('Blog: http://www.h4ck.org.cn') print(' http://nai.dog') print('*' * 100) def check_empty_by_scandir(path): with os.scandir(path) as it: return not any(it) def clean_images_in_dir(p): with open(r'/Users/obaby/png.txt', 'r') as f: data = f.read() global done_paths print('=' * 200) print('[M] 开始复制目录' + p.name + ' ......') for img in p.glob('*.*'): print(img.name) # 处理小于100k文件 if img.name not in data: try: img.unlink() except : pass print('[*]' + img.name + ' 已经删除') print('[*]' + p.name + ' 目录清理完成') print('-' * 200) # 按间距中的绿色按钮以运行脚本。 if __name__ == '__main__': print_hack() print('*' * 100) print('[S] 开始处理图片:') for p in source_file_paths: clean_images_in_dir(p) print('[D] 所有目录完成清理。') print('*' * 100) 精简之后的打包效果: 安卓版本apk文件从64m——>25m,效果还是挺明显的: iso版本48m——>9m: web包体积也从40m到了3m左右。效果还是挺明显的。 The post 快速清理项目中的未使用资源 first appeared on obaby@mars.

项目为减小安装包体积,采取了删除未使用图片资源的方法。通过命令行搜索代码中引用的图片,并删除未使用的图片,使得安卓版apk从64MB减至25MB,iOS版从48MB减至9MB,web包体积从40MB降至3MB。

快速清理项目中的未使用资源
相关推荐 去reddit讨论