今日头条进阶课程(今日头条哪个版本最好)

个人学习 27 0

今日头条引流技术进阶 百度网盘

通过上文介绍在 app 模块发现的异常的 kapt case, 进而发现在工程中为了方便,定义了一个 ,该文件的作用是定义项目中通用的 Android dsl 配置和共有的基础依赖,因此项目中所有子模块均 apply 了这个文件,但是这个文件陆陆续续的被不同的业务添加新的 kapt 注解处理库,在全源码编译时,所有子模块都得执行 library 模块中定义的全部 6 个 kapt ,即使该模块没有任何注解相关的处理也不例外。

而上述情况的问题在于:相比纯 java 模块的注解处理,kotlin 代码需要先通过 kaptGenerateStub 将 kt 文件转换成为 java ,让 apt 处理程序能够统一的面向 java 做注解扫描和处理。但是上面讲到其实有很多模块是根本不会有任何实际 kapt 处理过程的,却白白的做了一次 kt 转 java 的操作,源码引入的模块越多,这种无意义的耗时累加起来也非常可观。

为了能够弄清楚到底有哪些子模块真正用到了 kapt ,哪些没用到可以禁用掉 kapt 相关 task ,对项目中所有子模块进行了一遍扫描:

使用上述方案,通过全源码打包最终扫描出来大概是 70+模块不会进行任何 kapt 的实际输出,且将这些不会进行输出的 kapt,kaptGenerateStub 的 task 耗时累加起来较高 217s (由于 task 并发执行所以实际总时长可能要少一些).

获取到不实际生成 kapt 内容的模块后,开始对这些模块进行细粒度的拆分,让它们从 apply 改为没有 kapt 相关的 ,该文件除了禁用 kapt 外,与 library 逻辑一致。

但是这样做算是在背后偷偷做了些更改,很可能后续新来的同学不知道有这种优化手段,可能新增了注解后却没有任何输出且找不到原因,而优化效果最好是尽量少给业务同学带来困扰。为了避免这种情况,便对这些 library-api 模块依赖的注解做隔离优化,即:把这些模块依赖的注解库全部 自动 exclude 掉,在尝试使用注解时会因获取不到引用(如下图所示),第一时间发现到依赖被移除的问题。

另一方面在编译出现错误时,对应 gradle 插件会自动解析找不到的符号,如果发现该符号是被隔离优化的注解,会提示将 library-api 替换成 library,尽可能降低优化方案对业务的负面影响。

优秀开源项目:

简介:Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义

简介:Android官方GitHub开源项目,强烈推荐

+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义**

简介:Android官方GitHub开源项目,强烈推荐 [外链图片转存中…(img-f4h5El66-1648222275248)]

今日头条进阶课程

来自: 子游59nkv7ptjg > 《幼教》

0条评论

发表

请遵守用户 评论公约

寒假好书推荐,让孩子爱上阅读

寒假好书推荐,让孩子爱上阅读。寒假来临,与其让孩子把时间花费在电视剧、游戏、网络上,不如趁假期多读点好书,在阅读中快乐成长。书...

【学习】究竟什么书才适合孩子去读呢?附0~14岁阅读书单!

附0~14岁阅读书单!《我要拉baba》(“噼里啪啦系列“)0~3岁进阶阅读书单,15本。《和甘伯伯去游河》3~4岁进阶阅读书单,15本。4~5岁进阶阅读书单,15本。5~7岁进阶阅读书单,15本。中国7~14岁学...

一份一年级书单及书语书库是如何为班级配书的?

一份一年级书单及书语书库是如何为班级配书的?班级借书次数:第1次。2、 一年级配书包含大比例的绘本+适量桥梁书。6、 选书重点考虑种...

五年级上学期阅读书单

五年级上学期阅读书单。☆☆☆ 鱼家书单|五年级上学期 ☆☆☆还是大灰狼吹房子,只不过不仅房子被吹倒了,小猪也被吹到了故事之外,还...

幼小衔接必读的30本书(含童话、科普、诗集、哲学、图画书、民间故事...)

幼小衔接必读的30本书(含童话、科普、诗集、哲学、图画书、民间故事...)关于桥梁书。松居直曾经说过:“五六岁的孩子看书,大都是盯着...

课外阅读的重要性

许多家长给孩子买了书,发现孩子不爱看,就以为孩子不喜欢看课外书,诸不知有时原因不在孩子身上,而在家长自己身上。有可能是家长选的书不适合孩子看,二是选的书难度高于孩子的阅读水平。因此要充分...

分年龄、分年级(小学)

分年龄段推荐书目(0岁至初中)分年龄段推荐书目(0岁至初中)推荐人:阿甲、萝卜探长推荐时间:2004年10月(后有增补)写给家长:※以下书目的小学前的部分,最初是应《父母必读...

2023春季低年级阅读推荐书单

2023春季低年级阅读推荐书单有一个孩子每天向前走去,他看见最初的东西,他就变成那东西。古田足日编著的《一年级大个子二年级小个子》...

暑期阅读书单,家长请收好!一年级的孩子重...

一年级的孩子重...暑期阅读书单,家长请收好!一年级的孩子重点在于领略文字的美,可以看一些注音读物、彩绘本、绘本,形式上要丰富一些,比如:儿童诗集、古典诗词、童话故事、寓言、民俗故事、科普书...

微信扫码,在手机上查看选中内容

微信扫码,在手机上查看选中内容

今日头条进阶课程

即使是充分了解阅读重要性的父母,仍然有很多困惑。

刚过去的那个暑假,壮壮的妈妈一直奔波于各大医院之间,因为壮壮的视力突然变得很差,“有一只眼睛只有了。”壮壮妈说,壮壮今年上一年级,面对即将到来的更加繁重的学业负担,壮壮妈希望尽早恢复孩子的视力。“孩子的眼睛变差就是因为家里有了iPad之后,虽然尽可能限制孩子玩游戏的时间,但是,也在上面下载了很多故事还有一些学习软件。”

随着科技的发展,新一代的家长和孩子不可避免地被卷入了这股电子阅读的浪潮中。对此,朱永新认为,电视、电脑、手机等电子设备提供的内容太过绚丽动感,这对低年级的孩子还是有危害的。“对孩子专注力和宁静的心态的形成都是不利的。”

朱永新认为,网络、电影、电视大多只能带给人们一时的感觉刺激,这种快感是感官性的、短暂的,而阅读带给人们的既有丰富的感官刺激,也有感官之外的无尽想象,还有对天地人生的深入理解,这种快感是全方位的。

“过早‘触电触网’,会使孩子失去思考的能力,孩子会变得只会看不会想。”朱永新说。对于很多中学生大学生在网络上进行阅读的现象,朱永新说:“我认为人类最伟大的思想还处在离线状态。”

他认为,网络上更吸引眼球的是信息、广告和娱乐的内容,人类的理解,特别是人类理性的洞察力,通过网络是很难获得的,智慧的内容在网络上更是凤毛麟角。人类思想的进化,从信息到知识到智慧,就像一座金字塔,它是精神与智力逐步升级发展的过程。惟有通过书籍阅读,我们每一个人的智慧才能一步步地通往精神的“金字塔”之巅。

今日头条进阶课程

在非 clean build 的情况下,更改 java/kotlin 代码虽然会做增量编译,但是为了绝对的正确性,gradle 会根据一些列依赖关系计算,选择需要重新编译的代码,这个计算粒度比较粗,稍微改动一个类的代码,就可能导致大量代码重新执行 apt, 编译等流程。

由于 gradle 作为通用框架,其设计的基本原则是绝对的正确,因此很容易导致增量编译失效,在实际开发中,为了快速编译展示结果,可以在编译正确性和编译速度上做一个折中的方案:

以上方案(下文全部简称为 fastbuild) 虽然在涉及常量修改,方法签名变更方面 存在一定的问题(常量内联等),但是能换来增量编译从 2 分多降低至 20~30s,极大的提升编译效率,且有问题的场景并不常见,因此整体上该方案是利大于弊的。

今日头条进阶课程

“阅读就像美食一样。吃了好吃的东西,就不断想吃,读了好的书,也会让你不断地去找好书读。”说起阅读,朱永新很形象地用美食打了个比方,他说,阅读会带给人喜悦感、新鲜感,这些最后都会汇聚成精神上的饥饿感,也正是有这种饥饿感作为动力,他每天清晨都比一般人早起两个小时,专心读书。

但正如孩子学习语言、音乐、绘画都有不同的最佳时间窗口,朱永新认为,这种“精神饥饿感”在中小学阶段更容易形成,因为科学上一般认为人阅读的关键期在14岁之前。

新疆奎屯八中的一个名叫塞甫丁·哈斯木拜的同学让朱永新记忆深刻。这个孩子所在的学校参与了新教育实验(由朱永新发起的一个民间教育改革行动,旨在帮助新教育共同体成员过一种幸福完整的教育生活)。“这个孩子小学五年级的时候才开始接触汉语。”朱永新说,但是,从此之后塞甫丁·哈斯木拜就像一个被饿了很久的孩子,再也丢不下图书了。他用了三四年的时间读了几百本书,在2012年中央电视台评选出的十大读书少年中,塞甫丁·哈斯木拜入围成为其中一员。

美国著名生理学家玛莉安·伍尔夫通过研究儿童阅读时的大脑变化发现,儿童阅读是左右大脑两个区域都一起运行的,而过了这个时期,学习语言的能力开始退化,我们成年人在阅读时,往往是只有一个大脑半球在工作。

科学家认为,父母是否在小孩5岁以前经常给孩子讲故事,影响着孩子今后阅读技巧的形成。同时,人在14岁以前的阅读体验,对孩子的成长也是至关重要的。人生以后的历程,只不过是前面14年所阅读的东西的展开。

事实上,孩子长大以后,是用在14岁以前所阅读的东西、所体验的东西、所经历的东西、从书本当中获得的基本价值观,用感恩、慈善、友爱等这些最伟大的观念和知识在建设。

“所以,孩子早期的经验对成长非常重要。当他们成人以后,他们是用孩提时代所获得的东西为根基,继续去构建内心的成人世界。”朱永新说。

今日头条进阶课程

Android 项目一般使用 gradle 作为构建打包工具,而其执行速度慢也一直为人所诟病,对于今日头条 Android 项目这种千万行级别的大型工程来说,全量编译一次的时间可能高达六七分钟,在某些需要快速验证功能的场景,改动一行代码的增量编译甚至也需要等两三分钟,这般龟速严重影响了开发体验与效率,因此针对 gradle 编译构建耗时进行优化显得尤为重要。

在今日头条 Android 项目上,编译构建速度的优化和恶化一直在交替执行,18 年时由于模块化拆分等影响,clean build 一次的耗时达到了顶峰 7 分 30s 左右,相关同学通过模块 aar 化,maven 代理加速,以及增量 java 编译等优化手段,将 clean build 耗时优化到 4 分钟,增量编译优化到 20~30s 。但是后面随着 kotlin 的大规模使用,自定义 transform 以及 apt 库泛滥,又将增量编译速度拖慢到 2 分 30s ,且有进一步恶化的趋势。为了优化现有不合理的编译耗时,防止进一步的恶化,最近的 5,6 双月又针对编译耗时做了一些列专项优化(kapt,transform,dexBuilder,build-cache 等) 并添加了相关的防恶化管控方案。 从 截止到 ,整体的优化效果如下:

今日头条进阶课程

gradle 工程往往会在 repositories 中添加一些列的 maven 仓库地址,作为组件依赖获取的查找路径,早期在今日头条的项目中配置了十几个 maven 的地址,但是依赖获取是按照 maven 仓库配置的顺序依次查找的,如果某个组件存在于最后一个仓库中,那前面的十几个仓库得依次发起网络请求查找,并在网络请求返回失败后才查找下一个,如果项目中大多组件都在较后仓库的位置,累加起来的查找时间就会很长。

抱歉,评论功能暂时关闭!