2016这些Android技术可能会很火

   在Android开发中,新技术不断涌现。对于GitHub上如此众多的项目,有人不断Mark,有人分享自己的经验,不管怎么样,如果能让你真的有所学习有所收获,我们的目的也就达到了。


1、DataBinding与MVP

  今年的 Google IO 大会上,Android 团队发布了一个数据绑定框架(Data Binding Library)。Data Binding Library 是一个 support 库,支持 Android 2.1+ 版本 (API level 7+)。 在2015年,它还是beta版本,但是就 Android Studio 2 的 Preview 版本发展来看,Google 在这个库上还是很花心思的,我们有理由相信,在2016年 DataBinding 将会迎来第一个正式版。
  MVVM 与 MVP 模式,正在 Android 开发中越来越流行。在这里为大家强烈推荐我的:TheMVP 项目,可以直接引入项目作为 module 依赖。(详情请在 github 搜索 TheMVP )


2、热修复与插件化

  插件化:一个程序划分为不同的部分,以插件的形式加载到应用中去,本质上它使用的技术还是热修复技术,只是加入了更多工程实践,让它支持大规模的代码更新以及资源和SO包的更新。-- 插件化技术:DroidPlugin、DynamicAPK DynamicLoadApk。

  热修复:当线上应用出现紧急BUG,为了避免重新发版,并且保证修复的及时性而进行的一项在线推送补丁的修复方案。-- 热修复动态加载技术:HotFix、Nuwa、DroidFix、AndFix 等。

  在2015年,涌现出了一大批热修复动态加载技术:HotFix、Nuwa、DroidFix、AndFix 等等,以及同样原理的插件化技术:DroidPlugin、DynamicAPK。就连 Android  Studio 2 的 Preview 版本中体现的 Instant Run 功能,本质上也是一种热修复技术。 
   无论是dexposed还是AndFix,都利用了Java hook的技术来替换要修复的方法,这就需要我们理解dalvik虚拟机加载、运行java方法的机制,并要掌握libdvm中一些关键的数据结构和函数的使用。
  我猜想,在2016年一定会有基于 Instant Run 思想做出的热修复技术涌现。

> Android热修复技术选型——三大流派解析- https://yq.aliyun.com/articles/62685?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&utm_content=m_7565

腾讯QQ空间的超级补丁技术和微信的Tinker ;阿里AndFix以及.阿里巴巴的AndFix、Dexposed;百度的DynamicLoadApk;360手机助手的 DroidPlugin
  对于修复紧急BUG这个场景,阿里百川HotFix的更为合适,它更加轻量,可以在不重启的情况下生效,且对性能几乎没有影响。微信Tinker、QQ空间超级补丁技术更多地把场景定位在发布小的新功能上,采用ClassLoader的模式,牺牲较高的性能代价去实现类、资源新增或替换的功能。阿里百川HotFix对应用本身做到无侵入,无性能损耗。
插件化:百度的任玉刚。。
  QQ空间超级补丁技术和微信Tinker 支持新增类和资源的替换,在一些功能化的更新上更为强大,但对应用的性能和稳定会有的一定的影响;阿里百川HotFix虽然暂时不支持新增类和资源的替换,对新功能的发布也有所限制,但是作为一项定位为线上紧急BUG的热修复的服务来说,能够真正做到BUG即时修复用户无感知,同时保证对应用性能不产生不必要的损耗,在热修复方面不失为一个好的选择。

  》 热修复,比较著名的有阿里巴巴的HotFix(AndFix)、Dexposed,腾讯QQ空间的超级补丁技术和微信的Tinker。

  QQ空间超级补丁技术,超级补丁技术基于DEX分包方案,使用了多DEX加载的原理,大致的过程就是:把BUG方法修复以后,放到一个单独的DEX里,插入到dexElements数组的最前面,让虚拟机去加载修复完后的方法。

  微信Tinker,微信针对QQ空间超级补丁技术的不足提出了一个提供DEX差量包,整体替换DEX的方案。主要的原理是与QQ空间超级补丁技术基本相同,区别在于不再将patch.dex增加到elements数组中,而是差量的方式给出patch.dex,然后将patch.dex与应用的classes.dex合并,然后整体替换掉旧的DEX,达到修复的目的。
  阿里百川推出的热修复HotFix服务,相对于QQ空间超级补丁技术和微信Tinker来说,定位于紧急bug修复的场景下,能够最及时的修复bug,下拉补丁立即生效无需等待。(BUG修复的即时性)
  AndFix不同于QQ空间超级补丁技术和微信Tinker通过增加或替换整个DEX的方案,提供了一种运行时在Native修改Filed指针的方式,实现方法的替换,达到即时生效无需重启,对应用无性能消耗的目的。 

  》 接入三种热修复服务,根据腾讯提供超级补丁技术和Tinker的数据,那么会变成以下的场景:

  阿里百川HotFix:启动时间几乎无增加,不增加运行期额外的磁盘消耗。
  QQ空间超级补丁技术:如果应用有700个类,启动耗时增加超过2.5s,达到5.5s以上。
  微信Tinker:假设应用有5个DEX文件,分别修改了这5个DEX,产生5个patch.dex文件,就要进行5次的patch合并动作,假设每个补丁1M,那么就要多占用7.5M的磁盘空间。
  QQ空间超级补丁技术和微信Tinker 支持新增类和资源的替换,在一些功能化的更新上更为强大,但对应用的性能和稳定会有的一定的影响;阿里百川HotFix虽然暂时不支持新增类和资源的替换,对新功能的发布也有所限制,但是作为一项定位为线上紧急BUG的热修复的服务来说,能够真正做到BUG即时修复用户无感知,同时保证对应用性能不产生不必要的损耗,在热修复方面不失为一个好的选择。

安卓App热补丁动态修复实现 http://www.jianshu.com/p/56facb3732a7#
Android 超级补丁包技术- http://www.infoq.com/cn/presentations/android-super-patch-pack-technology?utm_source=infoq&utm_medium=videos_homepage&utm_campaign=videos_row1

Android 热补丁动态修复框架小结- http://blog.csdn.net/lmj623565791/article/details/49883661/

Android热更新实现原理- http://blog.csdn.net/lzyzsd/article/details/49843581
热点技术的原理分析及四大组件原理分析- http://blog.csdn.net/yueqian_scut/article/category/2152617

Android 热补丁技术——资源的热修复- http://blog.csdn.net/sbsujjbcy/article/details/52541803

iOS 动态更新方案上,我们跟进了对 JSPatch 和 React Native. JSPatch Demo--https://github.com/bang590/JSPatch/tree/master/Demo/DribbbleDemo

Android 彻底组件化方案实践- http://blog.csdn.net/wemedia/details.html?id=41294
 模块化是一种指导理念,其核心思想就是分而治之、降低耦合。而在Android工程中如何实施,目前有两种途径,也是两大流派,一个是组件化,一个是插件化。
 在快速编译上,采用组件级别的增量编译。在抽离组件之前可以使用代码级别的增量编译工具如freeline(但databinding支持较差)、fastdex等
动态更新方面,暂时不支持新增组件等大的功能改进。可以临时采用方法级别的热修复或者功能级别的Tinker等工具,Tinker的接入成本较高。

3、Rx(RxJava,RxVolley,RxBus)
> 1) RxJava
优雅(也许仅体现在lambda表达式)的链式表达,轻松的线程切换,让 RxJava 在 2015 年已然得以如日中天。如果此时你还不了解 RxJava 究竟是什么的话,我建议你一定要仔细反思一下自己是否已与世界脱轨。

(Android开发中,强烈推荐使用retrolambda这个gradle插件,这样你就可以在你的代码中使用lambda了。
gradle-retrolambda-- https://github.com/evant/gradle-retrolambda
RxJava
  RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西(触摸事件,web接口调用返回的数据。。。)
  一个Observable可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束。
  Rxjava的看起来很想设计模式中的观察者模式,但是有一点明显不同,那就是如果一个Observerble没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。
  1.Observable和Subscriber可以做任何事情
Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。
  2.Observable和Subscriber是独立于中间的变换过程的。

在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。)

RxJava核心库- https://github.com/ReactiveX/RxJava
RxJava在Android中使用的扩展库- https://github.com/ReactiveX/RxAndroid
Android控件对RxJava的支持库- https://github.com/JakeWharton/RxBinding
使SharedPreferences支持 RxJava- https://github.com/f2prateek/rx-preferences
帮助RxJava在Android中生命周期的控制,避免内存溢出等问题- https://github.com/trello/RxLifecycle
Retrofit- https://github.com/square/retrofit
数据库对RxJava的支持- https://github.com/pushtorefresh/storio
rxjava_for_android- https://github.com/cn-ljb/rxjava_for_android


> 2) RxVolley
RxVolley,让 Volley 支持了 RxJava 后,让你的代码很轻松的脱离了回调地狱。同时移除掉了复杂的 HttpClient ,以及可选支持 OkHttp 与 ImageLoader,让你使用自己习惯编码风格的同时极大缩减了项目体积。 

> 3) RxBus、RxBinding 
得益于 RxJava 繁多的操作符与特性,结合此类基于 RxJava 的库,将使你的代码更加简洁,开发效率大大提高。
RxBus,值得一提的是 RxBus 并不是一个库,而是一种设计思维,它可以巧妙利用 RxJava 的特性,完美替换掉了原事件总线类库(EventBus/Otto等)  

RxBinding, RxJava 封装的 View 事件处理,事件的改变以流的形式进行传递。 


4、React Native

    React Native是从 Web 前端开发框架 React 延伸出来的解决方案,主要解决的问题是 Web 页面在移动端性能低的问题,React Native 让开发者可以像开发 Web 页面那样用 React 的方式开发功能,同时框架会通过 JavaScript 与 Objective-C 的通信让界面使用原生组件渲染,让开发出来的功能拥有原生APP的性能和体验。
    这里会有一个学习成本的问题,大部分 iOS 开发者并不熟悉 Web 前端开发,当他们需要一个动态化的方案去开发一个功能模块时,若使用 React Native,就意味着他需要学习 Web 前端的一整套开发技能,学习成本很高。所以目前一些使用 React Native 的团队里,这部分功能的开发是由前端开发者负责,而非终端开发者。
    但前端开发者负责这部分功能也会有一些学习成本的问题,因为 React Native 还未十分成熟,出了 Bug 或有性能问题需要深入 React Native 客户端代码去排查和优化。也就是说 React Native 是跨 Web 前端开发和终端开发的技术,要求使用者同时有这两方面能力才能使用得当,这不可避免地带来学习成本的提高。

   跨平台典型的适用场景是电商活动页面,以展示为主,重开发效率轻交互体验,但不适用于功能性的模块。对 Android 来说目前热更新方案十分成熟,Android 十分自由,可以直接用原生开发后生成 diff 包下发运行,这种无论是开发效率和效果都是最好的。所以若是重体验的功能模块,Android 使用原生的热更新方案,iOS 使用 JSPatch 开发,会更适合。


5、Kotlin 语言

作为 Android 阵营的 Swift ,在2015年也迎来了它的正式版。Kotlin 拥有很多 Java 所不具备的特性, 比如空指针安全,函数默认参数,默认包含模板类,对 lambda 的原生支持(在 Android 开发中, 常常使用 RxKotlin )等特性。


6、直播(H5直播,Android/iOS原生直播)
直播技术- http://lib.csdn.net/base/liveplay
【Dev Club 分享第五期】H5 视频直播那些事-- http://dev.qq.com/topic/57a42ee6503dfcb22007ede8
H5视频直播扫盲-- http://www.nihaoshijie.com.cn/index.php/archives/615
移动直播技术秒开优化经验(含PPT)--  http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547042&idx=1&sn=26d8728548a6b5b657079eeab121e283&scene=23&srcid=0428msEitG9LJ3JaKGaRCEjg#rd

webview实现h5视频全屏播放兼容Android7.0,自己添加webview库兼容全部版本-http://blog.csdn.net/insist_hui/article/details/58172859  https://github.com/lshAndroid/WebviewTBS/tree/master

手机游戏直播:悟空TV客户端设计与技术难点-- http://geek.csdn.net/news/detail/105515

7. AR/VR

 VR视频播放器

(推荐)谷歌google vr demo- http://download.csdn.net/detail/zph1596946/9543674

http://www.androidauthority.com/developing-with-the-google-vr-sdk-and-ndk-699472/

VRDemo- https://github.com/xiangzhihong/VRDemo

https://github.com/uncleleonfan/VRDemo


  最新的google VR sdk,VR SDK包括unity版本和Java版本,两个版本功能差不多,一个用于unity平台,一个用于Android平台.
  制作VR视频播放器 (Google VR for Android)- http://www.jianshu.com/p/82163453ed30 http://blog.csdn.net/qq_24889075/article/details/52133170
 Google VR for Android
进入Google VR主页,发现官方给我们提供了两套解决观看VR视频的方式:Daydream;Cardboard;给我们提供了三个平台的API,分别是:Unity 3D 、Android、ios;
 Daydream is a much higher end VR experience. I have Cardboard, and it's neat, but in some ways, it feels like a tech demo. (白日梦是一个更高的终端虚拟现实体验。纸板,它很简洁,但在某些方面,感觉技术演示。)
 那么就此看来,应该是这样的情况:Cardboard是Google先推出的简陋版/测试版/经济适用版,现在占用了很大市场;Daydream 是今年新推出的豪华版/完善版/高端玩家版,会冲击Cardboard的市场。也就是说Cardboard短期不会死 ,Daydream还在发展中。
 gvr-android-sdk- https://github.com/googlevr/gvr-android-sdk
1,libraries
2,ndk-beta
3,samples
 samples目录中有四个Demo,分别是:
1,SDK-controllerclient(Daydream的控制端)
2,SDK-simplepanowidget(全景图)
3,SDK-simplevideowidget(全景视频 也就是VR视频)
4,SDK-treasurehunt(寻宝项目)这个是我们想要的,其他暂时不要管
 Unity VR/AR:
Unity3D官方VR的Demo:https://unity3d.com/cn/learn/tutorials/topics/virtual-reality
Unity3D全景视频播放AVPro Video插件- http://download.csdn.net/download/java886o/9592531

红包AR
OpenCV AR实现思路- http://blog.csdn.net/linshuhe1/article/details/51162517
OpenCV- http://blog.csdn.net/linshuhe1/article/category/6189251
在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的。

基于opencv实现的Android移动端口红包AR
算法的主要思路首先是通过人脸检测寻找到人脸区域,一旦找到之后就会使用跟踪算法对人脸部位进行跟踪、人脸检测算法可以选择Face++或者opencv自带的算法,然后对下部区域进行嘴唇检测,找到之后,选择不同光照下的嘴唇图像,提取ROI.


那些使用Web前端技术实现的梦幻VR虚拟现实效果- http://igeekbar.com/igeekbar/post/247.htm
基于web的VR类库,例如, A-frame, forge.js等
https://forgejs.org/


AI 苹果对增强现实(AR)和虚拟现实(VR),VR电影/游戏
Web端VR开发初探- https://mp.weixin.qq.com/s/3xwWzKsbHJZ4VonE8esBBg
WebVR 开发的方式,在Web上开发VR应用,有下面三种方式:
HTML5+ Java Scnipt + WebGL + WebVR API
传统引擎 + Emscripten[1]
第三方工具,如A-Frame[2]
第一种方法是使用WebGL与WebVR API结合,在常规Web端三维应用的基础上通过API与VR设备进行交互,进而得到对应的VR实现。第二种是在传统引擎开发内容的基础上,比如Unity、Unreal等,使用Emscripten将C/C++代码移植到Java Scnipt版本中,进而实现Web端的VR。第三种是在封装第一种方法的基础上,专门面向没有编程基础的普通用户来生产Web端VR内容。在本文中我们主要以第一和第三种方法为例进行说明。
https://github.com/bugrunnerzhang/hellowebvr.git
Apple App VR- http://download.csdn.net/detail/yunkai666/9863298

8、扩展
VR开发、智能硬件开发等
[人工智能技术发展及机器人、无人驾驶汽车领域]

你可能感兴趣的:(热点(hot)技术)