再见吧 buildSrc, 拥抱 Composing builds 提升 Android 编译速度

它们在使用上有什么不同呢

Project-buildSrc

  • 在项目根目录下新建一个名为 buildSrc 的文件夹( 名字必须是 buildSrc,因为运行 Gradle 时会检查项目中是否存在一个名为 buildSrc 的目录 )
  • 在 buildSrc 文件夹里创建名为 build.gradle.kts 的文件,添加以下内容

plugins {
kotlin-dsl
}
repositories{
jcenter()
}

  • buildSrc/src/main/java/包名/ 目录下新建 Deps.kt 文件,添加以下内容

object Versions {

val appcompat = “1.1.0”


}

object Deps {

val appcompat = “androidx.appcompat:appcompat:${Versions.appcompat}”


}

  • 重启你的 Android Studio,项目里就会多出一个名为 buildSrc 的 module,实现上面演示的效果

Project-ComposingBuild

  • 新建的 module 名称 versionPlugin
  • 在 versionPlugin 文件夹下的 build.gradle 文件内,添加以下内容

buildscript {
repositories {
jcenter()
}
dependencies {
// 因为使用的 Kotlin 需要需要添加 Kotlin 插件
classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72”
}
}

apply plugin: ‘kotlin’
apply plugin: ‘java-gradle-plugin’
repositories {
// 需要添加 jcenter 否则会提示找不到 gradlePlugin
jcenter()
}

gradlePlugin {
plugins {
version {
// 在 app 模块需要通过 id 引用这个插件
id = ‘com.hi.dhl.plugin’
// 实现这个插件的类的路径
implementationClass = ‘com.hi.dhl.plugin.Deps’
}
}
}

  • versionPlugin/src/main/java/包名/ 目录下新建 Deps.kt 文件,添加以下内容

class Deps : Plugin {
override fun apply(project: Project) {
}

companion object {
val appcompat = “androidx.appcompat:appcompat:1.1.0”
}
}

  • 在 settings.gradle 文件内添加 includeBuild 'versionPlugin' 重启你的 Android Studio
  • 在 app 模块 build.gradle 文件内首行添加以下内容,就可以实现上面演示的效果

plugins{
// 这个 id 就是在 versionPlugin 文件夹下 build.gradle 文件内定义的 id
id “com.hi.dhl.plugin”
}

ps:plugins{} 需要放在 app 模块 build.gradle 文件内首行位置

Project-ComposingBuild 比 Project-buildSrc 多了两步操作需要在 settings.gradle 和 build.gradle 引入插件,两者在使用都是差不多的

如何快速使用 buildSrc

  • 访问 ComposingBuilds-vs-buildSrc 拷贝 buildSrc 文件夹到你的项目的根目录
  • 重启你的 Android Studio,项目里就会多出一个名为 buildSrc 的 module

如何快速使用 Composing builds

  • 访问 ComposingBuilds-vs-buildSrc 拷贝 versionPlugin 文件夹到你的项目的根目录
  • 按照上面的配置方式,分配在 settings.gradle 和 app 模块的 build.gradle 引用插件即可

总结

总共从以下几个方面对比了 Composing builds 和 buildSrc

  • 目录结构:它们的基本目录结构是相同的,可以根据自己的项目进行不同的扩展
  • 编译速度:当修改了版本号,Project-buildSrc 项目 Build 的时间几乎是 Project-ComposingBuild 项目的 4.6 倍( PS: 每个人的环境不同,时间上会有差异,但是 Project-buildSrc 的时间总是大于 Project-ComposingBuild )
  • 使用上的区别:Composing builds 比 buildSrc 多了两步操作需要在 settings.gradle 和 build.gradle 引入插件

Project-buildSrc 和 Project-ComposingBuild 相关代码已经上传到 GitHub 了:ComposingBuilds-vs-buildSrc

到目前为止大概管理 Gradle 依赖提供了 4 种不同方法:

  • 手动管理 :在每个 module 中定义插件依赖库,每次升级依赖库时都需要手动更改(不建议使用)
  • 使用 ext 的方式管理插件依赖库 :这是 Google 推荐管理依赖的方法 Android官方文档
  • Kotlin + buildSrc:自动补全和单击跳转,依赖更新时 将重新 构建整个项目
  • Composing builds:自动补全和单击跳转,依赖更新时 不会重新 构建整个项目

buildSrc 如何迁移到 Composing builds?

如果当前项目使用的是 buildSrc 方式,迁移到 Composing builds 很简单,需要将 buildSrc 内容拷贝的 Composing builds 中,然后删掉 buildSrc 文件夹就可以即可

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

Android学习PDF+架构视频+面试文档+源码笔记领取

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

710687495915)]

【算法合集】

[外链图片转存中…(img-HTsUnao2-1710687495916)]

【延伸Android必备知识点】

[外链图片转存中…(img-HyOziOjn-1710687495916)]

【Android部分高级架构视频学习资源】

Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spanned.SPAN_COMPOSING 是一个常量,用于表示一个跨度对象(Span)正在处于组合文本输入的状态。它是用于处理复杂文本输入和编辑的 Android 文本样式类 Spanned 的一个标记常量。 当用户正在进行组合文本输入(如中文输入法的拼音输入)时,输入的文本可能会被拆分成多个部分,并且在用户最终确定输入之前,这些部分可能会不断变化。SPAN_COMPOSING 被用于标记这些处于组合输入状态的文本部分,以便在显示和处理这些文本时进行特殊处理。 在使用 Spanned 接口及其实现类(如 SpannableString 或 SpannableStringBuilder)处理文本时,可以使用 Spanned.SPAN_COMPOSING 来标记处于组合输入状态的文本部分。例如,你可以使用 setSpan() 方法将 Spanned.SPAN_COMPOSING 应用于文本的特定范围,以便在显示或处理文本时对这些部分进行特殊处理。 以下是一个使用 Spanned.SPAN_COMPOSING 的示例: ```java SpannableString spannableString = new SpannableString("Hello World"); spannableString.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, Spanned.SPAN_COMPOSING); textView.setText(spannableString); ``` 在上面的示例中,"Hello" 这个单词将被标记为处于组合输入状态,并且会应用红色前景色。这样,当用户在输入过程中修改或删除这部分文本时,可以对其进行特殊处理,以提供更好的用户体验。 希望这个解释对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值