apk瘦身的意义我就很少说了,首先让咱们了解一个apk的组成部分,说简单点,一个apk文件就是包含一些文件的压缩包。做为开发者,咱们经过使用 unzip
命令解压这个apk文件一探apk的内部结构。下面的文件结构就是咱们使用 unzip <your_apk_name>.apk
1这个命令所得到的:java
了解完apk的组成部分后,apk瘦身咱们大体能够从这几方面下手: 1 减小java代码 2 减小资源文件 3 减小native_code编程
因此咱们得养成良好的编程习惯,删除没必要要的代码和重复无用的一些资源文件,好比图片,xml等。尽量重用一些资源。可是若是咱们是接手别人项目或者以前习惯很差,而致使太过臃肿等问题,这时候咱们能够借助一些工具。工具
Proguard 是一个很强悍的工具,它能够帮你在代码编译时对代码进行混淆,优化和压缩。它有一个专门用来减小apk文件大小的功能叫作 tree-shaking。Proguard 会遍历你的全部代码而后找出无用处的代码。全部这些不可达(或者不须要)的代码都会在生成最终的apk文件以前被清除掉。Proguard 也会重命名你的类属性,类和接口,然整个代码尽量地保持轻量级水平。gradle
也许如今你会认为 Proguard 是一个至关有效地工具。可是能力越大,责任也就越大。如今许多开发这认为Proguard有点让人不省心,由于它会重度依赖反射。哪些类或者属性须要被处理或者不能处理都要开发者对 Proguard 进行配置。优化
Proguard 只会对 Java 代码起做用,那么对哪些资源文件呢?好比一张图片 my_image
在 res/drawable
文件夹中,没有被使用,Proguard 只会移除掉 R
类中的引用,可是图片依然还在文件夹中。spa
Lint 一个静态的代码分析器,你只需经过调用 ./gradlew lint
这个简单地命令它就能帮你检查全部无用的资源文件。它在检测完以后会提供一份详细的资源文件清单,并将无用的资源列在“UnusedResources: Unused resources” 区域之下。只要你不经过反射来反问这些无用资源,你就能够放心地移除这些文件了。code
Lint 会分析资源文件(好比 /res
文件夹下面的文件) ,可是会跳过 assets 文件 ( /assets
文件夹下面的文件)。事实上assets 文件是能够经过它们的文件名直接访问的,而不须要经过Java引用或者XML引用。所以,Lint 也不能断定某个 asset 文件在项目中是否有用。这全取决于开发者对这个文件夹的维护了。若是你没有使用某个asset 文件,那么你就能够直接清除这个文件。xml
这里主要涉及到屏幕适配的图片问题,能够根据咱们产品用户的层次来进行适配,如今市场上大多数手机都是1280 * 800 以上的,咱们只需适配一两套图片便可,我一般用的都是xhdpi。接口