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