编译首包
1.使用il2cpp编译导出Android工程
2.使用Android Studio的Apk Analyze分析当前apk的大小
清理插件
这一步是比较快且收益比较高的,一般一些第三方的插件都可以较快的发现和清理,可以把一些不需要的插件进行清理,全局搜索Asset下的Plugins目录,把不需要的删除即可
注:可能有些插件删除了后,编译的apk出现闪退的情况,需要关注AndroidManifest.xml中对插件的引用,在删除插件后,删除对应的配置。
修改编译设置
1.使用il2cpp编译时会出现Strip Engine Code和Managed Stripping Level两个选项,这可以用来设置Unity在编译时剥离未使用代码的程度,可以尝试将Managed Stripping Level设置为high,使导出的libil2cpp.so最小,如果出现程序运行错误,需要排查,可能需要在link.xml中加入一些class,保证它们不被strip,或者将Managed Stripping Level设置为Medium或low。详情可以看Unity官方文档:托管代码剥离
2.ProhectSetting->Graphics中的一些设置需要关注,如Build-in Shader Setting,Shader Stripping,Shader Preloading等
3.BuildSetting中将Compression Method修改为LZ4HC,可以将包体中的资源压缩到最小,且集中打包到单个文件data.unity3d中,便于后续查看包内剩余资源
冗余资源排查
对于Unity项目来说,构建进apk的资源一般都是被scene引用或者存放在Resources中的所以重点观察Assets目录下所有目录名为Resources的文件夹,然后Check一下Build Setting中否有引用不需要的Scene,另外,StreamingAssets下的所有内容也会被无压缩的打入apk包中
对于冗余资源的判断,动态加载的需要通过代码分析,静态引用的可以使用Find Refrence 2等插件排查,也可以通过AssetStudio查看打出的apk包中具体包含的资源,确认是否有不需要的资源被打入
资源压缩
一般来说贴图压缩带来的收益比较大,许多项目使用的是ARGB32的格式,在画质损失程度可以接受的条件下,可以考虑使用ASTC格式压缩,使用AssetStudio工具可以定位占用较大的资源