到现在为止我们知道apk大小是一个重要的因素,它涉及用户下载,谁会等30分钟下载一些大型应用程序
减少apk大小.apk的膨胀的是来自两个关键因素-资源和代码,而且由于资源可以解释最大的膨胀,并且是最容易修复的,我们将这里开始.
我们需要做的第一件事,也是最重要的是事情,删除未使用的资源
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
此标志将删除任何不是使用的内容,→您的应用程序使用,这里包括你所做的一切忘记修剪的树和资源和第三方库资源
其次大多数资源膨胀来了 ldpi mdpi tvdpi hdpi xhdpi xxhdpi xxxhdpi 从支持多种分辨率和屏幕你的应用程序的密度.从Android4,4开始,该框架支持,但是我们清楚,只是因为你可以支持所有这些密度,并不意味着您的应用拥有资产的副本,
第三 我们都知道图像账户,每个支持的分辨率的一个版本的drawable xxhdpi :32k mdpi: 6k hdpi:14k Total = 55k .你可以使用一个文件和它 Tatal = 2k 将在加载时生成您需要的分辨率
VectorDrawable 可以使用一个并根据您的需要生成您需要的任何分辨率.他的工作原来如下,VectorDrawable文集创建了一堆形状及其视觉特性,喜欢的类型,位置颜色,旋转等等,加载VectorDrawable文件时系统将每个形状绘制到屏幕上,给你最终的形象因为他只是绘制形状,你可以做任何你喜欢的尺寸,意思是apk内部的单个VD文件,可以让你生产mdpi ,hdpi ,xxxhdpi 图像大大减少你的apk膨胀.另一个很酷动画,您可以在
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/selector_tv"
>
<target
android:animation="@anim/modal_out"
android:name="rotation"/>
<target
android:animation="@anim/modal_out"
android:name="rotation"/>
</animated-vector>
上定义动画,这意味着,不要保留动画的每一帧,退出您支持的每个分辨率,您只需要设置一个xml文件即可
<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/selector_tv"
>
<target
android:animation="@anim/modal_out"
android:name="rotation"/>
<target
android:animation="@anim/modal_out"
android:name="rotation"/>
</animated-vector>
以相同方式转换图形 用更少的资源给出类似的视觉效果
现在,值的指出的是VectorDrawable可以节省一些尺寸,有一些注意事项,您需要考虑使用他们,首先,在运行时在应用程序中加载VectorDrawables与加载jpeg不同
第四,尝试尽可能重用资源,Android提供几个使用程序,修改布局代码中现有的资源,你可以用它来看你希望不必包含一个全新的独特图像,
假设您这两张图片,彼此旋转,你可以通过创建一个旋转的drawable来摆脱一个创造另一个
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
>
android:drawable="@drawable/ic_arrow_expand"
android:fromDegrees="0"
android:toDegrees="270"
</rotate>
现在听起来像是微小的变化,它们可以为您apk节省大量成本
Android框架团队能够使用色彩支持,然后使用xml形状替换九个补丁,然后用矢量drawable替换位图,结果他们的apk可绘制数量减少了80%,
现在是时候确保您的代码了,尽可能苗条
第一步 minifyEnabled true 去除不使用代码
优化代码比方 枚举和协议缓存区,你的.dex文件里面,因此导致膨胀,