为什么要减小发行包体积
熟悉App推广的同学都知道,包体积大小对App推广效果有很大的影响。一般而言,App体积越小,同样的推广手段可以达到的效果就越好。
我们与部分开发商沟通后发现,他们的包里存在大量优化空间,优化后平均包体积减少了一半!
所以优化包体积是非常值得好好做的事情。
此外,如果你的包里优化好,使用云打包也能会快一倍。。。
减小发行包体积的方法。
HBuilder里的发行包包含原生安装包和流应用两种类型。
优化包体积的有效的方式包括:
去除无效文件、去除不使用的原生模块、压缩图片、压缩js和css、优化代码。
一、在manifest.json中去除不必要的模块与SDK
此调整仅影响打包的app,不影响流应用体积。
5+Runtime对App及其集成的SDK编译实现了模块化管理,只有选择了需要的模块或SDK,发行为原生安装包时才会将对应的代码编译到最终App中。因此优化原生安装包体积时,一定要确认manifest.json中不包含未使用的模块和SDK
检查manifest.json中是否包含未使用的模块
打开manifest.json可视化视图,选择模块权限配置,检查已选模块中是否存在未使用到的模块
检查manifest.json中是否包含未使用的SDK
打开manifest.json可视化视图,选择SDK配置,检查已选模块中是否存在未使用到的模块
二、压缩图片
未优化的图片体积往往惊人,不仅包大,并且占用很高的内存。
当然图片优化是一种平衡,不应影响视觉体验。
常规图片压缩方案很多,这里再强调下应用图标(icon)及启动界面(splash)的图片优化。
发行为原生安装包时,请尽量不要使用过于复杂的应用图标和启动界面,配置这些信息前,使用图片压缩工具对图片进行压缩。
在Android apk包里需要包含数张分辨率的splash图,会极大增大包体积,可以使用.9.png,一张图解决多个分辨率的适配。
三、使用压缩后的js文件和css文件
框架js、css等较大的js、css文件尽量在提交时使用压缩文件。如mui框架使用mui.min.js和mui.min.css。
在uni-app里,发布时js、css会自动压缩,无需考虑。
四、去除不需要的文件
如果App开发时间越长,里面的废文件越多。有的废文件是忘记删除了、有的是不确认哪里还用过,不敢删。
HBuilder提供了工具帮你优化,包括页面引用关系管理工具、废文件清理工具、UNpackage配置。(注意HBuilderX无此功能)
在HBuilder的manifest里有页面引用关系来描述从入口页面起,相关页面引用资源的关系。你可以通过如下方式生成页面引用关系
1.扫描代码生成页面引用关系
打开manifest.json可视化界面,选择页面引用关系选项卡。点击页面顶部"扫描代码"链接,HBuilder即从入口界面开始扫描和计算页面使用的资源。注意:由于js写法过于灵活,自动扫描结果并非100%准确,需开发者人工确认。如下图
- 使用Android设备(或模拟器)真机运行自动生成页面引用关系(推荐)
打开manifest.json可视化界面,选择页面引用关系选项卡。插入Android设备(或打开Android模拟器)后,点击页面引用关系顶部的"使用Android设备或模拟器真机运行(推荐)"链接,在弹出的菜单中选择一个设备进行真机联调,确保每个页面和功能均点到后,HBuilder即可获取最正确的页面引用关系 - 手动调整
打开manifest.json可视化界面,选择页面引用关系选项卡。选择左侧相关文件,手动维护该页面使用资源及可打开下级页面
如何使用页面引用关系减小包体积
1.打开manifest.json可视化界面,选择页面引用关系选项卡。选择左侧一个文件后,在右侧的其他资源列表中,带“?”角标的文件即为检测到的未被使用的资源,请人工确认该结果是否正确。如下图
- 发行为原生安装包时,如果HBuilder检测到目前项目含有未被使用的资源,会提示用户是否在打包时不提交这些资源。如下图
点击上图链接打开如下界面
勾选相关文件,点击“加入unpackage清单”按钮后,打包时将不再提交这些资源。
关于unpackage的详情说明,可以参考http://ask.dcloud.net.cn/article/480
3.发行为流应用时,如果HBuilder检测到目前项目含有疑似废文件,会提示用户是否在打包时不提交这些资源。如下图
后续操作同步骤2
通常,为达到秒开和流畅的使用体验,流应用对包的体积和首页使用资源有严格要求。发行流应用界面将显示流应用包体积(提交测试后才可以计算出)和首页大小如下图
请特别留意,发行为流应用时尽量控制包大小在1M以内,首页资源在150k以内。
五、不会打包的目录
工程下.开头的目录,比如svn、git目录,以及unpackage目录,是不会被打包的。可以把一些不打包的、暂时又不想删的文件挪到unpackage目录里。
也可以不挪目录,在manifest的源码视图里配置unpackage节点,参阅如何配置unpackage的文件