splits——安卓gradle

1、前言

今天分享 splits 配置,從字面意思知道有着 「切開」 的意思,他的做用實際上是幫咱們把 apk 包從不一樣維度進行「切開」,減少apk的大小,從而讓用戶在下載時節省流量。android

2、splits 的結構簡析

一、splits 的存在位置

Splits 會映射爲 com.android.build.gradle.internal.dsl.Splits 類,沒有繼承任何類。git

二、如何運行

splits 主要是用於打包時的拆包,因此咱們須要的是進行apk的打包編譯。github

// app:clean 爲了先清空以前的文件
// app:aR 進行編譯 release 包
// mac 使用 ./gradlew 
// window 使用 gradlew 
./gradlew app:clean app:aR
複製代碼

3、splits 的屬性

一、abi

  • 類型:AbiSplitOptions
  • 描述:對 abi 進行分包處理,具體咱們看下面 AbiSplitOptions 講解。

二、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方法將默認列表清空,而後再設置。app

  • 使用:gradle

abi {
	// 是否開啓
	enable true

	// 重置包含的目錄,由於已是包含所有
	reset()
	// 設置包含,調用前須要先用 reset 將默認清除
	include 'armeabi-v7a', 'x86'
}
複製代碼
  • 效果圖:

2.5 universalApk

  • 描述:是否編譯一個包含所有架構的apk。
  • 使用:
abi {
	// 是否開啓
	enable true

	// 是否打出包含所有的apk
	universalApk true
}
複製代碼
  • 效果圖:

三、density

  • 類型:DensitySplitOptions
  • 描述:對 分辨率 進行分包處理,具體咱們看下面 DensitySplitOptions 講解。

四、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的版本有所不一樣。ui

  • 使用:
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。google

  • 使用:
density {
	// 開啓
	enable true
	
	// 會在 manifest 中添加 < compatible-screens><screen ... >
	compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
複製代碼
  • 效果圖

五、language

僅當爲Android Instant Apps構建配置APK時,才支持構建每一個語言的APK。spa

  • 類型:LanguageSplitOptions
  • 描述:對 語言 進行分包處理,具體咱們看下面 LanguageSplitOptions 講解。

六、LanguageSplitOptions 類型

6.1 enable

  • 描述:開啓語言分包。
  • 使用:
language {
	enable = true
}
複製代碼

6.2 include

  • 描述:設置須要分包的語言。
  • 使用:
language {
	enable = true
	include "fr", "zh", "en"
}
複製代碼

4、寫在最後

Gradle項目地址:Github傳送門code

本篇博文的 splits 配置,請進傳送門

若是以爲本篇博文對你有所啓發或是解決了困惑,給個贊或關注我呀,小盆友會繼續分享更多的優質文章。

或是請我喝杯咖啡吧,小盆友會更加信心百倍的寫下去

相關文章
相關標籤/搜索