splits——安卓gradle

一、前言

今天分享 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 配置,請進傳送門

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章