一、使用svg
- 1.生成png方式;使用svg图片时,为了兼容5.0以前,需要在app下的build.gradle文件中的android节点下的defaultConfig中添加如下:
generatedDensities = ["xhdpi"]
这样就将svg图片生成指定纬度的png图片供5.0以下的使用;
屏幕快照 2018-10-25 下午2.44.25.png
- 2.使用Android支持库23.2以上或更高版本,适用于Gradle插件2.0以上或更高,在app下的build.gradle中的defaultConfig中配置:
vectorDrawables.useSupportLibrary = true
在dependens中引入
compile 'com.android.support:appcompat-v7:23.2.0'
在xml布局中使用的时候,要使用自定义的命名空间
xmlns:app="http://schemas.android.com/apk/res-auto"
app:srcCompat = "@drawable/ic_launch"
- 3、批量转换svg
as上单个转换svg图像,如果有多个svg需要转换为android的vector,则可以通过第三方工具
https://github.com/MegatronKing/SVG-Android/blob/master/svg-vector-cli/bat/svg2vector-cli-1.0.0.jar
执行转换
java -jar svg2vector-cli-1.0.0.jar -d . -o a -h 20 -w 20-d 指定svg文件所在目录
-f 指定单个svg文件
-h 设置转换后svg的高
-w 设置转换后svg的宽
-o 输出android vector图像目录备注: 命令里面的 . 代表当前目录 a代表输出文件夹名
二、tint着色器
tint能够实现图片变色,利用tint显示不同颜色的图片,原本需要多张相同图片不同颜色的情况,能够减少apk的体积。
image.png
selector点击效果
必须设置src也为一个selector,这个selector设置相同的图片;否则点击没有效果;
image.png
image.png
image.png
使用代码动态着色
//使用代码着色
Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
DrawableCompat.setTint(drawable,getResources().getColor(R.color.colorAccent));
三、资源打包配置
resources.arsc文件是apk包中的res资源的映射文件,里面保存这id映射的值;
由于第三方库,如appcompat-v7的引入,库中包含了大量的国际化资源,根据情况通过配置删除。
由于默认是value和drawable文件下的资源,现在配置保留了一个英文的资源,如果没有英文资源,就忽略了;
image.png
image.png
四、动态库设置
如果项目中包含第三方SDK或者自己使用了ndk,如果不进行配置会打包全cpu架构的动态库进入apk。对于真机,只需要保留一个armeabi(armeabi-v7a)就可以了。
所以可修改配置:
在app下的build.gradle中android节点下的defaultConfig下配置:
ndk{
//设置支持的SO库架构,如果都写上或者不配置,会默认把全架构的都打进apk包
// abiFilter "armeabi-v7a","x86","arm64-v8a","x86_64"
//对于真机,只需要"armeabi"或者"armeabi-v7a"即可
abiFilters "armeabi-v7a"
// //模拟器
// abiFilters "x86"
}
五、移除无用资源
1、在as上有一键移除,如果出现使用动态id使用资源会出现问题(不建议)
image.png
动态获取资源id,未直接使用R.xx.xx ,则这个id代表的资源会被认为没有使用过(类似不能混淆反射类)
//动态获取资源id
int identifier = getResources().getIdentifier("app_name", "string", getPackageName());
String string = getResources().getString(identifier);
2.使用as自带的Lint检查,在analyze选项下的Run Inspaction by Name ,然后输入要检查的项目,指定检测的module,即可;搜出来后,亲在排查,确认没有用的即可删除,不确定的,最好不要删除;
image.png
image.png
image.png
网友评论