移动开发技术_移动技术高级开发 - CSDN
  • Android 核心技术

    2019-12-24 14:34:14
    深入学习Android核心技术,课程内容包括: Android 应用基础、Intent 和 Intent Filter、Activity、Fragment(片段)、任务和回退栈、Service、Content Provider、BroadcastReceiver、应用资源。
  • 原生开发技术 什么是原生开发? 原生开发指的是纯原生应用程序(简称App)开发,是在Android、iOS等移动平台上利用官方提供的开发语言、开发类库以及开发工具等进行App开发。比如Android App就是指使用Java或Kotlin...

    原生开发技术

    什么是原生开发?

    原生开发指的是纯原生应用程序(简称App)开发,是在Android、iOS等移动平台上利用官方提供的开发语言、开发类库以及开发工具等进行App开发。比如Android App就是指使用Java或Kotlin开发语言在Eclipse或Android Studio的开发工具上直接调用Android SDK API开发的App;而iOS App就是指通过Objective-C或Swift开发语言在Xcode的开发工具上直接调用iOS SDK API开发的App。

    原生开发的优点和缺点有哪些?

    原生App开发代表着较好的用户体验和更快更高的性能,但是原生App的可移植性比较差,特别是一款原生App,Android和iOS都要各自开发,同样的逻辑、界面都要写两套。

    主要优点:

    • 可访问Android/iOS(平台) 提供的全部功能(如GPS、摄像头...);
    • 速度快、性能高以及可实现复杂动画及绘制和整体用户体验好。

    主要缺点:

    • 平台特定、开发成本高;不同平台必须维护不同代码,人力成本随之变大;
    • 内容固定,动态化弱;大多数情况下,有新功能更新、Bug修复完时只能重新发版,用户需将App重新下载升级。

    跨平台开发技术

    背景

    在移动互联网发展初期,业务场景并不复杂,原生开发还可以应对产品需求迭代。但近几年,随着物联网时代到来,移动互联网高歌猛进、日新月异,在很多业务场景中,传统的纯原生开发已经不能满足日益增长的业务需求。

    主要表现在:

    • 动态化内容需求增大,当需求发生变化时,纯原生应用需要通过版本升级来更新内容,但应用上架、审核是需要时间周期的,这对高速变化的互联网时代来说是很难接受的,因此对应用动态化(不发版也可以更新应用内容)的需求就变的迫在眉睫。
    • 业务需求变化快,开发成本变大,由于原生开发的代码一般都要Android、iOS两个开发团队进行维护,而且版本迭代时,无论人力成本还是测试成本都会变大。

    因此针对纯原生开发主要面临的动态化和开发成本这两个问题,诞生了一些跨平台的动态化框架。

    H5+原生混合开发

    这类框架主要原理是将App的一部分需要动态变动的内容通过H5来实现,使用原生平台的网页加载控件WebView(Android)或WKWebView(iOS)来加载。这样一来,H5部分是可以随时改变而不用发版的,而且能满足动态化需求,同时,由于H5代码只需要一次开发,就能在Android和iOS两个平台上运行,这也可以减少开发成本,也就是说H5部分功能越多,开发成本就越小,我们称这种H5+原生的开发模式为混合(Hybrid)开发,采用混合模式开发的App称之为混合应用或Hybrid App,如果一个App的大多数功能都是H5实现的话,我们称其为Web App。

    目前混合开发框架的典型代表有:淘宝、Cordova和Ionic以及微信小程序等,值得一提的是微信小程序目前是在WebView中渲染的,但将来有可能会采用原生渲染。

    混合开发技术点:JS代码与原生代码之间的通信

    综上所述,原生开发可以访问平台全部功能,但混合开发中,H5代码是运行在WebView中,而WebView实质上就是一个浏览器内核,其JavaScript依然运行在一个权限受限的沙箱中,所以对于大多数系统的访问能力都受到了限制,如无法访问文件系统、不能使用蓝牙等。所以,对于H5不能实现的功能,都需要原生去做。而混合框架一般都会在原生代码中预先实现一些JavaScript需要访问系统能力的API,然后暴露给WebView以供JavaScript调用,这样一来,WebView就成为了JavaScript与原生API之间通信的桥梁,主要负责JavaScript与原生之间传递调用消息,而消息的传递必须遵守一个标准的协议,它规定了消息的格式与含义,我们把依赖于WebView的,用于在JavaScript与原生之间通信并实现了某种消息传输协议的工具称之为WebView JavaScript Bridge(简称JsBridge),它也是混合开发框架的核心。

    示例:JavaScript调用原生API获取手机型号

    下面我们以Android为例,实现一个获取手机型号的原生API供JavaScript调用。在这个示例中将展示JavaScript调用原生API的流程,读者可以直观的感受一下调用流程。我们选用Github上开源的dsBridge(Android版iOS版)来进行通信。dsBridge是一个支持同步调用的跨平台的JsBridge,此示例中只使用其同步调用功能。

    1.首先在原生中实现获取手机型号的API

    class JSAPI{
      @JavascriptInterface
      public Object getPhoneModel(Object msg) {
        return Build.MODEL;
      }
    }
    复制代码

    2.将原生API通过WebView注册到JsBridge中

    import wendu.dsbridge.DWebView
    ...
    //DWebView继承自WebView,由dsBridge提供  
    DWebView dwebView= (DWebView) findViewById(R.id.dwebview);
    //注册原生API到JsBridge
    dwebView.addJavascriptObject(new JSAPI(), null);
    复制代码

    3.在JavaScript中调用原生API

    var dsBridge=require("dsbridge")
    //直接调用原生API `getPhoneModel`方法
    var model=dsBridge.call("getPhoneModel");
    //打印机型
    console.log(model);
    复制代码

    上面示例演示了JavaScript调用原生API的过程,同样的,一般来说优秀的JsBridge也支持原生调用JavaScript,dsBridge也是支持的,如果您感兴趣,可以去Github dsBridge(Android版iOS版)项目主页查看。

    总结

    混合应用的优点是动态内容是H5,新功能增加、Bug的修复完无需让App再次发版,Web技术栈、社区及资源丰富,缺点就是性能不好,对于复杂用户界面或动画,WebView不堪重任。

    JavaScript开发+原生渲染

    目前市面上流行的JavaScript开发+原生渲染的跨平台框架有快应用、WeexReact Native(简称RN)。

    由于RN和React原理相通,并且Flutter也是受React启发,很多思想也都是相通的,万丈高楼平地起,我们有必要深入了解一下React原理,React是一个响应式的Web框架,我么先了解两个重要的概念:DOM树与响应式编程。

    DOM树

    文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口,一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档的标准接口。简单来说,DOM就是文档树,与用户界面控件树对应,在前端开发中通常指HTML对应的渲染树,但广义的DOM也可以指Android中的XML布局文件对应的控件树,而术语DOM操作就是指直接来操作渲染树(或控件树),因此,可以看到其实DOM树和控件树是等价的概念,只不过前者常用于Web开发中,而后者常用于原生开发中。

    响应式编程

    React中提出一个重要思想:状态改变则UI随之自动改变,而React框架本身就是响应用户状态改变的事件而执行重新构建用户界面的工作,这就是典型的响应式编程方式,下面我们总结一下React中响应式原理:

    • 开发者只需关注状态转移(数据),当状态发生变化,React框架会自动根据新的状态重新构建UI。
    • React框架在接收到用户状态改变通知后,会根据当前渲染树,结合最新的状态改变,通过Diff算法,计算出树中变化的部分,然后只更新变化的部分(DOM操作),从而避免整棵树重构,提高性能。

    值得注意的是,在上述第二步中,状态变化后React框架并不会立即去计算并渲染DOM树的变化部分,相反,React会在DOM的基础上建立一个抽象层,即虚拟DOM树,对数据和状态所做的任何改动,都会被自动且高效的同步到虚拟DOM中,最后再批量同步到真实DOM中,而不是每次改变都去操作一下DOM。为什么不能每次改变都直接去操作DOM树?这是因为在浏览器中每一次DOM操作都有可能引起浏览器的重绘或回流:

    • 如果DOM只是外观风格发生变化,如颜色变化,会导致浏览器重绘界面;
    • 如果DOM树的结构发生变化,如尺寸、布局以及节点隐藏等,会导致浏览器回流及重新排版布局。

    而浏览器的重绘和回流都是比较昂贵的操作,如果每一次改变都直接对DOM进行操作,这会带来性能问题,而批量操作只会触发一次DOM更新。

    JavaScript开发+原生渲染的跨平台框架

    RN

    RN是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架React在原生移动应用平台的衍生产物,目前支持iOS和Android两个平台。RN使用JavaScript语言,类似于HTML的JSX(即JavaScript XML——一种在React组建内部构建标签的类XML语法),以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。

    RN是React在原生移动应用平台的衍生产物,那两者主要的区别是什么呢?其实,主要的区别在于虚拟DOM映射的对象是什么?React中虚拟DOM最终会映射为浏览器DOM树,而RN中虚拟DOM会通过JavaScriptCore映射为原生控件树。

    1、JavaScriptCore是一个JavaScript解释器,它在RN中主要有两个作用:

    ①、为JavaScript提供运行环境;

    ②、是JavaScript与原生之间通信的桥梁,作用和JsBridge一样,事实上,在iOS中,很多JsBridge的实现都是基于JavaScriptCore。

    2、RN中通过JavaScriptCore将虚拟DOM映射为原生控件的过程分为两步:

    ①、布局消息传递,将虚拟DOM布局信息传递给原生;

    ②、原生根据布局信息通过对应的原生控件渲染控件树。

    至此,RN便实现了跨平台,相对于混合应用,因为RN是原生控件渲染,所以性能会比混合应用中的H5好很多,同时RN是Web开发技术栈,也只需维护一份代码,即可在多个平台上使用。

    Weex

    Weex是阿里巴巴于2016年发布的跨平台移动应用开发框架,思想及原理和RN类似,最大的不同是语法层面,RN只支持JSX语法,而Weex支持Vue语法和Rax语法,Rax的DSL语法是基于React JSX语法而创造的,与React不同,在Rax中JSX是必选的,它不支持通过其他方式创建组件,所以学习JSX是使用Rax的必要基础。

    快应用

    快应用是华为、小米和OPPO以及魅族等国内9大主流手机厂商共同制定的轻量级应用标准,目标直指小程序。它也是采用JavaScript语言开发,原生控件渲染,与RN和Weex相比主要有两点不同:

    • 快应用自身不支持Vue或React语法,其采用原生JavaScript开发,开发框架和微信小程序很像,值得一提的是小程序目前已经可以使用Vue语法开发(mpvue),从原理上来讲,Vue的语法也可以移植到快应用上。
    • RN和Weex的渲染/排版引擎是集成到框架中的,每一个App都需要打包一份,安装包体积较大;而快应用渲染/排版引擎是集成到ROM中的,应用中无需打包,安装包体积小,正因如此,快应用才能在保证性能的同时做到快速分发。

    总结

    JavaScript开发+原生渲染的方式主要优点如下:

    • 采用Web开发技术栈、社区庞大和上手快以及开发成本相对较低;
    • 原生渲染,性能相比H5提高很多;
    • 动态化较好,支持热更新。

    JavaScript开发+原生渲染的方式主要缺点如下:

    • 渲染时需要JavaScript和原生之间通信,在有些场景,如拖动可能会因为通信频繁导致卡顿;
    • JavaScript为脚本语言,执行时需要JIT(即时编译),执行效率和AOT(提前编译)代码仍有差距;
    • 由于渲染依赖原生控件,不同平台的控件需要单独维护,并且当系统更新时,社区控件可能会滞后;除此之外,其控件系统也会受到原生UI系统限制,例如,在Android中,手势冲突消歧规则是固定的,这在使用不同人写的控件嵌套时,手势冲突问题将会变得非常棘手。

    自绘UI+原生

    自绘UI+原生是一种跨平台技术,这种技术的思路是:通过在不同平台实现一个统一接口的渲染引擎来绘制UI,而不依赖系统原生控件,所以可以做到不同平台UI的一致性。注意,自绘引擎解决的是UI跨平台问题,如果涉及其他系统能力调用,依然要依赖原生开发。

    自绘UI+原生的优点如下:

    • 性能高;因为自绘引擎是直接调用系统API来绘制UI,所以性能和原生控件接近。
    • 灵活、组件库易维护以及UI外观保真度和一致性高;因为UI渲染不依赖原生控件,也就不需要根据不同平台的控件单独维护一套组件库,所以代码容易维护;由于组件库是同一套代码、同一个渲染引擎,所以在不同平台,组件显示外观可以做到高保真和高一致性;另外,由于不依赖原生控件,也就不会受原生布局系统的限制,这样布局系统会非常灵活。

    自绘UI+原生的缺点如下:

    • 动态性不足;因为为了保证UI绘制性能,自绘UI系统一般都会采用AOT(提前编译)模式编译其发布包,所以应用发布后,不能像Hybrid和RN那些使用JavaScript(JIT,即时编译)作为开发语言的框架那样动态下发代码。

    也许你已经猜到Flutter就属于这一类跨平台技术,没错,Flutter实现了一套自绘引擎,并拥有一套自己的UI布局系统。不过,自绘引擎的思路并不是什么新概念,Flutter也并不是第一个尝试这么做的,在它之前就有一个典型的代表——QT。

    QT

    QT是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者构建图形用户界面所需的所有功能。但是,QT虽然在PC端获得了巨大成功,备受社区追捧,然而其在移动端却表现不佳,在近几年,虽然偶尔能听到QT的声音,但一直很弱,无论QT本身技术如何、设计思想如何,但事实上终究是败了,究其原因,笔者认为主要有四:

    • QT移动开发社区太小,学习资料不足,生态不好;
    • 官方推广不利,支持不够;
    • 移动端发力较晚,市场已被其它动态化框架占领(Hybrid和RN);
    • 在移动开发中,C++开发和Web开发栈相比有着先天的劣势,直接结果就是QT开发效率太低。

    基于此四点,尽管QT是移动端开发跨平台自绘引擎的先驱,但却成为了烈士。

    Flutter

    Flutter是Google推出并开源的移动应用程序(App)开发框架,主打跨平台、高保真、高性能。其采用Dart语言作为开发语言,开发者可以通过Dart语言开发Flutter App,一套代码可同时运行在iOS和Android平台上。Flutter提供了丰富的组件、接口,开发者可以很快地为Flutter添加原生扩展。

    Flutter与其他用于构建App的大多数框架不同,因为Flutter既不使用WebView,也不使用平台(Android、iOS等)的原生控件。相反,Flutter使用自己的高性能渲染引擎来绘制Widget。这样不仅可以保证在Android和iOS平台上UI的一致性,而且也可以避免对原生控件依赖而带来的限制及高昂的维护成本。

    Flutter使用Skia作为其2D渲染引擎,Skia是Google的一个2D图形处理函数库,包含字型、坐标转换以及点阵图都有高效能且简洁的表现,Skia是跨平台的,并提供了非常友好的API,目前Google Chrome浏览器和Android均采用Skia作为其绘图引擎,值得一提的是,由于Android系统已经内置了Skia,所以Flutter在打包APK(Android应用安装包)时,不需要再将Skia打入APK中,但iOS系统并未内置Skia,所以构建iPA时,也必须将Skia一起打包,这也是为什么Flutter APP的Android应用安装包比iOS应用安装包小的主要原因。

    但是Flutter也有不足之处,不支持动态下发代码和热更新。

    请戳一戳了解更多Flutter

    本章总结

    本章主要介绍了目前移动开发中三种跨平台开发技术和原生开发技术,现在我们从框架角度对比一下三种跨平台开发技术:

    技术类型 UI渲染方式 性能 开发效率 动态化 框架代表
    H5+原生 WebView渲染 一般 ✔️ Cordova、Ionic
    JavaScript+原生渲染 原生控件渲染 ✔️ RN、Weex
    自绘UI+原生 调用系统API渲染 Flutter高,QT低 默认不支持 QT、Flutter

    上表中动态化主要指是否支持动态下发代码和是否支持热更新。值得注意的是Flutter的Release包默认是使用Dart AOT(提前编译)模式编译的,所以不支持动态化,但Dart还有JIT(即时编译)或snapshot运行方式,这些模式都是支持动态化的,后续会介绍。

    此文章整理于:book.flutterchina.club/

    展开全文
  • 移动端开发技术浅析

    2017-10-19 16:35:03
    移动端开发技术浅析目录 APK下载 概述 技术介绍 技术对比 参考资料 1. APK 下载百度云链接:https://pan.baidu.com/s/1pLp44Fh2. 概述“一次编码,处处运行” 永远是程序员们的理想乡。二十年前 Java 正是举着这...

    移动端开发技术浅析


    目录

    1. APK下载
    2. 概述
    3. 技术介绍
    4. 技术对比
    5. 参考资料

    1. APK 下载

    百度云链接:https://pan.baidu.com/s/1pLp44Fh

    2. 概述

    “一次编码,处处运行” 永远是程序员们的理想乡。二十年前 Java 正是举着这面大旗登场,击败了众多竞争对手。但是时至今日,事实已经证明了 Java 笨重的体型和缓慢的发展显然已经很难再抓住这个时代快速跃动的脚步。在新时代的移动大潮下,一个应用想要取胜,完美的使用体验可以说必不可少。使用 native 的方式固然对提升用户体验很有帮助,但是移动的现状是必须针对不同平台 (至少是 iOS 和 Android) 进行开发。这对于开发来说妥妥的是隐患和额外的负担:我们不仅需要在不同的项目间努力用不同的语言实现同样代码的同步,还要承担由此带来的后续维护任务。如果仅只限制在 iOS 和 Android 的话还行,但是如果还要继续向 Windows Phone 等平台拓展的话,所需要付出的代价和工数将几何级增长,这显然是难以接受的。于是,一个其实一直断断续续被提及但是从没有占据过统治地位的概念又一次走进了移动开发者们的视野,那就是跨平台开发。

    3. 技术介绍

    在移动端进行App开发的历史潮流中,涌现出了很多的新技术,其中有 webview+html+css3 ,RN(React Native), NS(native script)等等一系列的开发技术。下面就一一介绍各个技术的实现
    开发模式

    hybrid APP

    介绍

    Hybrid App是指介于web-app、native-app这两者之间的app,它虽然看上去是一个Native App,但只有一个UI WebView,里面访问的是一个Web App,比如街旁网最开始的应用就是包了个客户端的壳,其实里面是HTML5的网页,后来才推出真正的原生应用。再彻底一点的,如掌上百度和淘宝客户端Android版,走的也是Hybrid App的路线,不过掌上百度里面封装的不是WebView,而是自己的浏览内核,所以体验上更像客户端,更高效。

    开发语言

    html + javascript + css3

    运行机制

    在开发中js+h5+css3来开发UI,如果需要调用原生的API的话只能通过webview 来进行调用。如果webview 上面的API不满足需求则可能需要自己来进行插件的开发。此项技术的核心为webview。

    Xamarin APP

    介绍

    作为一个跨平台开发框架,在这一框架内,开发iOS、Android、Windows Phone和Mac App应用可以不用转到Eclipse 或者额外购买Mac并使用Xcode,而继续在Visual Studio之中使用C#与.NET Framework进行。Xamarin.Mobile有很多优点。 Xamarin Studio是一个用C#语言开发跨平台应用的集成开发环境,它和iOS以及Android SDK紧密整合。Xamarin Studio提供了很多现代开发所需功能,包括代码完成、调试器、打包和发布应用(支持通过TestFlight发布应用程序)。对于Android,Xamarin还包含了自己的UI生成器(对于iOS,则使用苹果Xcode的UI生成器),此外还集成了Git和Subversion。开发者可以使用Xamarin Studio在模拟器和真机上对移动应用进行测试和bug调试。Xamarin Studio能够完美支持Windows和Mac。Visual Studio Xamarin还提供了for vs2010 vs2012的插件,这个是比较吸引人的地方。该插件可以很好地与微软的生态系统集成,可以在Mac OS机器的仿真器上进行远程调试和测试。在Mac OS上,因为iOS的现有限制,面向iOS的C#代码会通过AOT编译技术直接编译为ARM汇编代码。而在Android上,应用程序会转换为IL,启动时再进行JIT编译。但插件里面只有Android/iOS类型的项目,更多其它平台上的项目都没有。iOS的项目的编译和调试需要Xcode支持,则说明还需要一台Mac的系统以及Xcode环境,以及一个装在Mac上的辅助软件Xamarin.iOS,Xamarin.iOS是运行在Mac上的软件,用来负责编译和调试软件,并且把结果通过socket通信反应到IDE上。

    开发语言

    c#

    运行机制

    收费,自己底层封装的原生的组件供给c#来进行调用。在顶层提供统一的API调用

    native script APP

    介绍

    NativeScript 的思路就是使用移动平台的 JavaScript 引擎来进行跨平台开发。逻辑部分自然无需多说,关键在于如何使用平台特性,JavaScript 要怎样才能调用 native 的东西呢。NativeScript 给出的答案是通过反射得到所有平台 API,预编译它们,然后将这些 API 注入到 JavaScript 运行环境,接下来在 Javascript 调用后拦截这个调用,并运行 native 代码。这么做最大的好处是你可以任意使用最新的平台 API 以及各种第三方库。通过对元数据的反射和注入,NativeScript 的 JavaScript 运行环境总能找到它们,触发相应的调用以及最终访问到 iOS 或者 Android 的平台代码。最新版本的平台 SDK 或者第三方库的内容总是可以被获取和使用,而不需要有什么限制。对于 UI 的处理,NativeScript 选择了使用类似 Android 的 XML 的方式进行布局,然后用 CSS 来控制控件的样式。内置数据双向绑定。android上用法v8 虚拟机。ios 上用内置的javascriptcore

    开发语言

    javascript + css3 + xml

    运行机制

    在javascript 代码运行的时候自动注入全局的native的API,即调用的除了js的原生的代码外,其他属于native script的js代码都会映射到原生的js代码调用。

    weex APP

    介绍

    Weex 是一套简单易用的跨平台开发方案,能以 web 的开发体验构建高性能、可扩展的 native 应用,为了做到这些,Weex 与 Vue 合作,使用 Vue 作为上层框架,并遵循 W3C 标准实现了统一的 JSEngine 和 DOM API,这样一来,你甚至可以使用其他框架驱动 Weex,打造三端一致的 native 应用。Weex 表面上是一个客户端技术,但实际上它串联起了从本地开发环境到云端部署和分发的整个链路。开发者首先可以在本地像撰写 web 页面一样撰写一个 app 的页面,然后编译成一段 JavaScript 代码,形成 Weex 的一个 JS bundle;在云端,开发者可以把生成的 JS bundle 部署上去,然后通过网络请求或预下发的方式传递到用户的移动应用客户端;在移动应用客户端里,WeexSDK 会准备好一个 JavaScript 引擎,并且在用户打开一个 Weex 页面时执行相应的 JS bundle,并在执行过程中产生各种命令发送到 native 端进行的界面渲染或数据存储、网络通信、调用设备功能、用户交互响应等移动应用的场景实践;同时,如果用户没有安装移动应用,他仍然可以在浏览器里打开一个相同的 web 页面,这个页面是使用相同的页面源代码,通过浏览器里的 JavaScript 引擎运行起来的。Weex 的 iOS 和 Android 客户端中都会运行一个 JavaScript 引擎,来执行 JS bundle,同时向各端的渲染层发送规范化的指令,调度客户端的渲染和其它各种能力。在 iOS 下选择了 JavaScriptCore 内核,而在 Android 下选择了 UC 提供的 v8 内核。无论是从性能还是稳定性方面都提供了强有力的保障。

    开发语言

    javascript + css3 + vue

    运行机制

    通过weex SDK准备的javascript引擎来运行js代码,并且进行native代码的调度。

    react native APP

    介绍

    React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的UI框架 React 在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP。React Native着力于提高多平台开发的开发效率 —— 仅需学习一次,编写任何平台。(Learn once, write anywhere),RN需要一个JS的运行环境, 在IOS上直接使用内置的javascriptcore, 在Android 则使用webkit.org官方开源的jsc.so。
    ##### 开发语言
    es6+css3+jsx

    运行机制

    UI采用React 的虚拟dom。API通过jsbridge 调用native方法。bridge是一种JS 和 JAVA代码通信的机制, 用bridge函数传入对方module 和 method即可得到异步回调的结果。

    flutter APP

    特点

    Flutter是一个移动应用程序的软件开发工具包(SDK),用一个代码库构建高性能、高保真的iOS和Android应用程序。目标是使开发人员能够为Android和iOS提供自然的高质量的应用,在滚动行为、排版、图标等方面实现零差异。学习Flutter不需要Android或iOS的开发经验,因为Flutter程序使用Dart语言编写,如果您使用过Java或JavaScript等语言,轻易就能上手,只要有面向对象语言的经验,即使不是程序员也能开发Flutter应用程序!

    开发语言

    dart

    运行机制

    flutter 内置一套engine,所编写的代码都是在该engine上面运行的。engine由C++编写实现。运行速度和原生APP相差不大。所有的UI组件由虚拟机进行绘制

    4. 技术对比

    Hybrid Xamarin native script weex react native flutter
    android & ios代码共享程度 100% 90% 90% 90% 90% 100%
    开发语言 html5+css3+js c# javascript+css+xml vue+es6+css3 react+es6+css3 dart
    动画效果支持 较好 较好
    用户体验性 一般 流畅 流畅 流畅 流畅 流畅
    插件丰富程度 丰富 未知 较丰富 比较少 较丰富 较丰富
    学习成本(针对web前端开发) 较低 较高 较高
    界面开发难易程度 较低 较高 较高 较高
    数据绑定
    中文文档支持
    是否支持 xml 标签语法
    是否支持热更新 未知
    是否支持和现有项目集成 未知
    github star - - 11305 5567 54221 7762
    最低支持Android版本 取决于对webview的支持程度 可选择 4.2+ 可选择 4.1+ 4.2+
    最低支持IOS版本 取决于对webview的支持程度 可选择 iOS8+ 可选择 iOS8.0+ iOS8+

    5. 参考资料

    1. flutter官网

    2. nativescript官网

    3. React Native 中文官网

    4. hybrid app 百度百科

    5. React官网

    6. dart 官网

    7. ES6基础教程

    如果您也对web前端移动端开发以及想对前沿学习了解的话,请加前端学习交流群:304638320,并且注明是通过csdn渠道加入的该群

    展开全文
  • 目前来说主流的App开发方式有三种:Native App 、Web App、Hybird App。下面我们来分析一下这三种App开发方式的优劣对比: 一 :Native App 即 原生App开发 优点: (1)打造完美的用户体验 (2)性能稳定 (3)操作...

    目前来说主流的App开发方式有三种:Native App 、Web App、Hybird App。下面我们来分析一下这三种App开发方式的优劣对比:

    一 :Native App 即 原生App开发

    优点:

    (1)打造完美的用户体验

    (2)性能稳定

    (3)操作速度快,上手流畅

    (4)访问本地资源(通讯录,相册)

    (5)设计出色的动效,转场,

    (6)拥有系统级别的贴心通知或提醒

    (7)用户留存率高

    缺点:

    (1)分发成本高(不同平台有不同的开发语言和界面适配)(2)维护成本高(例如一款App已更新至V5版本,但仍有用户在使用V2, V3, V4版本,需要更多的开发人员维护之前的版本)(3)更新缓慢,根据不同平台,提交–审核–上线 等等不同的流程,需要经过的流程较复杂。

    从android、iOS智能手机开始出现就开发有的开发App的技术,性能体验是最优的,API比较完善,但是学习起来难度相对来说比较高,开发成本比较高(跟开发周期相对来说比较长也是有关系的)。

    二 :Web App 即 网页App开发

    1、特点(html css js)

    2、优势 (发版完全自控随时更新开发成本小时间快)3、劣势(性能差弱网络无网络条件下体验差)Web App其实就是写好的一套长得像App UI界面的能够自适应的网页加壳。本质套webview壳子打包成App,走的都是web页面(html css js),这种方式对于做过Web开发的开说非常轻松就可以做出一个属于自己的App,因为本身来说用的就是Web的东西,所以有非常好的跨平台的特性可以在任意平台运行,包括发版这方面web可以随时部署所以不需要发版,web页面嵌入webview开发起来速度非常快,一个人就可以轻松搞定,对有展示类需求的项目来说采用这种方式是最适合的,但是如果要实现的功能比较复杂的话就显得力不从心了。

    相比Native App,Web App体验中受限于网络环境和渲染性能。

    网络环境,渲染性能
    Web APP对网络环境的依赖性较大,因为Web APP中的H5页面,当用户使用时,去服务器请求显示页面。如果此时用户恰巧遇到网速慢,网络不稳定等其他环境时,用户请求页面的效率大打折扣,在用户使 用中会出现不流畅,断断续续的不良感受。同时,H5技术自身渲染性能较弱:对复杂的图形样式,多样的动效,自定义字体等的支持性不强。

    因此,基于网络环境和渲染性能的影响,在设计H5页面时,应注意以下几点:

    1.简化不重要的动画/动效

    2.简化复杂的图形文字样式

    3.减少页面渲染的频率和次数

    三 :Hybrid App 即 混合型App开发

    1、特点(native +js或其他语言)

    2、优势(相对体验好稳定性强动态性强成本相对低跨平台)3、劣势(对团队技术栈要求相对高性能优化)Hybrid App就是Native结合Web混合开发,Native+js代码 代表作是cordova前身是phonegap,现在移交给Apache,核心JsBridge,js调java,java调js。因为有原生做基础相对体验好接近原生,因为依赖原生API所以稳定性强。跟js相互通信并不是所有都用js,所有都依赖webview。采用原生模块和js模块,js模块可以随时发版,这也是这些大厂为什么选择这个技术的原因,手淘用的就是Hybird技术,其实它的优化难度不亚于原生,但是为什么选择Hybird去做呢,就是因为热发版。

    1、在未来一段时间内,很大程度上会形成以Hybrid形式为主的移动端开发方式。

    2、web App目前是无法取代原生App开发语言的。

    3、App开发的成本、时间周期、性能优化、体验优化、动态性等将成为多数App所关注的重点。

    展开全文
  • APP开发种类 目前主流的APP主要为iOS版本和Android版本...由于Native APP开发成本高、难度大,随着技术的发展,出现了Hybrid(混合)APP开发,即支持跨平台或支持原生+H5相结合的APP。除此之外,还有一种称为Web Ap...

    APP开发种类

    目前主流的APP主要为iOS版本和Android版本。早期APP的开发,两个版本需要分开独立进行,分别使用Objective-C/swift和Java语言。这些APP也称为Native APP,即原生系统。由于Native APP开发成本高、难度大,随着技术的发展,出现了Hybrid(混合)APP开发,即支持跨平台或支持原生+H5相结合的APP。除此之外,还有一种称为Web App的移动端Web系统,其完全使用Web技术进行开发,与操作系统无关。原生、Hybrid及Web APP之间关系如下图所示:
    这里写图片描述

    开发种类的比较

    开发种类 优点 缺点
    原生Native (1) 可访问手机所有功能(GPS、摄像头);(2) 性能高、用户体验最好(3) 可离线使用; (4) 支持图形和动画; (1) 开发及维护成本高; (2) 支持设备有限(系统只能运行在一个平台上);(3) 新版本需重新下载应用;
    Web (1) 基于浏览器运行,可跨平台; (2) 开发工具选择多; (3) 不需要安装,控制更新容易;(4) 对开发人员要求相对低;(5) 开发成本低; (1) 只能使用有限的硬件设备能力; (2) 安全性低; (3) 必须联网; (4) 用户体验不是很好;(5) 性能低;
    混合Hybrid (1) 可以混合使用原生和Web技术;(2) 可以跨平台;(3) 开发成本比原生低;(4) 可以利用手机的多种功能; (5) 可离线使用; (1) 用户体验不如原生; (2) 性能稍慢;(3) 技术还不是很成熟;

    混合开发方式

    方式一

    这里写图片描述

    方式二

    这里写图片描述

    比较

    名称 优点 缺点
    Cordova 可以跨平台;框架比较成熟;学习成本较低;基本不需要Android开发技能;对原生的特定要求,可以使用已有插件,也可以自定义开发 框架较重;性能可能稍差;中文参考文档少;自定义插件的开发,需要由原生开发人员完成
    Android+H5 框架量级较轻;可以使用全部硬件功能;采用MVP模式,可以简化开发;可选前端框架比较多;性能比较好 不能跨平台;学习成本较高(需要了解android开发及前端框架);框架繁多,多数不成熟,可能会遇到一些陷进

    其它

    Android原生APP的开发有很多开源的框架可以使用,很多都可以从GitHub上找到。比如MVP架构的mvpart,以及基于事件的异步编程库RxJava2,以及前端框架vasSonic等。

    展开全文
  • 移动开发很火,移动开发技术很多。都有哪些技术?相互对比如何?怎样选择? 简单列了个表。 其中Native指原生语言,如安卓的java语言,苹果的objective-c或swift;Hybrid指混合开发,在前种语言基础上,借助...
  • 移动开发技术(一)

    2020-03-13 21:01:01
    开发的角度:软件=数据结构+算法 从测试的角度:软件=程序+文档 **问:**所以软件测试的对象是什么? **答:**程序和文档(都要测试) 拓展内容: 软件开发分为哪几个阶段? 需求分析阶段 由需求分析人员完成 ...
  • 其中的预兆有初级和实习职位的减少,投机性移动创业公司融资困难,人们的注意力被AI、VR、直播等技术所吸引,移动开发光环不再。也许再过几年,它会和其它开发职位一样,不再是转岗的首选、高薪的代名词。 虽然光环...
  • 选择合适的技术栈是移动开发领域最关键的决策之一。你选择的技术栈将为你开发的移动应用提供基本的功能、可拓展和维护性。选择技术栈时应该注意项目的类型、预期投入市场的时间和创意的可行性。 原则上来说,选择何...
  • 很难说,因为Java、object-C在原生开发界已大行其道这么多年,C#这么多年固步自封,很难说在移动开发领域能重新有所建树。   目前国内有一个基于VB/C#的APP开发平台,叫Smobiler,它主打的就是.Net移动开发,使用...
  • 摘要由于H5的逐步普及,混合移动应用开发变的炙手可热,其主要的开发语言就是JavaScript,这在很多人看来无论是在性能和安全上来讲,并不被大家所看好,所今天就来谈一下如何对混合应用做优化以及加密,希望对大家...
  • 由于要交作业,花一整天的时间完成了这个app的开发。 功能是个人简历介绍。 项目结构 MainActivity使用的之前写的登录界面xml代码:(两个输入文本 一个登陆按钮 范佩西背景图)<?xml versi
  • 最近两个月以来工作之余一直在做一件事情,就是把现在的产品移植到各主流移动平台上。其实需求很简单,就是想让现有的产品能在各大移动平台上有个端,让客户能移动办公。这个需求大概也是个大众化普遍的需求,于是乎...
  • 移动开发-混合App介绍

    2018-06-25 08:56:38
    3种开发类型的原理和对比 什么是混合App(Hybrid App) Hybrid App是指介于web-app(网页APP,如京东web)、native-app(原生应用,如手机上面的APP应用)这两者之间的app,它虽然看上去是一个Native App,但...
  • 这里我想是因为网易在网上审核阶段就已经很认真地筛选了一部分人,我身边的好几个技术不错的同学都被刷了,所以,提醒以后网申网易的同学,一定要认真对待网申。看了看考场外的名单,同我一个方
  • 这是我在MDCC 2015中国移动开发者大会发表的“HTML5移动应用多端开发架构实践”的演讲ppt,最近又有人要ppt,放在这里吧,欢迎下载!
  • Android移动开发

    2018-03-18 09:30:59
    前天老师上课布置了实验,分基础实验和拓展实验,基础实验就是按照老师的要求以及所给代码来编写,拓展实验是设计一个法国国旗,填满整个手机屏幕我写的代码是根据老师的代码稍作修改的,以上,得出结果为尽管是个...
  • 当今移动开发炙手可热,以iPhone、Android、WP和Symbian、Bada等几大系统瓜分天下。 而相关的开发语言成为进入移动圣殿的钥匙,它们是:Objective-C、Java、C#和C++。 先来看看7月份的编程语言排名: 在来看...
  • 接下来,也许我们将进入一个井喷期,新的移动开发技术会不断涌现出来,移动应用的种类将超出我们的想象。移动开发的发展将会造就一个移动人才的需求高峰,而这就意味着图书市场会产生较大的涉及各个层级的移动应用...
  • 什么是移动开发

    2014-04-16 10:29:35
    移动开发[1]也称为手机开发,或叫做移动互联网开发[2]。是指以手机、PDA、UMPC等便携终端为基础,进行相应的开发工作,由于这些随身设备基本都采用无线上网的方式,因此,业内也称作为无线开发。 移动应用开发是为...
1 2 3 4 5 ... 20
收藏数 385,200
精华内容 154,080
关键字:

移动开发技术