在項目 res
右鍵出來,New ---> Vector Asset
,SVG 圖不會像位圖同樣由於縮放而使圖片質量降低,優勢在於節省空間和內存,經常用於一些簡單的圖標。java
若是是從外部導入SVG,須要也是右鍵res---new---Vector Asset
,須要注意的是:Asset Type
勾選的是: Local File
, 須要注意的是這個psd
圖片不支持漸變和透明度,以下圖:android
導入進來後,自動生成 xml
.git
這裏提供一個
android
全部 自帶的svg
圖片的地址: megatronking.github.io/SVG-Android…github
批量轉化 svg2vector
的工具,這裏能夠 下載 , 是一個 svg2vector-cli-1.0.1.jar
. 這個是最新版本web
操做命令是:bash
java -jar svg2vector-cli-1.0.1.jar -d (svg圖片所在的目錄) -o (輸入目錄生成vector的目錄)
//指定寬和高
java -jar svg2vector-cli-1.0.1.jar -d D:\svg -o D:\vector -w 24 -h 24
例如:
java -jar svg2vector-cli-1.0.1.jar -d C:\Users\xuqianqian\Desktop\svg\images -o C:\Users\xuqianqian\Desktop\svg\vector-image
複製代碼
將svg
圖片生成指定目錄的圖片。架構
須要在咱們的app 的
build.gradle
文件中配置app
android{
defaultConfig{
...
//將svg生成指定目錄的png, 下面可指定目錄
vectorDrawables.generatedDensities('hdpi','xhdpi')
....
}
}
//在佈局中用法
android:src="@drawable/eye"
複製代碼
配置完成後,咱們能夠點擊 Build APK(s)
,觀察生成的apk
裏面的文件:svg
咱們在咱們指定的目錄下drawable-hdpi 和 drawable-xhdpi
發現了 咱們svg 圖片生成了對應的 png
圖片。這樣的好處是咱們能夠避免配置多套圖在每一個分辨率下,用 svg 圖能夠自動幫咱們生成指定目錄的圖片。工具
在 Android 5.0 以前,能夠向上面那麼配置,那麼5.0以後,若是配置呢?
vectorDrawables.useSupportLibrary=true
implementation 'com.android.support:appcompat-v7:28.0.0'
//在佈局中用法
xmlns:app="http://schemas.android.com/apk/res-auto"
app:srcCompat="@drawable/eye"
複製代碼
經過使用 svg
圖片,解決了咱們大量使用套圖的問題。
tint 着色器就是能夠改變咱們一些圖標的顏色,例如:
上述那個圖片是黑色的,咱們經過添加屬性 android:tint="@color/colorAccent"
, 就能夠改變它的顏色:
咱們常常會遇到例如點擊按鈕變顏色啥的,之前常常弄兩張圖,一個常態的icon, 一個點擊態的 icon. 有了這個着色器,有些icon 咱們不須要用兩張圖啦。例如:
res--color--tint_honor_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorPrimary" android:state_pressed="true"/>
<item android:color="@android:color/transparent"/>
</selector>
複製代碼
再來一個 res-drawable-tint_honor_src.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/next" android:state_pressed="true"/>
<item android:drawable="@drawable/next"/>
</selector>
複製代碼
xml
中:
<ImageView
android:layout_marginTop="30dp"
android:clickable="true"
android:focusable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/tint_honor_src"
android:tint="@color/tint_honor_color"
/>
複製代碼
因爲使用第三方庫,例如
v7
包的引入,庫中包含了大量國際化資源,咱們能夠根據實際狀況,配置咱們所須要的語言,去除其它語言,從而減小strings
文件的大小
從上圖咱們看到默認幫咱們生成不少國家的語言,咱們能夠只保留中文,配置以下:
//只保留咱們指定的語言
resConfigs('zh-rCN','ko')
複製代碼
再次 Build APK
查看:
經測試,apk 的大小仍是有所減小的。
在咱們 libs 目錄下配置指定
so
庫,咱們知道,真機CPU通常都是armeabi
的, 模擬器通常都x86
的 ,還有一些armeabi-v7a mips
等,通常要根據咱們實際狀況,只保留對咱們真實有用的 cpu ,若是不進行配置,就會打包全 cpu 架構的動態庫到apk中。
將so庫打包到apk中:
souceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
複製代碼
配置以下:
ndk{
abiFilters('armeabi','armeabi-v7a')
}
複製代碼
未避免咱們移除了重要的文件,移除以前最好備份,由於都是物理刪除,沒了就沒了。
第一種看不見的刪除。按照圖示操做:
執行以後,你會發現沒有用的資源文件都被刪除了,在實驗這個以前,你能夠添加複製幾個無用的資源,觀察執行以後是否還在,通常執行以後就沒有了,特別注意:這種操做是物理刪除,不會展現哪些文件須要刪除,而是一次性將其刪除,刪除需謹慎。
第二種操做是:會給咱們列出須要刪除無用的資源,以下:
搜索找到 unused resources
, 以後會列出無用資源,例如:
上述文件都是我複製出來的,以後再決定是否刪除。
即對源代碼進行混淆,還須要同時配置
proguard
文件,由於有些第三方庫啥的一些類不能混淆,須要各自配置。
開啓混淆:
buildTypes {
release {
minifyEnabled true // 改成true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 複製代碼
//以debug爲例,開啓資源縮減,必須將 minifyEnabled 設置爲 true, 不然會報錯
debug {
minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } 複製代碼
若是有想要保留或捨棄的特定資源,須要在項目中建立一個包含 標記的 xml 文件,並在tools:keep
屬性中指定每一個要保留的資源,在tools:discard
屬性中指定每一個要捨棄的資源。這兩個屬性都接受逗號分隔的資源名稱列表。壓縮配置: res/raw/keep.xml
該文件不會打包到apk
中 .
稱爲嚴格的資源檢查:
示例:
<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:discard="@color/tint_honor_color1"
tools:keep="@drawable/next1"
tools:shrinkMode="strict"
/>
複製代碼
使用以後,會出現什麼效果呢:
對於 tint_honor_color1
咱們選擇要捨棄,Build APK
以後,查看裏面的文件發現就爲空了,而咱們保留的
next1
文件沒有爲空,由於咱們保留 keep
了。
webp 格式是谷歌推出的一種有損壓縮格式,這種圖片格式相對於png或jpg 格式的圖片損失的質量幾乎能夠忽略不計,可是壓縮後圖片的體積卻比png或jpg要小不少。
能夠親自找一張大圖,目前已經集成到android studio
中了,導入 android studio
中後,右鍵 ---conver to Webp ,就能夠進行轉化。親測能夠將一個4M 左右的圖片 變爲 400多kb. 圖片質量也很高。
相信通過層層處理,apk
大小必定會有所減少, 不斷補充。