Android:分包配置

一、前言

如标题锁说,本篇文字主要总结Android分包的配置,不需要理解或深入,用的时候直接配置即可。通过splits配置gradle,使打包更区别化。

二、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"
}