2016年对于移动开发领域来说是颇受冲击的一年,Native开发面临着React Native、微信小程序等的冲击,再加上资本寒冬,想必想找移动开发初级工作的同学感受到了一丝凉意。2016年对于移动开发又是颇为精彩的一年,很多公司都把自己最核心的技术开源分享出来,呈现出百花齐放的局面。在本文里,我将会一一盘点这些技术。
2017年就要来了,过去的一年里你是否疏于学习,欠下技术债呢?如果答案是肯定的,希望本文能让你在学习上少走一点弯路。
2016年对于移动开发领域来说是颇受冲击的一年,Native开发面临着React Native、微信小程序等的冲击,再加上资本寒冬,想必想找移动开发初级工作的同学感受到了一丝凉意。
2016年对于移动开发又是颇为精彩的一年,很多公司都把自己最核心的技术开源分享出来,呈现出百花齐放的局面。在本文里,我将会一一盘点这些技术。
另外,本文还试图对2017年的移动技术做一个预测,以及评点某些受争议的技术,需要强调的是,这些只是试图为读者提供看事情的一个角度,不必尽信。
苹果今年在WWDC上发布了iOS 10、watchOS 3、macOS Sierra、tvOS四大操作系统,并且在每个操作系统上都有创新,其中iOS无疑已成为最重要的操作系统,苹果在大会上宣布开放了三大框架,包括向建筑商开放智能家居平台HomeKit、向开发者开放SiriKit和CallKit,将更多能力开放给开发者。前两者由于一些限制,开发者使用的较少,而CallKit则将我们向纯网络电话时代推进了一大步,同时开放了用户期待已久的来电识别功能,目前已有很多App都开始使用该框架推出新功能。
另一个值得一提的是iMessages,苹果在WWDC花很大篇幅对它进行了介绍,同时推出了iMessages内置的App Store,关于它的意义,后面谈微信小程序的时候再说。
在秋季发布会上,苹果发布了新款MacBook Pro,新加的硬件模块Touch Bar引起争议,但也引起了开发者的兴趣,大家都在探索它的新奇玩法。而且在实际上手后,大家发现它没有想象中的那么不便。这件事也告诉我们,对于没有接触过的事物,不要过早下结论。
从16年7月1日起,开发者所提交的应用必须能够支持纯IPv6网络环境。IPv4地址告罄已是事实,可以说Apple又一次走在了推动新标准的前列。
同样是7月1日,苹果规定在App Store中国区上架的手游需要通过国家新闻出版广电总局的审批,在审核信息中提交游戏版本才可上架。对于这条,想必大家想吐槽的都吐槽过了,只能说这条充满中国特色的新政不是苹果的锅。
最后一个是苹果要求应用必须在2017年1月1日前支持HTTPS(已延期),最近不少团队都在忙这事。全面推行HTTPS,有助于保护手机用户的隐私,可以说补全了苹果手机的安全短板。
除了第二个之外,另外两个都是进步的体现,虽然给开发者带来了一些麻烦,但这样做可以避免将来可能出现的安全隐患和一些问题。
与开发者有关的另一个重头戏就是Swift,9月13号Swift 3.0正式发布,Swift 3.0中的一系列变化旨在依照Swift API Design 指南,通过去除一部分可能被视作遗留下来的Objective-C的内容,来清理API。不过并不包含之前传言的ABI稳定。
Swift的发展可以说很稳健,同时也给人以惊喜。10月25号Swift团队在官方博客上宣布成立服务端API工作组,彰显了Swift向其它平台扩展的野心,在未来Swift也许可以达成前后端通吃。
关于Swift的应用情况,国外在开发iOS App的时候早已是Swift First,从各种网络教程和分享来看,基本都是基于Swift的。反观国内,Swift只有在部分新业务和新团队才会考虑使用,对于国内的超级App来说,由于需要频繁发版,同时很多应用使用了基于OC runtime的“黑科技”,使用Swift重写一部分应用不太现实,这些我们也需要承认。但是学习Swift从现在就可以开始了。
你可以在这里回顾WWDC的演讲视频和技术Session,对于学习苹果新技术,这是第一手资料:
另外,对于中国市场,苹果宣布将在北京和深圳成立两处研发中心,用于聚合在中国的工程和运营团队,面向中国以及全球的用户持续为其产品打造领先的技术和服务。未来我们将可以看到更多的为中国的本地化优化,同时我们也期待苹果和国内工程师有更多的交流。
苹果每年都努力为我们带来一些惊喜,要准确的预测几乎是不可能的,这里我大胆的来预测一下。
过去一年,我们经常看到苹果软件质量受到诟病,这并奇怪,因为苹果目前要开发维护四大操作系统,一个大型IDE,诸多内置App(包括重量级的办公软件),甚至还有Apple News、Apple Music这样的新业务,任何一个公司面临这样的情况都有可能力不从心。在今年苹果将OS X重新命名为macOS,与其它几个操作系统统一,而据媒体报道,苹果有意将macOS的开发由iOS团队负责,这意味着macOS有可能并入iOS,成为该系统的一个分支。这样苹果的重担会减轻不少。在2017年的WWDC上很可能宣布进一步的情况。
在新平台和新技术上,苹果可能推出基于VR/AR的新设备,或者是一个新框架。有消息显示苹果今年在VR领域有所投入,并且获得了VR显示以及头显的专利。
另外,在人工智能方面,明年苹果可能会推出新的系统级AI框架。其实iOS 10里面已经包含了很多AI技术,如语音识别、图片识别等,Siri的背后更是集人工智能应用之大成,Metal和Accelerate框架也提供新的卷积神经网络API,但我们还需要一个应用级的框架。按照人工智能现在的热潮,可以预计明年的WWDC苹果会重点介绍这方面。
最后,关于Swift 4已经确认会在明年发布,Swift的消息其实相当开放,我们可以在Swift Evolution项目看到它的最新进展。前不久Swift创始人Chris分享了对于Swift 4和Swift 5的规划。Swift 4会着重解决开发者关心的问题,以及ABI稳定性。苹果会不会配合着来一波推广呢,我觉得很有可能。
今年Android新版本7.0的出现要比往年早一些,在IO大会前两个月就发布了开发者预览版,与此同时还推出了Android测试版计划,学习微软的Windows Insider,让用户也能提前体验最新版系统。新系统最受欢迎的新功能包括Doze模式和增强的通知中心。
与Android相关的平台今年也获得更新,包括Android Wear 2.0,能够独立运行App;Android Auto,支持在手机上运行,将手机变成车载智能系统;Android Things,由之前的物联网平台Brillo更名而来,。
新的Interpreter+JIT+AOT编译器。该编译器减少了应用程序安装时间和存储空间,并在手机空闲的时候编译代码的热点部分,提高性能。
Vulkan跨平台的图形和计算API。在2015年发布的Vulkan也终于植入到Android系统中。多窗口支持。还包括分屏、画中画等等。
能免安装运行的Instant Apps,看上去是革命性的,据分析其原理可能和国内正在研究的插件化/沙盒技术类似,不过到现在也一直处于测试状态。
渐进式Web应用PWA。这是今年Google重点推广的一项Mobile Web技术,大幅提升了离线使用、通知等体验。
在IO大会上还同时发布了Android Studio 2.2,它带来的新特性包括:
将编译器替换成Google自己开发的Jack编译器,以及配套的工具链Jack and Jill。
部分支持Java 8特性,包括lamda表达式,使用这个需要Jack编译器。
新的布局方式ConstraintLayout和相应的可视化编辑器,可以看做是RelativeLayout的增强。它的目标是减少布局的层级,同时改善布局性能,还减少了使用RelativeLayout的复杂性 。
在中国市场方面,Google前不久刚在国内举办了两场规模盛大的开发者大会。发布了新的中文版开发者官网和开发者博客。不过,他们对于Google搜索、Play市场等何时返回国内仍然讳莫如深,从2016年年初就传言Google返华,然而整个2016年进展也并不大。
从今年的更新可以看到,Android的发展也逐渐步入平缓阶段,人们的目光更多的被Google发布的其它新奇有趣的产品所吸引,比如VR平台DayDream、智能助手和智能IM应用。有人甚至认为Android逐渐被边缘化,有可能被新系统所取代,比如前阵子传言的Andromeda。
不过我想说这种担心是多余的,Android仍然是Google最重要的产品之一,并且是其衍生品Android Wear、Android Auto等系统的基石,所以在近期不太可能有很大的改变。但是我们可以期待底层和工具上的大的创新,如ART运行时、Jack编译器。
另一个在明年可能带来很大改变的技术是Instant Apps,但是因为它很可能必须依赖GMS,在国内不太可能使用。但根据国内在这方面的技术积累,我相信打造相同技术规格、完全兼容的中国版Instant Apps不是难事,说不定明年国内手机厂商会将它作为重点功能进行宣讲呢。
最后,根据Android新版本的普及速度,明年Android 7.0才会逐步在国内推广开,于是开发者们终于可以开始学习Android 7.0的新技术了。
组件化并不是什么新东西,事实上当业务、团队规模大到一定程度,必然会去寻求模块化和组件化的方案。特别在国内存在大量超级App的情况下,组件化也早已在实践中实施。今年1月份蘑菇街李忠老师在第四届线下沙龙MDay上分享了蘑菇街组件化的实践。我邀请他到移动开发前线社群做了一个群分享,从此开启了对于这个话题的讨论。
组件化重点是将不同业务组件化,使不同的业务团队能够独立开发、测试和维护。而讨论的重点在于App内部和外部调用以及页面跳转,在蘑菇街分享后,casa分享了他的看法,部分公司也分享了自己的组件化实践。
尽管今年苹果将App Store上架审核流程加速,但对于人们的需求来说,审核时间还是显得略长,发现问题马上修复是一个刚需,这在iOS开发中的体现就是热补丁。
在之前iOS中的热补丁开源项目有Wax,今年随着前端在移动开发中的大火,JS热修复方案火了起来,其中的代表就是JSPatch,它在国内已经取得广泛应用。另外在热修复中,还需要与启动保护配合使用,否则有些无法启动的应用无法修复。
而在年底,滴滴发布了DynamicCocoa,可以将Objective-C代码转换到JS,然后下发到JSCope执行,用它甚至可以实现完全动态化,热修复只是它的一个功能。该项目计划于2017年初开源。
Swift的重要性已不用多说,2016年大家对于学习Swift的热情也很高。我们看到除了一些创业团队采用Swift开发之外,大公司的一些创新业务也开始使用Swift开发。另外,Swift在服务端开始吹响号角,得到官方加持,未来iOS开发者可以无痛全栈了。
Swift在今年的主要变化是从2.x升级到3.0,由于是破坏性更新,在迁移时不免遇到种种问题,但也不是不能解决,另外相对于迁移,IDE的支持才是更大的问题,很多人吐槽Xcode写Swift写着写着没有代码高亮、没有函数提示、崩溃闪退、编译耗时等等,这个我们也没什么办法,只能期待明年苹果好好重视一下这个问题了。
函数响应式编程在2015年就是一个很火的话题,当时主要讨论的是ReactiveCocoa,随着Swift逐渐普及的大趋势,以及Rx概念在其它语言中开始流行,RxSwift异军突起,受到了一定关注。
由于响应式和函数式编程在团队中推广使用有一定难度,因此关于两者的布道不能停,相信明年还会有更多的分享。
移动开发中有多种客户端数据库可选择,包括苹果官方的Core Data,以及经典的SQLite,两者的应用都很广泛。在今年,一个创业公司的数据库产品引起了大家的兴趣,就是Realm,它专为移动端而设计,API简洁方便,有一些友好的特性,因此被大家关注。
其实Realm是一个跨端的数据库,在Android平台也有很多人学习和使用。我将之放在iOS下是因为有些人认为Core Data难用,而Realm是一个很好的替代。
技术总是日新月异,我们不能断言明年iOS领域会流行什么技术,但有一些线索并不难寻:
动态化/热修复。DynamicCocoa会在明年初开源,到时候又会是一轮讨论热潮。
Swift实践/黑科技。Swift的安全特性让之前Objective-C runtime里的特技失传,这也是很多大型App不愿意采用Swift的原因。一方面我们期待官方会有更多的高级特性放出,另一方面也期待社区的突破。
其它领域技术的借鉴。在前端、Android开发中有些好的设计和理念,可以将之借鉴到iOS平台,比如Redux、Android中的Layout、资源设计。在今年其实有一些讨论和开源项目出现,但它们到底能带来多少收益,有没有最佳实践,这是明年我会关注的一个话题。
HTTP/2和Protobuf,今年苹果在网络上动作很大,并且都是强制性的,开发者必须跟进,明年苹果是否还有更多的动作,以及在网络上的新玩法HTTP/2和Protobuf,我相信会有不少团队去探索和实践。
2016对于Android开发来说是非常精彩的一年,黑科技频发,我们可以确定的说在Android应用层开发方面我们已经走在了世界前面。然而,其实很多黑科技都是形势所逼,并且其中一些和Google的官方政策相违背,这是目前热火的表象下的隐忧。
从去年下半年开始,Android插件化开始进入人们的视野,到今年,开源和分享开始爆发,插件化可以说是Android开发高级技术的集大成者,要掌握它需要对Android系统框架、App运行机制等足够了解,因此成为很多开发者追求的目标。
但是回过头来想一下,插件化的适用场景其实有限,多用于头部的超级应用,一般的中小型App没有必要适用,所以也没有必要盲目追求新技术。
插件化发展到后来,基本都开始追求免安装运行App,也就是沙盒/双开,在这方面我们也有一些商业应用出现,以及开源项目。
插件化并不是所有应用都需要,但是热修复却基本是正式的项目都想要的。热补丁与插件化的不同点在于,热补丁的关注点在对应用进行方法级的替换以达成修复。2016年Android的热修复取得了非常大的进展,不但有多家公司分享、开源了自己的热修复项目,而且还催生了商业服务。
AndFix,阿里推出的开源项目,并且在其基础之上衍生了商业服务。之前阿里还推出一个
Qzone超级补丁,暂未开源,演讲视频和PPT见此,社区有人根据其原理研发了Nuwa并开源,现已停止维护。
RxJava是JVM上的响应式编程框架,可以简化异步操作的代码,是Rx系列的一部分,去年年底国内社区开始有人布道,也有很多人分享,RxJava与Retrofit结合可以大幅简化网络操作的复杂性,因此也被人们广泛使用。
Android里的组件化是相对于插件化来说的,插件化追求插件直接完全独立,甚至插件本身是可独立运行的APK,组件化则是在组件独立开发,在编译时仍合成为完整App。
Android组件化的实践的代表是淘宝的Atlas,该项目将于2017年初开源。
Kotlin是老牌开发工具厂商JetBrains推出的一门JVM语言,也非常适合在Android项目中使用,今年推出了1.0版本,并在国内举办了一场线下开发者日活动。
Kotlin被视为Android平台的Swift,可以刷时髦值,从实际开发体验上来说,与JetBrains的IDE结合(Android Studio亦可)也非常不错。国内有些团队和个人已经开始尝试。但由于Java本身很完备,更换语言目前来说只是基于个人喜好。因此要想Kotlin流行,就像苹果推广Swift一样,我们也需要谷歌的推动才会让更多人有兴趣学习和使用。
数一数将于明年开源的一些项目,明年Android开发该讨论我们也心里有数。
插件化。2017年,Android开发领域关于插件化和热补丁的讨论仍将继续,但我希望国内开发者能更多的走出去和国外同行交流,让这些技术不只是一头热。
组件化。其重点在于工程期的辅助工具和编译流程,期待明年除了Atlas之外,有更多的类似项目出现。
Kotlin,在这里推这个,也算是我的个人喜好吧,希望明年Google能官方表态支持Kotlin.
AI技术。人工智能是目前最火的技术领域没有之一,如何与移动结合结合玩出花来是一个值得探讨的话题。我觉得Android上取得突破的可能性比iOS更大,毕竟Android更开放,玩法更多。
不只是今年,跨平台技术一直在移动开发领域火热非常,毕竟Android、iOS都不是可以轻易舍弃的平台。今年的跨平台技术,相比往年的Xamarin、Titanium等,更实际,更接地气,这也导致了跨平台技术今年讨论的热度更高,都快刷屏了。
今年大家所讨论的跨平台技术,无论是React Native、Weex还是微信小程序,从技术实现来说都是处于Native和Web之间,还是使用Web技术开发,从Hybrid过渡过来是很自然的事情,因此国内不少公司在React Native推出不久就开始使用。
RN及类似技术最光明的未来可能是:类RN首先取代当前App中的WebView,之后会取代一部分Native界面,长期上来说,一些性能要求高的本地库也会提供对它们的支持,如Realm就提供了RN版本,原生开发会被进一步压缩。原生开发,未来可能专注于一些专项研发,如音视频,或公共组件接入和维护。
React Native如今的地位毋庸置疑,Facebook没有在国内专门宣讲过,但我已经见识到了它的一些国内铁粉,并且有些公司如携程更是不遗余力的对它进行支持和布道,这种情况下RN发展想不好都不行。
但这样也出现了一些问题,一个是本地化的支持,第二个是有些公司自己对React Native做了优化,但没有反馈给RN项目,这样最终只是做了一个分支版本,他踩的坑别人还是要踩一遍,这样不环保,长远来看还有维护难的问题。
Weex是阿里手淘团队推出的跨平台开发框架,于今年6月份开源。阿里对该框架非常重视,在全集团推广,并且在今年双十一会场大规模应用,取得了成功。在9月份的JSConf上他们邀请Vue.js作者加入团队担任技术顾问,刚刚发布的0.9版也正式支持Vue 2.0语法特性了。最近它还加入了Apache基金会的孵化器,力争打造成功的开源社区。
相比于React Native,Weex略显年轻,不过由于后发优势,在一些地方优化做的比RN好。至于用哪个,就要开发者自己去探索哪个更适合自己了。
今年下半年,对移动开发最具冲击的可能要数微信小程序了,它的颠覆性不在于技术,而在于对整个移动互联网生态的影响。大部分的产品经理也许不知道RN或者Weex,但他们一定知道微信小程序,也一定在考虑要不要做一个,这就是微信小程序的影响力。
其实,在IM里做平台微信不是第一个,在6月份的WWDC上苹果展示的iMessages,就支持集成其它应用,发红包不在话下,甚至还能打车。可惜iMessages这个应用实在不接地气,在国内也没有什么影响力。而另一个国人同样不怎么了解的IM应用,Facebook Messenger在向微信学习,在今年3月举行的F8开发者大会上,Messenger平台化服务正式对外推出。扎克伯格宣布已有40多项服务接入到Messenger平台。最近它还推出了Instant Games,你可以在FB Messenger里玩游戏了。
这些现象体现的趋势是基于IM的应用分发可能是下一件大事,而这个能参与的只有现有的超级IM。
所以虽然现在微信小程序看上去能做的还很有限,对于移动App没有替代作用,但将来就说不好了,保持关注吧。
PWA是Google今年力推的一项移动Web技术,在支持Service Worker和Fetch API的浏览器上可以得到完整体验,在不支持的浏览器可以得到降级体验。
我不是很看好PWA,因为它的能力和性能还是有限,国内目前是超级App当道,对于性能都是精益求精,几乎不可能去采用这个方案,更何况它在iOS上的体验是降级的,不支持服务器推送,就这一条也会被Pass掉。而苹果何时支持Service Worker等新特性是说不好的。
2016年还有些“移动+”的领域十分火热,这里指的就是直播和VR/AR,它们除了技术,还有趋势上的问题。
直播是2016年的年度标志事件,其火热程度不用多说,因此也有很多泡沫,在数字上弄虚作假已经是人人皆知的事实。但是要看到,直播的兴起的前提是我们软硬件达到了要求,同时直播是对某些陈旧事物的替代,因此即使泡沫破灭,也可以预见剩下的几家会活得很好。
同时,直播开始作为一个功能模块进入很多App,和其它行业结合,如淘宝、天猫上的直播就给网络购物带来了很好的效果。因此,作为年度热点技术,每个移动开发者都有必要去了解和学习。
直播技术本身涉及到前后端,最有挑战的部分其实不在客户端而是在后端,客户端的部分大多数有了最佳实践,同时在秒开优化上有了很多创新。
与直播相比,VR/AR则是从得意到失意的典型,年初VR还被认为是年度技术,到年底某些做VR设备的厂商传出裁员、倒闭,高端头显设备如HTC vive的销售量也并不大,一下子大家都不看好了,这个领域似乎被资本所抛弃。
但与此同时,使用VR/AR技术的产品屡屡成为互联网的爆点,如Pokemon Go、阿里双十一VR、支付宝AR红包,说明VR/AR在用户体验和交互模式上还是很有潜力,只是我们要找到正确的使用方法。目前来看,基于LBS+AR的游戏是可行的点,VR则在营销上有用武之地。
另外,虽然VR/AR被资本不看好,但互联网巨头仍然重金投入,如Google、Facebook、Microsoft都将VR/AR作为自己的战略发展目标。Google的Daydream更是非常接地气,期待明年当支持设备增多后,给我们更加完善的体验。
安装包瘦身。Android有魔鬼瘦身,iOS则以滴滴为代表,用clang插件瘦身。
Hybrid开发,虽然已经是很成熟的技术,但仍有可创新之处,豆瓣和美团都有很好的分享。
每天分享最前沿和第一线移动开发技术。做更好的技术分享,介绍一线互联网公司的移动技术实践,让你与时代保持同步,消除信息焦虑。我们还建了移动前线学习分享群,让更多的人参与分享,让你的分享被更多人看到,让学习与分享的门槛更低。
如何拯救「大泥球」架构?人人车Android客户端架构演进实录返回搜狐,查看更多