1.SVG(多密度矢量图形)解决 多套图多套图
官方链接:SVG的Google官方描述
使用:
选择local file时候注意psd文件转换成svg图片的时候不支持 “渐变”和“透明度”的
用法
//在主项目的defaultConfig下添加
//支持svg
vectorDrawables.useSupportLibrary =true
// 将SVG图片生成制定维度的png图片
vectorDrawables.generatedDensities('xhdpi','xxhdpi','hdpi','xxxhdpi')
<Image
app:srcCompat="@drawable/ic_mine"
android:layout_width="100dp"
android:layout_height="100dp" />
然后编译下打开debug包下drawable下每个适配版本是否有ic_mine.png
上图
由此可见 我们只需要UI大汉提供一个.svg的图片就能自动生成需要适配的各种版本的.png图片
如果一个项目有200张图 4套分辨率 就是800张。会用svg一套足矣!
使用SVG的注意事项:1.psd不支持 “渐变”和“透明度”
2. 5.0以下不支持
福利来了!
批量倒入svg图片https://pan.baidu.com/s/1o0RDRCHwFU0oQAusyuf13A 提取码: 2is7
2. Tint(一张图的多种颜色实现)
有图有真像
3. 资源打包配置(项目不需要国际化的时候,只配置 “zh”)
由于v7包对国际化做了兼容,所以app打包的string兼容大约30+国家的语言,一般我们一个项目string里面300个参数对应该很正常 若果乘以30+那么打包的时候是不是把多余的冗余资源打包到项目里呢。上图
优化方法
打个debug包看看资源文件
4.动态库打包配置(使用了NDK移除不用打cpu)
主要打几款cpu架构
1.armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
2.arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
3.armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
4.x86: 平板、模拟器用得比较多。
5.x86_64: 64位的平板。
一般打包CPU架构 armeabi(armeabi-v7)这两基本就满足了
做法:在gradle里 添加 ndk{ abiFilters('armeabi','armeabi-v7')}
5.移除无效资源
Refactor -> Remove Unused Resources
(一个就是double shift后,输入”unused”,可以找到remove unused resources进行删除。)
动态ID资源会有问题,谁用谁知道。物理删除,不推荐使用
Analyze -> Run Inspection by Name,键入Unused resources后,选中并执行搜索后会弹出很多无用的资源。你可以选择删除
6. 开启代码压缩混淆
代码压缩开启 minifyEnabled false 在buildType里面配置( debug情况下会 影响项目的构建速度)
7.资源压缩
shrinkResources true资源压缩
shrinkResources true 和minifyEnabled true 区别
minifyEnabled 这个是用来开启删除无用代码,比如没有引用到的代码
shrinkResources 用来开启删除无用资源,也就是没有被引用的文件(经过实测是drawable,layout,实际并不是彻底删除,而是保留文件名,但是没有内容,等等),但是因为需要知道是否被引用所以需要配合mififyEnable使用,只有当两者都为true的时候才会起到真正的删除无效代码和无引用资源的目的
未完待续。。。。。。