百战不殆——Android 性能优化的那些事"/>
知己知彼,百战不殆——Android 性能优化的那些事
前言
随着业务复杂度的逐渐增加,代码、资源也在不断的增加,此时你的APP大小也在增加; 从用户层面来说,面对动辄几十兆的APP来说在非WIFI情况下还是会犹豫要不要下载,不下载你就可能因此失去了一个用户;从公司层面来讲,流量就是钱,减少APP的大小就显得尤为重要;从开发者层面上来讲,你掌握了这个手艺也会略显逼格满满
废话不多说了,开始正题
APK结构的那些事
知己知彼,方能百战不殆; 了解应用程序APK的结构对于我们来说很有帮助,APK文件由一个ZIP存档组成,其中包含组成应用程序的所有文件;这些文件包括Java类文件,资源文件和包含编译资源的文件
APK包含以下目录:
- META-INF/: 包含CERT.SF和 CERT.RSA签名文件以及MANIFEST.MF 清单文件
- assets/: 包含应用可以使用AssetManager对象检索的应用资源
- res/: 包含未编译到的资源 resources.arsc
- lib/: 包含特定于处理器软件层的编译代码; 该目录包含了每种平台的子目录,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips
- resources.arsc: 包含已编译的资源;该文件包含res/values/ 文件夹所有配置中的XML内容。打包工具提取此XML内容,将其编译为二进制格式,并将内容归档;此内容包括语言字符串和样式,以及直接包含在resources.arsc文件中的内容路径 ,例如布局文件和图像
- classes.dex: 包含以Dalvik / ART虚拟机可理解的DEX文件格式编译的类
- AndroidManifest.xml: 包含核心Android清单文件。该文件列出应用程序的名称,版本,访问权限和引用的库文件。该文件使用Android的二进制XML格式
来看看淘宝APP的unzip之后的文件目录
一般来讲APK结构中比较大的部分一般是classes.dex、lib、res、assets这些文件或者目录; 所以接下来将会针对这四种情况进行讲解,另外,我们通过APK Analyser 可以分析 APK
减小 classes.dex
classes.dex 包含了所有 Java 代码; 当你编译你的应用时,gradle 会将你的所有模块里的 .class 文件转换成 .dex 文件并将这些文件合成一个 classes.dex 文件;单个的 classes.dex 文件可以容纳大约 64K 方法;如果你达到了这个限制,你必须要在你的工程中启用 multidexing。这将会创建另一个 classes1.dex 文件去存储剩下的方法。所以 classes.dex 文件数目由你的方法数而定
减少第三库的使用
随着业务的频繁变更以及复杂度的增加,我们往往会使用第三方Libaray; 有时候我们可能仅仅用到了很少一部分的功能,这个时候就需要慎重考虑完全引用;从我的开发经验上来讲,宁愿参照自己去实现,也不愿意多引入一个第三方库
避免枚举
一个枚举可以为您的应用程序的classes.dex文件添加大约1.0到1.4 KB的大小,这些添加可以快速累积到复杂系统或共享库; 如果可能,请考虑使用@IntDef注释,这种类型转换保留了枚举的所有类型安全优势
使用ProGuard
下面这段来自 build.gradle 文件的代码用于为发布构建启用
更多推荐
知己知彼,百战不殆——Android 性能优化的那些事
发布评论