Android apk瘦身

1.打包之后的apk包含哪些文件

  • classes.dex:是java源码编译后生成的java字节码文件
  • resources.arsc:编译后的布局文件
  • AndroidManifest.xml
  • assets:目录可以存放一些配置文件
  • lib目录下的子目录armeabi存放的是一些so文件或者jar包
  • META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全
  • res:apk图片资源
    2.apk打包的过程
    Android apk瘦身_第1张图片
    打包流程

    流程:
    ① 清单文件(Manifest),资源文件(Resource),资产文件(Assets) 通过aapt工具生成打包之后的资源文件和索引文件(R),其中打包之后的资源文件就是解压一个APK看到的resources.arsc文件.
    ② 源代码和Lib文件由javac编译成.class文件,再由dx工具编译成.dex文件
    ③ 然后再由apkbuilder –u工具生成没有签名的apk文件
    ④ 最后又jarsigner加入签名
    3.下面开始进入正题
    方法一:开启minifyEnabled
    这个操作在app的gradle里面配置
buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

默认配置是false,改成true即可,就是为了开启proguard
proguard的作用除了混淆,还能删除无用的类和方法,已达到瘦身的目的
方法二:开启shrinkResources

release {
            minifyEnabled false
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

该功能是去除项目中临时展示的图片,比如在布局文件中某个imageview设置的src
方法三:压缩图片
就是想办法使项目中使用图片变小些,可以参考一下几种方法:
(1)TinyPNG 使用一种智能有损压缩技术(通过降低图片中的颜色数量,来减少存储图片所需要的数据)来降低 PNG 图片的大小。这样的压缩对图片的效果影响是很小的,但是可以大大降低图片的大小,并且还能保持 PNG 的 透明度
因为 TinyPNG 将 PNG 图片压缩成 8 位的 PNG(而不是24位),所以它的压缩比例非常高,至少都有 50% 以上的压缩比例,有些甚至可以达到70%,并且压缩之后的图片和原图人眼基本看不出区别。
参考网站:http://tinypng.com/
(2)对于非透明的大图,使用jpg比png大小更有优势.
(3)使用webp格式的图片,从Android 4.0+开始原生支持,但是不支持包含透明度,直到Android 4.2.1+才支持显示含透明度的webp,使用的时候要特别注意
了解webp, 请点击:
http://isux.tencent.com/introduction-of-webp.html

方法四:尽量使用代码生成图片
比如可以用shape文件代替图片

方法五:apk包打好以后,可以删除res目录下drawable-ldrtl文件夹
drawable-ldrtl是layout-direction-right-to-left的缩写,意味着布局方式从右到左,主要是为了适配阿拉伯语用。这应该是API17,即Android4.2上新出的功能

附录:
辅助分析工具

  • nimbledroid:能够得知app内存使用,网络使用,磁盘输入/输出,文件大小等一些NimbleDroid认为至关重要的数据;
    • 官网:https://nimbledroid.com/

你可能感兴趣的:(Android apk瘦身)