java -jar svg2vector-cli-1.0.0.jar -d . -o a -h 20 -w 20
-d 指定svg文件所在目录
-o 输出android vector图像目录
-h 设置转换后svg的高
-w 设置转换后svg的宽
适配问题
因为矢量图是在Android 5.0(API21)才开始支持的,所以这个地方我们还需要适配下。如果不适配,你的最小minSdkVersion版本又小于21,则会自动在每个drawable目录下生成对应的png图片,反而会使apk包变大,所以这里一定要注意了。我们有下面两种方式进行适配:
方式一:生成 png 格式的图片
这种方式是在drawable文件中生成对应的png,不过我们可以指定只生成哪几个。例如如下配置
我们可以在项目的build.gradle中进行如下配置,即可在指定的drawable文件中生成对应的png格式图片。
方式二:支持库
还一种方式就是使用支持库,支持库的版本需要23.2或者更高,也是在项目的build.gradle中进行配置,如下:
这种适配方式使用图片的时候,需要用 app:srcCompat
属性,而不是 android:src
,如下:
通过这个方式只是解决了不同大小需要多张图片的问题,但是还需要有不同颜色的图片。这个我们怎么处理呢?不要急,这个问题谷歌工程师也为我们准备了一个工具,它就是Tint着色器。
Tint 着色器
一般我们矢量图都是使用黑色,然后由Tint着色器去修改颜色,直接在xml中使用即可,如下:
在java代码中,我们可以通过DrawableCompat去设置,如下:
那如果想要实现按键效果,通过 Tint 也能实现吗?答案是可以的。
首先我们需要创建两个选择器,一个是 drawable 选择器,一个是 color 选择器,如下:
然后就可以直接使用了,如下:
总的来说使用Tint找色器去修改矢量图的颜色还是蛮简单的吧。
通过矢量图这个方式,我们就能够减小使用图片的总大小,从而减小apk的大小。
瘦身不是一蹴而就的,所以我们接着减。
动态库移除
so库的相关知识点
说到so库,相信大部分人都有使用过,但是却不知道它到底是什么。其实so库就是由ndk编译出来的动态库。
那我们为什么要把so文件分别放在armeabi、arm64-v8a、armeabi-v7a、x86、x86_64这些文件中呢?
主要是因为我们的app运行在不同的手机中,而so库是由c\c++编译的,不是跨平台的,所以不同平台(不同CPU)需要使用不同的so库。那不同的文件是什么意思呢?我们接着往下看。
ABI
ABI 是应用程序二进制接口简称(Application Binary Interface),定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。在Android 系统上,每一个CPU架构对应一个ABI,即:armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,mips,mips64。
ABI | Supported Instruction Set(s) |
---|---|
armeabi | ARMV5TE and later,Thumb-1 |
armeabi-v7a | armeabi,Thumb-2,VFPv3-D16,Other,optional |
arm64-v8a | AArch-64 |
x86 | x86(IA-32),MMX,SSE/2/3,SSSE3 |
x86_64 | x86-64,MMX,SSE/2/3,SSE3,SSE4.1,SSE4.2,POPCNT |
mips | MIPS32r1 and later |
mips64 | MIPS64r6 |
各版本分析如下:
- mips / mips64:极少用于手机可以忽略
- x86 / x86_64:x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现 对 arm .so 的兼容,再考虑 x86 1% 以下的市场占有率,x86 相关的两个 .so 也是可以忽略的
- armeabi:ARM v5 这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈
- armeabi-v7a:ARM v7 目前主流版本
- arm64-v8a:64位支持
所以现在我们一般只要在项目的build.gradle中适配ARM v7就行了,如下:
结束语
如果你的技术提升遇到瓶颈了,或者缺高级Android进阶视频学习提升自己,这有大量大厂面试题为你面试做准备!
Spring全套教学资料
Spring是Java程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!目前99%的公司使用了Spring,大家可以去各大招聘网站看一下,Spring算是必备技能,所以一定要掌握。
资料领取方式:点击这里前往蓝色传送门
目录:
部分内容:
Spring源码
- 第一部分 Spring 概述
- 第二部分 核心思想
- 第三部分 手写实现 IoC 和 AOP(自定义Spring框架)
- 第四部分 Spring IOC 高级应用
基础特性
高级特性 - 第五部分 Spring IOC源码深度剖析
设计优雅
设计模式
注意:原则、方法和技巧 - 第六部分 Spring AOP 应用
声明事务控制 - 第七部分 Spring AOP源码深度剖析
必要的笔记、必要的图、通俗易懂的语言化解知识难点
脚手框架:SpringBoot技术
它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。
Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。
- SpringBoot入门
- 配置文件
- 日志
- Web开发
- Docker
- SpringBoot与数据访问
- 启动配置原理
- 自定义starter
微服务架构:Spring Cloud Alibaba
同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
- 微服务架构介绍
- Spring Cloud Alibaba介绍
- 微服务环境搭建
- 服务治理
- 服务容错
- 服务网关
- 链路追踪
- ZipKin集成及数据持久化
- 消息驱动
- 短信服务
- Nacos Confifig—服务配置
- Seata—分布式事务
- Dubbo—rpc通信
Spring MVC
目录:
部分内容:
7124615)]
[外链图片转存中…(img-nLlDmHgL-1628077124615)]
[外链图片转存中…(img-YNbsKws4-1628077124616)]
部分内容:
[外链图片转存中…(img-rBgCvgPy-1628077124617)]
[外链图片转存中…(img-dy4U7Lo9-1628077124618)]