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