一、前言
今天分享 splits 配置,從字面意思知道有着 “切開” 的意思,他的作用其實是幫我們把 apk 包從不同維度進行“切開”,減小apk的大小,從而讓用戶在下載時節省流量。
二、splits 的結構簡析
1、splits 的存在位置
Splits 會映射爲 com.android.build.gradle.internal.dsl.Splits
類,沒有繼承任何類。
2、如何運行
splits 主要是用於打包時的拆包,所以我們需要的是進行apk的打包編譯。
// app:clean 爲了先清空之前的文件
// app:aR 進行編譯 release 包
// mac 使用 ./gradlew
// window 使用 gradlew
./gradlew app:clean app:aR
三、splits 的屬性
1、abi
- 類型:AbiSplitOptions
- 描述:對 abi 進行分包處理,具體我們看下面
AbiSplitOptions
講解。
2、AbiSplitOptions 類型
2.1 enable
- 描述:是否開啓 abi 分包,默認不開啓
- 使用:
splits {
abi {
enable true
}
}
- 效果圖:
2.2 exclude
- 描述:排除不需要的架構。
- 使用:
abi {
// 是否開啓
enable true
// 排除不必要的架構
exclude 'x86','arm64-v8a'
}
- 效果圖:
2.3 reset
- 描述:清除默認架構列表。當我們開啓abi 分包時,gradle會幫我們初始化一個架構列表,例如 enable 小節中,我們並沒有設置任何架構,而gradle會幫我們分出 “arm64-v8a”、“armeabi-v7a”、“x86”、“x86_64”。
初始化列表會因爲gradle的版本不同有所改變
- 使用:
abi {
// 是否開啓
enable true
// 重置包含的目錄
reset()
}
2.4 include
-
描述:設置我們需要的架構。注意的是,我們需要先使用reset方法將默認列表清空,然後再設置。
-
使用:
abi {
// 是否開啓
enable true
// 重置包含的目錄,因爲已經是包含全部
reset()
// 設置包含,調用前需要先用 reset 將默認清除
include 'armeabi-v7a', 'x86'
}
- 效果圖:
2.5 universalApk
- 描述:是否編譯一個包含全部架構的apk。
- 使用:
abi {
// 是否開啓
enable true
// 是否打出包含全部的apk
universalApk true
}
- 效果圖:
3、density
- 類型:DensitySplitOptions
- 描述:對 分辨率 進行分包處理,具體我們看下面
DensitySplitOptions
講解。
4、DensitySplitOptions 類型
4.1 enable
- 描述:是否開啓 abi 分包,默認不開啓
- 使用:
density {
// 開啓
enable true
}
- 效果圖:
4.2 exclude
- 描述:排除不需要的分辨率
- 使用:
density {
// 開啓
enable true
// 排除分辨率
exclude 'hdpi', 'ldpi', 'mdpi', 'xhdpi'
}
- 效果圖:
4.3 reset
- 描述:重置默認的分辨率列表。默認會幫我們添加 “ldpi”、“mdpi”、“hdpi”、“xhdpi”、“xxhdpi”、“xxxhdpi”。
默認列表會根據gradle的版本有所不同。
- 使用:
density {
// 開啓
enable true
// 重置默認分辨率列表
reset()
}
4.4 include
- 描述:添加需要的分辨率。值得一提的是,我們需要先用 reset 方法進行清空默認列表。
- 使用:
density {
// 開啓
enable true
// 重置默認分辨率列表
reset()
// 包含分辨率
include 'hdpi', 'xxhdpi'
}
- 效果圖
4.5 compatibleScreens
- 描述:指定與應用程序兼容的屏幕尺寸。會在
AndroidManifest.xml
中添加一個匹配的 < compatible-screens > 節點。不過官方並不建議這麼使用,因爲會限制應用支持的設備類型。我們應該儘可能的支持多種設備。
值得一提的是,< compatible-screens > 節點並不會在 apk 的安裝和使用過程中發揮最用,它是提供給外部使用的,例如google play。
- 使用:
density {
// 開啓
enable true
// 會在 manifest 中添加 < compatible-screens><screen ... >
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
- 效果圖
5、language
僅當爲Android Instant Apps構建配置APK時,才支持構建每個語言的APK。
- 類型:LanguageSplitOptions
- 描述:對 語言 進行分包處理,具體我們看下面
LanguageSplitOptions
講解。
6、LanguageSplitOptions 類型
6.1 enable
- 描述:開啓語言分包。
- 使用:
language {
enable = true
}
6.2 include
- 描述:設置需要分包的語言。
- 使用:
language {
enable = true
include "fr", "zh", "en"
}
四、寫在最後
Gradle項目地址:Github傳送門
本篇博文的 splits 配置,請進傳送門
如果覺得本篇博文對你有所啓發或是解決了困惑,給個贊或關注我呀,小盆友會繼續分享更多的優質文章。
或是請我喝杯咖啡吧,小盆友會更加信心百倍的寫下去