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// 是否打出包含全部的apkuniversalApk 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 = trueinclude "fr", "zh", "en"
}
四、写在最后
Gradle项目地址:Github传送门
本篇博文的 splits 配置,请进传送门
如果觉得本篇博文对你有所启发或是解决了困惑,给个赞或关注我呀,小盆友会继续分享更多的优质文章。
或是请我喝杯咖啡吧,小盆友会更加信心百倍的写下去
splits——安卓gradle相关推荐
- gradle入门,安卓gradle入门
http://www.bkjia.com/Androidjc/981624.html 随着Android Studio越来越完善,更多的开发者舍弃掉Eclipse.但是新的IDE与以往的Eclipse ...
- defaultConfig——安卓gradle
目录 一.前言 二.defaultConfig 1.搞清楚几个问题 2.defaultConfig 的存在形式 3.defaultConfig 中属性的意义 4.defaultConfig 中方法的意 ...
- signingConfigs——安卓 gradle
目录 一.前言 二.signingConfigs 三.signingConfig 结构解析 四.signingConfig 属性 五.一些建议 六.写在最后 一.前言 今天分享 signingConf ...
- 安卓gradle报错
在android开发过程中又报错了,这一次是版本错误第一步我们进行版本同步. 报错信息: android studio报错Error: Gradle project sync failed. Plea ...
- Android App Bundle
1. Android App Bundle 是什么? 从 2021 年 8 月起,新应用需要使用 Android App Bundle 才能在 Google Play 中发布. Android App ...
- 【Android Gradle 插件】 Splits 配置 ② ( Splits#abi{} 脚本块配置 | 根据 CPU 架构进行分包 | AbiSplitOptions 配置简介 )
文章目录 一.Splits#abi{} 脚本块配置 1.配置简介 2.配置原型 3.使用示例 二.AbiSplitOptions 配置简介 1.属性配置简介 2.方法配置简介 3.属性方法配置使用方法 ...
- 【Android Gradle 插件】Splits 配置 ③ ( Splits#density{} 脚本块配置 | 根据屏幕像素密度进行分包 | DensitySplitOptions 配置简介 )
文章目录 一.Splits#density{} 脚本块配置 1.配置简介 2.配置原型 3.使用示例 二.DensitySplitOptions 配置简介 1.属性方法配置简介 2.属性方法配置使用方 ...
- 【Android Gradle 插件】Splits 配置 ④ ( Splits#language{} 脚本块配置 | 根据语言进行分包 | LanguageSplitOptions 配置简介 )
文章目录 一.Splits#language{} 脚本块配置 1.配置简介 2.配置原型 3.使用示例 二.LanguageSplitOptions 配置简介 1.属性方法配置简介 2.属性方法配置使 ...
- 【Android Gradle 插件】 Splits 配置 ① ( BaseExtension#splits 配置 | Splits 配置简介 )
文章目录 一.BaseExtension#splits 配置 1.BaseExtension#splits { } 脚配块配置简介 2.BaseExtension#splits { } 脚配块配置原型 ...
最新文章
- 电子合同的履行_什么是电子合同履行?怎么履行电子合同?
- “稳定”凸包----poj1228
- WWW 2021最佳论文亚军:基于属性补全的异质图神经网络新架构
- 20170822 前端开发日报
- php如何解码图片,php基于base64解码图片与加密图片还原实例_PHP
- tensorflow-yolo3系列配置文章汇总
- 《自顶向下网络设计(第3版)》——2.7 适应性
- javascript高级程序设计第二章知识点提炼
- 离散数学期末复习总结
- 台达plc自由口通讯_自由口通讯问题无法接收数据
- 新版虚拟服务器,新版tplink路由器虚拟服务器(端口映射)设置教程
- 微信小程序分享功能的实现
- 曾经,我以为我很懂MySQL索引
- PLC是怎么工作的?工作原理是什么?
- D365几个功能开发思路
- 【数字基带传输】误码率的分析方法(BER Performance)
- 小鸟云服务器如何通过本地安全策略阻止IP访问?
- SpringBoot企业微信点餐系统
- 让瓶子里的小人跟你互动,它是怎么做到的?
- 渗透测试-流量加密之冰蝎蚁剑