1. SVG
Scalable Vector Graphics,可缩放矢量图。SVG不会像位图一样因为缩放而让图片质量下降。优点在于节约空间与内存。常用于简单小图标。
svg是由xml定义的,标准svg根节点为<svg>
在Android中通过 Vector实现对svg的支持,根节点<vector>。
https://developer.android.google.cn/studio/write/vector-asset-studio.html
获得一张svg需要先进行转换才能在android当中使用。
如果需要批量的转换SVG可以动过第三方工具转换:
https://github.com/MegatronKing/SVG-Android/blob/master/svg-vector-cli/bat/svg2vector-cli-1.0.0.jar
下载下来就是一个jar包
执行转换命令:
java -jar svg2vector-cli-1.0.0.jar -d 输入路径 -o 输出路径 -h 20 -w 20
-d 指定svg文件所在目录
-f 指定当个svg文件
-h 设置转换后svg的高
-w 设置转换后svg的宽
-o 输出android vector图像目录
建议您将矢量图像限制为最大 200 x 200 dp;否则,绘制它可能需要耗费很长的时间
SVG兼容
Android 5.0(API 级别 21)及更高版本会提供矢量图支持。如果应用的最低 API 级别低于以上版本则需要做兼容处理。
png生成:
app/build.gradle 中添加generatedDensities =['xhdpi','hdpi']
在drawable/test.xml矢量图会生成一个png图片
支持库:
需要Android 支持库 23.2 或更高版本、适用于 Gradle 的 Android 插件 2.0 或更高版本,且仅使用矢量图。利用支持库中的 VectorDrawableCompat 类,可实现在 Android 2.1(API 级别 7)及更高版本中支持 VectorDrawable。
2.Tint着色器
tint能够实现图片变色,利用tint显示不同颜色的图片,原本需要多张相同图片不同颜色的情况,能够减少apk的体积
selector点击效果:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/src_selector"
android:tint="@color/tint_selector" />
color文件夹下tint的color
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorAccent" android:state_pressed="true"/>
<item android:color="@color/colorPrimary" android:state_pressed="false"/>
</selector>
drawable的selector
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/zhi" android:state_pressed="true"></item>
<item android:drawable="@drawable/zhi" android:state_pressed="false"></item>
</selector>\
3. webp
把png、jpeg转换成webp
4. 资源压缩
由于第三方库,如appcompat-v7的引入,库中包含了大量的国际化资源,根据情况通过配置删除。
默认打包的APK是带有很多不同语言的资源,比如日文的字符、韩文的字符,你没有写打包的时候也会生成。
如果只想支持中文和英文,我们通常在默认的values里面的strings.xml写中文,在新建一个values-en里面的strings.xml写英文。这个时候可以在Gradle里配置:
只保留英文资源和默认资源。
5. 动态库打包配置
真机我们只要打包armeabi-v7a的动态库就行。
6. 删除无效的资源
在Android Studio上可以一键删除可能无效的资源,仅仅是可能无效。
但是我们不能这样做,因为会误删除,概率还不小。
使用Lint检查:
选择我们的主工程
这里还需要结合代码选择删除。
7. 代码压缩和资源压缩
官网说明:
https://developer.android.google.cn/studio/build/shrink-code.html#shrink-resources
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
资源压缩:
debug{
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
这样默认的压缩比较宽松,要执行严格的资源压缩:
在res下建raw文件夹(res/raw/),并建keep.xml,在 keep.xml 文件中将 shrinkMode 设置为 strict,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:shrinkMode="strict" />
资源压缩也会存在误删除,则需要自定义要保留的资源,也可以在keep.xml中:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
tools:discard="@layout/unused2" />
tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。