您好,欢迎访问三七文档
浅谈跨平台移动应用技术•比较流行的跨平台实现方式•不同跨平台方式的对比•微信小程序跨平台实现分类:4大流派•Web流:也被称为Hybrid技术,基于web相关技术实现界面和功能•代码转换流:将某个语言转成Objective-C、Java或C#,然后使用不同平台下的官方工具来开发•编译流:将某个语言编译为二进制文件,生成动态库或打包成apk/ipa/xap文件•虚拟机流:通过将某个语言的虚拟机移植到不同平台上来运行Web流技术对比共性说明优点不足phoneGap1、使用HTML5+CSS+JavaScript开发2、跨平台重用代码3、丰富的UI库4、提供访问设备原生API的JavaScriptAPI包装器5、解决原生开发中机型适配的难题6、提供打包、部署的工具或服务Cordova的分发版,发布于09年1、开源免费,社区生态成熟,插件丰富2、支持离线场景应用3、开发工具选择空间大只提供基础访问设备的接口,需要自己搭配其他UI框架和JavaScript框架来搭配Cordova11年Adobe收购phoneGap改名CordovaIonicCordova+AngularJS+一套样式库1、漂亮的界面,追求性能,专注原生,免费开源2、AngularJSMVVM开发理念,数据双向绑定3、继承自Cordova,可以使用Cordova的插件1、AngularJS学习路线陡峭2、Ionic框架相比于原生的Cordova有所差异,Cordova某些官方插件可能不适用于Ionic代码转换流技术对比说明将Java转成Objective-C谷歌推出的j2objc可以将不涉及UI的java代码转换(翻译)为objective-c的代码,实现约70%的代码跨平台复用将Objective-C转成Javamyappconverter,收费,有些应用不用改代码就能转换成功将Java转成C#Sharpen,JUniversal,使用的人不多,工具不成熟将Haxe转成其它语言Haxe没有自己的虚拟机或可执行文件编译器,所以只能通过转成其它语言来运行,目前支持转成Neko(字节码)、Javascript、Actionscript3、PHP、C++、Java、C#和Python,尽管有人实现了转成Swift的支持,但还是非官方的,所以要想支持iOS开发目前只能通过AdobeAIR来运行。在跨平台游戏开发方面可行。但熟悉它的开发者极少。XMLVM它首先将字节码转成一种基于XML的中间格式,然后再通过XSL来生成不同语言,目前支持生成C、Objective-C、JavaScript、C#、Python和Java。缺点:生成代码不可读,因为很多语言中的语法糖会在字节码中被抹掉。代码有问题基本没法修改,也没法调试代码。编译流技术对比说明C++只用C++实现非界面部分,实现界面:在iOS和WindowsPhone下可以分别使用C++的超集Objective-C++和C++/CX,在Android下通过JNI调用系统提供的Java方法。XamarinC#开发,在ios下以AOT的方式编译为二进制的文件,在Android通过内置Mono虚拟机实现。优点:开发APP所需的基本功能全都有,有商业支持。缺点:深入后会发现功能缺失,尤其是定制UI;相关资源太少,没有原生平台那么多第三方库。RoboVM将Java字节码编译为可在iOS下运行的机器码。和Xamarin很像,但RoboVM风险会小些,对优先开发Android版本的团队挺适用,但目前官方文档很少,而且不清楚RoboVM在iOS上的性能和稳定性。编译流技术总结编译流比前面的代码转换更进一步,它直接将某个语言编译为普通平台下的二进制文件,这种做法有明显的优缺点:优点:1、可以重用一些实现很复杂的代码2、或许性能会好些(具体要看实现)缺点:1、如果这个工具本身有Bug或性能问题,定位和修改成本会很高2、编译后体积不小,尤其是如果要支持ARMv8和x86的话虚拟机流技术对比说明ReactnativeReactNative要解决的是开发效率问题,很方便与native开发混用,它并没指望完全取代Native开发。使用风险可控,遇到问题可以随时改回Native实现。游戏引擎中的脚本游戏引擎大多都能跨平台,为了提升开发效率,不少引擎还内嵌了对脚本支持,比如:Unity3D,Cocos2d-JS。这些游戏引擎都不适合用来做APP,一方面是会遇到前面提到的界面绘制问题,另一方面游戏引擎的实现一般都要不断重绘,比普通App更耗电。优点:•组件化开发,复用率高,组件丰富以后,ui开发较快,前端式开发•利用了React里面的分层和diff机制。js层传给Native层的是一个diff后的json,然后由Native将这个数据映射成真正的布局视图•可以和原生页面互相调用,作为一部分嵌入到一个已有的原生app中•方便调试,可以进行代码热更新缺点:•系统仍然(不得不)依赖原生组件暴露出来的组件和方法•动画难以实现•目前还不稳定,版本更新太快,可能会出现不兼容的问题。有时候需要手动解决•更新也会引入bug•一些涉及到底层的东西需要在ios和android单独开发,然后在js层进行调用•比原生的性能要差。直观的感觉是复杂的页面在一些配置较低的手机上会有肉眼可见卡顿的感觉ReactNative小结:跨平台移动应用的优势•通过细致的规划,在跨平台方案中,能够实现50%-80%的代码重用。这样的话,可以实现更快的开发并降低成本。•在维护阶段,跨平台开发会带来额外的收益。如果在通用代码库中发现了bug,我们只需修正一次即可。•对于通用的代码,只需编写一次单元测试即可,这样我们就能将节省下来的预算用来编写更彻底更充分的单元测试。•我们可以使用已有的编程技能,无需学习平台相关的开发语言。•对于B2B应用和业务流程自动化应用来说,这种方式是很理想的,因为上线时间和资源利用率比外观和体验更为重要。小结:跨平台移动应用的不足•混合应用可能会导致UI反应迟钝•混合应用依赖于回调风格的编程,实现与原生插件的通信,这样会为代码引入不必要的复杂性。同时,对于一些任务,这可能会导致解决方案非常缓慢。•很多成功的应用都是以原生应用(不管是Android还是iOS)的方式来开发的。平台都有特定的用户体验方式,设计和构建一款针对多种平台的应用实在是很困难。•移动操作系统正在以很快的速度演进。每年会有越来越多的特性添加进来,这为跨平台SDK厂商带来了很多的工作,因为他们需要在操作系统新版本发布之后的很短的时间内,就拿出SDK的新版本。有时候,开发人员也需要花费很长的时间来升级应用,以支持跨平台SDK的新版本。微信小程序特点:•前端开发:js、wxml、wxss、json,开发便捷•不用安装,省流量,不占用桌面•结合微信,推广更容易局限:•小程序只有轻功能,无法承载功能复杂的应用•依赖于微信平台,受微信的限制适用场景:•实用性小型工具、简单的服务类应用•游戏推广、应用推广总结:•跨平台开发不会取代原生开发,但是可以根据需求,使用跨平台开发技术,提高开发效率,降低开发成本。•微信小程序也不能代替大部分原生应用,但能够把它作为一个便捷的入口、推广手段。Thankyou
本文标题:移动应用跨平台技术
链接地址:https://www.777doc.com/doc-5673080 .html