技术开发 频道

蘑菇街MDay 专注移动端技术分享交流

  MDay是蘑菇街主办的专注于移动端的分享交流会,旨在推动业界的技术交流氛围,MDay官网是mday.mogu.io。前三季一直在杭州举办,本期第四季到了北京,希望结交到更多志同道合的朋友。虽然活动当天天寒地冻,但依旧挡不住分享会的热情四射。

蘑菇街MDay 专注移动端技术分享交流

  以下是活动当天的分享内容:蘑菇街·银时-蘑菇街组件化的坎坷之路

蘑菇街MDay 专注移动端技术分享交流

  第一场分享是蘑菇街的银时带来的,主要讲述了蘑菇街组件化的开发方式,以及过程中遇到的一些问题和解决方案。组件化不是「银弹」,作为一种代码组织方式,它能有效地解耦业务,提高开发效率,但也会有「资源重复」、「设计割裂」、「无法很快响应改动」等问题。为了解决这些问题,开发了一系列内部工具,比如「UI公共库后台」,就像bootstrap的后台那样,在这里可以看到大概的样子、选择样式,也有demo和可配置属性,这样在App内,甚至跨App都可以直接使用。还有一个「组件管理后台」的工具,这个工具里能列出某个App的某个分支下的所有pod,以及对应的版本,要升级版本的话,只需点击一个按钮即可。其中一个细节是升级版本并不是升小版本号,而是升第4位版本,比如a.b.c.RC-1,这样,原先指定~>a.b.0的,就不会更新到这个版本,但想要使用这个版本的,只需手工指定一下版本号就行。后续还聊到了「壳工程」、「组件间通信」等,更细节的内容可以查看官网信息。

  iOS专场

  蘑菇街·五木-蘑菇街滤镜自研历程

蘑菇街MDay 专注移动端技术分享交流

  说到滤镜的实现,对于非图像处理专业的人来说,多少会觉得Magic,比如脸是如何变小的,眼睛是如何变大的等。五木老师为我们解开了这层神秘的面纱。以「美妆」为例,五木老师为我们展示了美妆前和美妆后的效果,自然是很神奇。然后大致讲了下其中的原理:首先是准备素材,确定关键点;然后通过人脸识别得到关键点;再把这些关键点三角形化;最后把这些关键点做一个融合。所以这其中很重要的就是「关键点」的确定。虽然对于算法依旧会云里雾里,但至少对这个流程有了大概的了解,让那些神奇的滤镜至少变得不那么神秘。提问环节也很有意思,有人问了猴子能美化么,五木老师表示仍需修炼。

  美团·臧成威-FRP在美团网iOS上的实践

蘑菇街MDay 专注移动端技术分享交流

  说到FRP,很多人都只是听说过,或者看过几篇文章,但美团网已经在App中大规模地使用RAC来开发,臧成威老师也在公司内部做过多次分享,积累了丰富的经验。有一个小插曲,为了追求演示质量(效果真的很不错),成威老师改keynote改到了凌晨3点,9点起来后又继续修改,到了现场后又做了些调整,最终现场演示的效果很赞。成威老师分首先指出了目前的Cocoa开发的一些问题,比如回调种类多、KVO写法复杂等,然后引出了RAC的处理姿势。接着深入到信号组合,用来解决异步协同、错误传递等问题。在「函数响应式设计阶段」,通过对函数的灵活使用,有效地降低了代码量,而且也更易懂。整个过程中结合了代码片段来描述RAC带来的变化,对于观众来说,代码比语言层面的描述更有说服力。

  百度·刘旨晋-百度地图Crash跟踪体系及修复经验分享

蘑菇街MDay 专注移动端技术分享交流

  说到Crash,做移动开发的都不会陌生,天天都会接触,经常性地会找不到头绪,刘旨晋老师在百度地图专门负责Crash这块,有相当丰富的经验。一开始先介绍了Crash的跟踪体系和Crash的结构,同时介绍了相关的工具,比如atos/dwarfdump/mdfind/mdimport等,有些工具会相对陌生一点。然后讲到了Crash的预防,其中很重要的一条是「尽早Crash」。在说到Crash的修复时,可以结合自定义内容,方便排查。最后举了一个很不错的case,是快速枚举过程中发生了一个看似是由于多进程导致的变量被修改的问题,最开始通过简单的copy解决了,但后来又出现了类似的问题,在跟踪编译器优化后的代码时找到了问题的根源,是由于64位的机器上对于指针做了些特殊处理(TaggedPointers)导致的。这种追根究底的精神很值得学习。

  Android专场360·张勇-360手机助手的插件化应用

蘑菇街MDay 专注移动端技术分享交流

  DroidPlugin这个在github上拥有2500+star和1000+fork数的热门开源项目作者,360安全卫士的张勇,带来了对这个Android插件化项目的原理性讲解。从插件化框架实现与发展的历程开始,张勇老师简单解析了以往插件化方案的实现方式,以及它们在工程实践中所面临的困局。从而引出了自己开发DroidPlugin的初衷。首先是框架的结构图,通过对结构图的讲解,在场的同学们对它里面的重点有了清晰的认识。插件化方案中,对于framework层的hook一直以来都是这个技术的重点与难点。由于Android系统本身不开放动态化的接口的缘故,想要达成一个完整可用、方便开发、集中管理、伸缩性强的插件化方案,没有对系统深入得理解,是不可能完成的。而这方面正是DroidPlugin的强项,基于360手机助手自身的动态化需求出发,张勇老师详细分析了框架中hook的原因与hook的实现。最后的Q&A环节,大家纷纷提出了自己在使用DroidPlugin中遇到的问题,张勇老师一一做了解答。热烈处,更是翻出代码现场展示,以期能够让提问的同学有比较深刻的认识。

  蘑菇街·海猪-蘑菇街AndroidHotfix探索与实践

蘑菇街MDay 专注移动端技术分享交流

  线上Bug,一直是客户端工程师的噩梦,面对客户端版本发布后工程师对问题的束手无策。业界对于Hotfix技术的需求不可谓不迫切。海猪老师从目前业界人气比较高的两个Hotfix开源项目开始。从虚拟机代码实现的层面,配合源码片段,讲解了淘宝Dexposed项目与支付宝AndFix项目能够工作的原因,并通过蘑菇街的实践,分析了这两个项目在实际使用中遇到的问题。接着,引出了蘑菇街自己在AndroidHotfix技术上的探索。从运行时自篡改dex字节码,到应用时遇到的瓶颈,再到插件化开发过程中发现兼容性更好的Classloader方式。完整得再现了蘑菇街在这方面的历程与踩过的坑。

  豌豆荚·于金伦去Jenkins的持续集成实践

蘑菇街MDay 专注移动端技术分享交流

  开篇描述了CI的几个基本要素之后,引出了豌豆荚在CI上的思考。Jenkins框架在豌豆荚实际运用中的缺陷,使他们有了基于gerritstream-events的CI服务框架。事件流的形式带来了更好的模块分离与功能扩展性,支持强大的事件自定义。CR打分机制的引入,也是一个比较新颖得点。向多语言扩展也列入了roadtrip中。可以看出豌豆荚在这方面的沉淀非常得深。最后,于金伦老师简单讲了一下gitlab与travis上如何做CI,Q&A环节也有很多这方面的讨论。后记虽然几乎是30年来最冷的一天,但依旧挡不住一颗颗火热的心,希望MDay能给移动端的分享带来一些改变。也欢迎大家能关注“蘑菇街技术博客”的微信公众账号,了解更多蘑菇街技术活动及分享(微信号:mogujietech)。

蘑菇街MDay 专注移动端技术分享交流

  免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。刊载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

特别提醒:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
1
相关文章