资源优化

1、删除无用代码和资源文件
2、压缩图片
3、代码优化
4、混淆
5、分架构构建apk

1、删除无用代码和资源文件

每个应用在版本迭代的过程中都会产生很多弃用代码甚至模块,同时也会产生很多不再使用的资源文件,图片、动画等。统统删除就好了,不要担心以后会不会用到,git已经帮你都备份好了。

删图片是个苦力活,可以通过脚本处理:

from genericpath import isdir
import imghdr
from operator import delitem
import os
from re import search
import re
import string
from sys import path
import sys
from tokenize import String
from typing import List
import os.pathprint("---Analyze unused Assets----")
#项目目录
projectAbsRootPath = sys.path[0]
#图片所在的资源目录路径
assetPath="/images"
#项目中dart代码所在目录
libPath = projectAbsRootPath+ "/lib"
assetAbPath = projectAbsRootPath+assetPathprint("projectRootPath:" + projectAbsRootPath +  "   assets:" +assetAbPath + "     lib:" + libPath)
print("----------开始查找图片--------------")
#遍历目录,将图片存储到list中的方法
def searchImage(filePath:String):list = []isDir = os.path.isdir(filePath)if isDir:for f in os.listdir(filePath):if f.startswith("."):print(filePath+"/"+f)else:tList = searchImage(filePath+"/"+f)list.extend(tList)else:if imghdr.what(filePath) in {"jpg","bmp","jpeg","rgb","tif","png"}:list.append(filePath)return list#项目中使用的图片资源路径集合
imageList = searchImage(assetAbPath)print("-------------遍历dart文件,分析未使用的图片---------")
def matchAndDelImage(contentStr:String,list:List):#遍历拷贝的list,操作原始的list,list[:]是对原始的一个拷贝for imgPath in list[:]:#以文件名匹配图片的使用# pList = imgPath.split("/")# imgName = pList[-1]#以使用的文件路径匹配图片index = imgPath.find(assetPath)imgName = imgPath[index+1:]# print("imgName:"+imgName)imgNameShix = os.path.basename(imgName)# print("imgNameShix:"+imgNameShix)# match = re.search(imgName,contentStr)match = re.search(imgNameShix,contentStr)if match:list.remove(imgPath)# print("used-->" + imgPath)#
def searchImageInDart(filePath:String,list:List):print("----------" + filePath)if filePath.find(".DS_Store") > -1 :returnif filePath.find(".png") > -1 :returnif filePath.find(".ttf") > -1 :returnif os.path.isdir(filePath):for f in os.listdir(filePath):searchImageInDart(filePath+"/"+f,list)else:with open(filePath,"r",encoding="utf-8") as f:contentStr = f.read()f.close()if len(contentStr) != 0:matchAndDelImage(contentStr,list)#
searchImageInDart(libPath,imageList)print("------在dart文件中未找到被使用的图片如下-----size:" + str(len(imageList)))
for img in imageList:print("may be unused-->" + img)# os.remove(img)
print("-------------------分析完成-------------------------------")

该脚本逻辑是遍历文件资源目录下的文件名,扫描lib文件下代码是否包含该文件名,不包含则认为该文件资源未被使用。因此,代码中如过通过拼接文件名等方式使用图片的,无法被脚本识别,如:

//图片名
img1.png
img2.png
//代码使用
int num = 1;
AssetImage('assets/images/img${num}.png')

在执行脚本后,img1和img2会被删除,谨慎使用,删完多测试!

2、压缩图片

以下网站都免费:
tinypng.com
docsmall.com
imageoptim.com
平时养成好习惯,开发过程中就使用压缩过的图片,就能省略这一步啦

3、代码优化

代码优化主要体现在三方库上

  • 移除不再使用的三方库
  • 相同功能,统一使用同一个库。多人共同开发的情况下,有时候会出现不同模块为实现相同或类似功能而导入了相同功能的不同库,减少库的使用,也能减少一定的包体积。

4、混淆

android/app/build.gradle文件下配置:

buildTypes {release {signingConfig signingConfigs.releaseminifyEnabled falseshrinkResources false}
}
  • minifyEnabled:是否启用混淆
  • shrinkResources:是否移除无用资源

注:该配置仅对android native代码生效,flutter层代码打包时默认混淆

5、分架构构建apk

可以参考我的另一篇文章flutter打渠道包

//打包命令
flutter build apk --release --build-number 1 --build-name=1.0.0 --dart-define=APP_CHANNEL=normal --target-platform android-arm,android-arm64 --split-per-abi//--build-number 1:构建的版本号;
//--build-name 1.0.0:构建的版本名;
//--dart-define=APP_CHANNEL=normal :自定义参数,可定义多个(APP_CHANNEL为key,normal为值);
//--target-platform android-arm,android-arm64: 指定生成对应架构的release包;
//--split-per-abi:表示告知需要按照我们指定的类型分别打包,如果移除则直接构建包含所有 CPU 架构的 Apk 包;

其中--split-per-abi表示构建单一架构。
通常我们为了上架时方便,直接构建包含android-arm,android-arm64两种架构的通用包,就能基本满足市场需求。但如果为了包体积更小,我们可以在打包时加上--split-per-abi,分别构建android-arm,android-arm64两个架构的包。

【flutter】应用瘦身优化包体积相关推荐

  1. Android App包瘦身优化

    Android App包瘦身优化 APK瘦身是对程序体验的优化,更大的APK需要占用更多的存储空间. APK的构成 APK瘦身前通过Analyze app分析出来的图片(打开方式:Android St ...

  2. App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)

    Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...

  3. Android性能优化(5):APK瘦身优化

    文章目录 1. APK文件结构 2. APK瘦身优化 2.1 优化dex文件大小 2.1.1 Proguard 2.1.2 AndResGuard 2.2 优化资源文件大小 2.2.1 Android ...

  4. Windows7瘦身优化

    今天装了WIN7,系统运行暂时没发现问题,不过无意中检查C盘,发现系统占用11G左右的空间,真是个宠然大物,到网上搜了下瘦身大法,经过测试,均操作成功.注:大部分文件或文件夹需要取得系统管理员身份运行 ...

  5. Android App包瘦身优化实践

    随着业务的快速迭代增长,美团App里不断引入新的业务逻辑代码.图片资源和第三方SDK,直接导致APK体积不断增长.包体积增长带来的问题越来越多,如CDN流量费用增加.用户安装成功率降低,甚至可能会影响 ...

  6. jar包过大?手把手教你分析Maven依赖,完美“瘦身”优化!

    最近在开发一些新系统,昨天发现一个系统的jar包突然变大好多,其他系统几十mb,它246mb,传输起来慢. 突然想到之前看的一篇文章,有程序员把实况足球传到了SVN上,导致war包巨大.来自" ...

  7. SpringBoot 部署 Jar 文件,瘦身优化指南 !

    以下文章来源方志朋的博客,回复"666"获面试宝典 作者 | Java基基 来源 | https://mp.weixin.qq.com/s/Y5VK7TI1TQBN6O-k5O6h ...

  8. android app性能优化_Android性能优化之Apk 瘦身优化

    瘦身 主要是下载转换率提高 头部App都有Lite版本 渠道合作产商要求 APK 分析工具 ApkTool 反编译工具 官网:https://ibotpeaches.github.io/ApkTool ...

  9. SpringBoot部署Jar文件,瘦身优化指南!

    作者:xautlx gitee.com/xautlx/package-optimize-demo 本文截取代码片段来自于对应的完整示例源码工程: https://gitee.com/xautlx/pa ...

最新文章

  1. STL 之vector详解
  2. [转]一个总成本花费100W的失败项目的小小反省
  3. ASP.NET Core的配置(2):配置模型详解
  4. Redis-学习笔记06【Redis案例】
  5. 5y计算机应用基础题库,数学log练习题和答案.doc
  6. CentOS curses 中文乱码问题
  7. char*转wstring
  8. 如何解决linux下编译出现的multiple definition of错误
  9. 2年20亿搞自动驾驶+环卫,酷哇和中联环境成立合资子公司
  10. 毕业3年,我换了4份工作:好工作,是这样“熬”出来的
  11. 设置元素的高度为百分比,结果不起作用的解决方法
  12. 计算机职称考试软盘,2018年职称计算机考试题库(13)
  13. Mac修改hosts文件
  14. 网页头部的声明怎么写?
  15. 高德地图的测试key_如何获取高德地图api key
  16. 赵小楼《天道》《遥远的救世主》深度解析(11)芮小丹和肖亚文俩人身上值得我们学习的点。
  17. NPDP产品经理证书(2019年04月),NPDP是IBM和华为的IPD的祖师爷。IPD学不到,NPDP还是可以学到的。...
  18. android横屏分辨率,android适配不同分辨率hdpi、mdpi、ldpi横屏竖屏
  19. ubuntu ssh Host key verification failed,Host 10.xxx.xxx.xxx not found in /home/user/.ssh/known_hosts
  20. 管理系统类项目的登陆与权限功能的实现

热门文章

  1. echarts饼图属性
  2. 将txt文本由utf-8转gbk
  3. DataV在浏览器放大缩小以及全屏前后不能自适应问题
  4. 计算机网络(四)-奈氏准则和香农公式
  5. vscode打印中文乱码
  6. 示波器软件-泰克是德普源示波器分析软件NS-Scope
  7. 中国的呼吸机厂家都有哪些
  8. Excel处理字段截取
  9. 东小店南少:做项目就是但行好事,莫问前程,是诸成功。
  10. 罗伯特.巴尼台球教程