一、前言

今天分享 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相关推荐

  1. gradle入门,安卓gradle入门

    http://www.bkjia.com/Androidjc/981624.html 随着Android Studio越来越完善,更多的开发者舍弃掉Eclipse.但是新的IDE与以往的Eclipse ...

  2. defaultConfig——安卓gradle

    目录 一.前言 二.defaultConfig 1.搞清楚几个问题 2.defaultConfig 的存在形式 3.defaultConfig 中属性的意义 4.defaultConfig 中方法的意 ...

  3. signingConfigs——安卓 gradle

    目录 一.前言 二.signingConfigs 三.signingConfig 结构解析 四.signingConfig 属性 五.一些建议 六.写在最后 一.前言 今天分享 signingConf ...

  4. 安卓gradle报错

    在android开发过程中又报错了,这一次是版本错误第一步我们进行版本同步. 报错信息: android studio报错Error: Gradle project sync failed. Plea ...

  5. Android App Bundle

    1. Android App Bundle 是什么? 从 2021 年 8 月起,新应用需要使用 Android App Bundle 才能在 Google Play 中发布. Android App ...

  6. 【Android Gradle 插件】 Splits 配置 ② ( Splits#abi{} 脚本块配置 | 根据 CPU 架构进行分包 | AbiSplitOptions 配置简介 )

    文章目录 一.Splits#abi{} 脚本块配置 1.配置简介 2.配置原型 3.使用示例 二.AbiSplitOptions 配置简介 1.属性配置简介 2.方法配置简介 3.属性方法配置使用方法 ...

  7. 【Android Gradle 插件】Splits 配置 ③ ( Splits#density{} 脚本块配置 | 根据屏幕像素密度进行分包 | DensitySplitOptions 配置简介 )

    文章目录 一.Splits#density{} 脚本块配置 1.配置简介 2.配置原型 3.使用示例 二.DensitySplitOptions 配置简介 1.属性方法配置简介 2.属性方法配置使用方 ...

  8. 【Android Gradle 插件】Splits 配置 ④ ( Splits#language{} 脚本块配置 | 根据语言进行分包 | LanguageSplitOptions 配置简介 )

    文章目录 一.Splits#language{} 脚本块配置 1.配置简介 2.配置原型 3.使用示例 二.LanguageSplitOptions 配置简介 1.属性方法配置简介 2.属性方法配置使 ...

  9. 【Android Gradle 插件】 Splits 配置 ① ( BaseExtension#splits 配置 | Splits 配置简介 )

    文章目录 一.BaseExtension#splits 配置 1.BaseExtension#splits { } 脚配块配置简介 2.BaseExtension#splits { } 脚配块配置原型 ...

最新文章

  1. 电子合同的履行_什么是电子合同履行?怎么履行电子合同?
  2. “稳定”凸包----poj1228
  3. WWW 2021最佳论文亚军:基于属性补全的异质图神经网络新架构
  4. 20170822 前端开发日报
  5. php如何解码图片,php基于base64解码图片与加密图片还原实例_PHP
  6. tensorflow-yolo3系列配置文章汇总
  7. 《自顶向下网络设计(第3版)》——2.7 适应性
  8. javascript高级程序设计第二章知识点提炼
  9. 离散数学期末复习总结
  10. 台达plc自由口通讯_自由口通讯问题无法接收数据
  11. 新版虚拟服务器,新版tplink路由器虚拟服务器(端口映射)设置教程
  12. 微信小程序分享功能的实现
  13. 曾经,我以为我很懂MySQL索引
  14. PLC是怎么工作的?工作原理是什么?
  15. D365几个功能开发思路
  16. 【数字基带传输】误码率的分析方法(BER Performance)
  17. 小鸟云服务器如何通过本地安全策略阻止IP访问?
  18. SpringBoot企业微信点餐系统
  19. 让瓶子里的小人跟你互动,它是怎么做到的?
  20. 渗透测试-流量加密之冰蝎蚁剑

热门文章

  1. 【050】SylixOS全面支持C-SKY系列处理器
  2. 主动学习(Active Learning)概述及最新研究
  3. (5)项目合同管理--信息系统项目管理师考试系列
  4. 音频信号处理——DTW
  5. html网页结尾署名,书信署名及敬语常识(转摘)
  6. MapReduce之week2 test 分区计算结余(练习)
  7. day03 Http协议Request
  8. 傅立叶变换、Gabor变换与小波变换
  9. JavaScript 排序,不只是冒泡
  10. 如何使用PS将图片中的类千图网的字眼去掉