结构分析
查看 apk包的占用大小 :
打开方式:Andr oi dSt udi o下 ——>Bui l d——>Anal y zeapp)
APK包结构如下: 1.l i b/ :包含特定于处理器软件层的编译代码。该目录包含了每种平台的子 目录,像 ar meabi ,ar meabi v 7a, ar m64v 8a,x86,x86_ 64,和 mi ps。大多 数情况下我们可以只用一种 ar meabi v 7a,后面会讲到原因。 2.asset s/ :包含应用可以使用 Asset Manager对象检索的应用资源。 3.r es/ :包含未编译到的资源 r esour ces. ar sc, 主要有图片资源文件。 4.METAI NF/ :包含 CERT. SF和 CERT. RSA签名文件以及 MANI FEST. MF 清单文件。 5.r esour ces. ar sc:包含已编译的资源。该文件包含 r es/ v al ues/文件夹所 有配置中的 XML内容。打包工具提取此 XML内容,将其编译为二进制格式,并 将内容归档。此内容包括语言字符串和样式,以及直接包含在 r esour ces. ar sc 文件中的内容路径 ,例如布局文件和图像。 6.cl asses. dex:包含以 Dal v i k/ART虚拟机可理解的 DEX文件格式编译的 类。 7.Andr oi dMani f est . xml :包含核心 Andr oi d清单文件。该文件列出应用程序 的名称,版本,访问权限和引用的库文件。该文件使用 Andr oi d的二进制 XML 格式。
对 l i b目录下的文件进行瘦身处理
1.修改 l i b配置:
so文件的优化:通常我们在使用 NDK开发的时候,我们经常会有如下这么一段代码:
ndk{
//设 置 支 持 的 so库 架 构
abi Fi l t er s" ar meabi v 7a" , " x86" , " ar m64v 8a" , " x86_ 64" , " ar meabi "
}
![3Q)O0N]VFHEBL04[)J}WLQ.png
看上面图分析,ar meabi v 7主要不支持 ARMv 5( 1998年诞生) 和 ARMv 6( 2001年诞生) . 目前 这两款处理器的手机设备基本不在我公司的适配范围(市场占比太少) 。 而许多基于 x86的设备也可运行 ar meabi v 7a和 ar meabi NDK二进制文件。对于这些设 备,主要 ABI将是 x86,辅助 ABI是 ar meabi v 7a
2.重新编译 so文件,用更小的库代替
优化 r es, asset s文件大小
1.手动 l i nt检查,手动删除无用资源
在 Andr oi dSt udi o中打开“ Anal y ze”然后选择” I nspectCode…” ,范围选择整个项目,然后点
击” OK” 。配置如下:
![}]KT)BAS}KIH(JU8I.png
2.使用 t i ny png等图片压缩工具对图片进行压缩。
打开网址,将大图片导入到 t i ny png,替换之前的图片资源。
3.将图片替换为 Webp格式。
4.尽量不要在项目中使用帧动画
5.使用 gr adl e开启 shr i nkResour ces
bui l dTy pes{ r el ease{ / / 混淆 mi ni f y Enabl edt r ue / /移除无用的 r esour ce文件 shr i nkResour cest r ue pr oguar dFi l es get Def aul t Pr oguar dFi l e( ' pr oguar dandr oi d. t xt ' ) , ' pr oguar dr ul es. pr o' si gni ngConf i gsi gni ngConf i gs. r el ease
}
}
减少 chasses. dex大小
cl asses. dex中包含了所有的 j av a代码,当打包时,gr adl e会将所有模板力的. cl ass文
件转换成 cl asses. dex文件,当然,如果方法数超过 64K,将要新增其他文件进行存储。可
以通过 mul t i dexi ng分多个文件
可以通过下面几个方法来实现减少代码量 :
1.尽量减少第三方库的引用,这个在上面我们已经做过优化了。
2.避免使用枚举,使用静态常量替代枚举。
3.如果你的 dex文件太大,检查是否引入了重复功能的第三方库