精华内容
下载资源
问答
  • 移动开发技术
    千次阅读
    2020-11-30 09:28:13

    前端最常用的移动App开发方式及技术栈详解

    混合App相关技术

    共同点:

    • 把网页打包成移动 App,使 Web 程序可以访问手机原生能力。

    Cordova

    Cordova 是Apache软件基金会的一个产品。其前身是PhoneGap,由Nitobi开发,2011年10月,Adobe收购了Nitobi,并且PhoneGap项目也被贡献给Apache软件基金会。Apache在2012年12月,发布了Cordova,截止到2015年12月,最新版面是3.0。

    该框架的目标用户群体是原生开发者,其设计初衷是希望用户群体能够通过跨平台开发的方法降低原生开发的成本。为此,开发人员需要安装原生开发环境,配置工程,使用HTML5、CSS3、JS和原生SDK生成应用。

    优点

    Cordova的优势很明显,可以使用的框架、原生接口、支持平台都很多。

    缺点

    1. 外国人写的东西,公司使用后,出现的技术问题难以解决。同时,
    2. 在使用 jQuery Mobile、Sencha Touch等前端框架的时候,特效启动慢、页面切换慢、数据请求慢。

    APPCan

    APPCan 成立于2010年,2011年推出产品并测试,2012年正式推出品牌,2013年商业模式成型,2014年开发者注册约70w。AppCan不是开源平台,同时,企业版和部分插件是收费的。换句话说,AppCan只是一个卖软件的商业公司。我们认为:这会对其市场的占有率有着直接影响,闭源而没有垄断,所以前景不会太好。

    DCloud

    DCloud 大部分产品开源,W3C会员单位,HTML5中国产业联盟的发起公司之一,在HTML5这个行业有一定的江湖地位。旗下四款产品:HBuilder、5+ Runtime、MUI、流应用都是弥补并扩展HTML5特性的产品。该公司的理念就是解决HTML5的性能、工具、能力三方面的问题。

    MUI是一款不错的前端框架,性能比 jQuery Mobile、Bootstrap好很多,主要区别:

    • 设计思路不同,MUI坚持用原生JS做,不依赖jQuery或者Angularjs。
    • MUI调用了5+ Runtime的底层原生加速,比不带原生加速的框架更快。

    缺点

    DCloud毕竟是个新平台,发展才2年,新产品内部存在的Bug还需要很多的测试。在其官方社区中,不少开发者也在呼吁DCloud尽快完善文档和框架。

    API Cloud

    API Cloud 提供原生应用的功能模块(设备访问,界面布局,开放SDK等),开发者可以通过JS调用。前端工程师负责页面布局,UI展现,及简单的交互,原生模块负责性能方面和功能实现,两者结合形成一个完整的应用。同时APICloud提供了云数据库的功能,前端不必了解PHP,Node.js等后端语言,通过JS接口或Restful API实现数据库的增删改查。

    缺点

    APICloud的更新速度很快,版本不太稳定。而且,它是为不懂APP开发的人士准备的,不适合科技公司和程序员。

    混合开发四种方式对比

    cordovaappcanDCloudAPICloud
    目标为原生开发者解决平台差异性问题提供跨平台移动应用快速开发一体化解决方案解决HTML5的工具,性能,能力三个重要问题重新定义移动应用开发。提供云/端两项服务
    功能简单丰富丰富丰富
    支持平台大部分平台ios/andriodios/andriodios/andriod
    开发环境不同平台需要不同环境EClipseHBuildersublime/eclipse/webstorm
    开发语言html5/css3/jshtml5/css3/jshtml5/css3/jshtml5/css3/js
    UI框架第三方第三方mui/第三方自带
    打包方式离线在线在线/离线在线
    优点跨平台、框架多,插件多,发展早,社区资源多做了性能优化,app比较流畅对html5的性能,工具,能力都做了相关的产品即使不懂原生开发,不懂后台语言,也可以完成APP
    缺点在webview性能低下的情况下,使用第三方UI框架,用户体验会变差闭源收费,过多封装,自由度不足新产品,还需改进。需要具备原生开发的经验版本更新过快,不稳定,外包公司过度依赖,会降低技术实力

    跨平台开发

    用一种语言写一套代码,在ios,andriod上都可以运行。

    特点

    使用类似于 Web 技术的方式来开发 Native App。

    优点

    效率体验接近Native App,发布和开发成本低于Native App

    1. 开发成本大于Hybrid模式,小于原生模式,大部分代码可复用

      相比于原生模式,这种模式是统一用JS写代码,所以往往只需要一名成员投入学习,即可完成跨平台app的开发,而且后续代码封装的好,很多功能可复用。

    2. 性能体验高于Hybrid,不逊色与原生

      这种模式和Hybrid不一样,Hybrid中的view层实际上还是dom,但是这种模式的view层是虚拟dom,所以性能要高于Hybrid,距离原生差距不大。

      这种模式可以认为是用JS写原生,即页面用JS写,然后原生通过Bridge技术分析JS,将JS内容单独渲染成原生Android和iOS,所以也就是为什么性能不逊色原生。

    3. 开发人员单一技术栈,一次学习,跨平台开发

      这种模式是统一由JS编写,有着独特的语法,所以只需要学习一次,即可同时开发Android和iOS。

    4. 社区繁荣,遇到问题容易解决

      这应该是React Native的很大一个优势,不像Hybrid模式和原生模式一样各自为营,这种模式是Facebook统一发起的,所以有一个统一的社区,里面有大量资源和活跃的人员,对开发者很友好。

    缺点

    学习有一定成本,且文档较少,免不了踩坑

    1. 虽然可以部分跨平台,但并不是Hybrid中的一次编写,两次运行那种,而是不同平台代码有所区别

      这种模式实际上还是JS来写原生,所以Android和iOS中的原生代码会有所区别,如果需要跨平台,对开发人员有一定要求。

      当然了,如果发展了有一定时间,组件库够丰富了,那么其实影响也就不大了,甚至会比Hybrid更快

    2. 开发人员学习有一定成本

      虽然社区已经比较成熟了,但是一个新的普通前端学习起来还是有一定学习成本的,无法像Hybrid模式一样平滑

    3. 学习成本大,对开发人员技术要求比较高

    4. 不懂原生开发很难驾驭好

    5. 说是使用 Web 技术进行开发,还是多少得学点儿原生 App 开发,才能处理好跨平台。

    6. 前期投入比较大,后劲很足。

    React Native

    • 公司:Facebook
    • 技术栈:React
    • 开源的一套新的App开发方案React Native。使用JSX语言写原生界面,js通过JSBridge调用原生API渲染UI交互通信。
    • React-Native 就是用js的方式 去开发 原生应用, 一套代码生成 安卓,ios应用。

    Weex

    • 公司:Apache 开源基金会

    • Weex 致力于使开发者能基于通用跨平台的 Web开发语言和开发经验,来构建 Android、iOS 和 Web 应用。简单来说,在集成了 WeexSDK 之后,你可以使用 JavaScript 语言和前端开发经验来开发移动应用。

    • Weex的定位则是替代h5使用场景,在保证动态性的情况下,提升性能,开发者大多为前端工程师。

    • 阿里巴巴的weex-ui

    Flutter

    • 公司:Google
    • 它提供了官方的原生 UI 组件
    • 比 RN、Weex 之类的体验更好
    • 开发语言:Dart
    • 商业应用:闲鱼
    • 跨平台原理:高性能渲染引擎来绘制widget。

    多端开发

    taro

    taro是一套遵循 React 语法规范的 多端开发 解决方案。使用 Taro,开发者可以只书写一套代码,再通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信/百度/支付宝/字节跳动/QQ/京东小程序、快应用、H5、React-Native 等)运行的代码。

    uni-app

    uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台。

    开发方式小结

    对比

    Native AppWeb AppHybrid AppReact Native App
    原生功能体验优秀良好接近优秀
    渲染性能非常快接近快
    是否支持设备底层访问支持不支持支持支持
    网络要求支持离线依赖网络支持离线(资源存本地情况)支持离线
    更新复杂度高(几乎总是通过应用商店更新)低(服务器端直接更新)较低(可以进行资源包更新)较低(可以进行资源包更新)
    编程语言Android(Java),iOS(OC/Swift)js+html+css3js+html+css3主要使用JS编写,语法规则JSX
    社区资源丰富(Android,iOS单独学习)丰富(大量前端资源)有局限(不同的Hybrid相互独立)丰富(统一的活跃社区)
    上手难度难(不同平台需要单独学习)简单(写一次,支持不同平台访问)简单(写一次,运行任何平台)简单(学习一次,写任何平台)
    开发周期较短中等
    开发成本昂贵便宜较为便宜中等
    跨平台不跨平台所有H5浏览器Android,iOS,h5浏览器Android,iOS
    APP发布App StoreWeb服务器App StoreApp Store

    选择

    目前有多种开发模式,那么平时开发时如何选择用哪种模式呢?如下

    • 选择纯Native App模式的情况

      • 性能要求极高,体验要求极好,不追求开发效率
      • 正常来说如果要求不是特别高,会有Hybrid
    • 选择Web App模式的情况

      • 不追求用户体验和性能,对离线访问没要求。正常来说,如果追求性能和体验,都不会选用web app
      • 没有额外功能,只有一些信息展示。因为web有限制,很多功能都无法实现,所以有额外功能就只能弃用这种方案了
    • 选择Hybrid App(混合开发)模式的情况:大部分情况下的App都推荐采用这种模式

      这种模式可以用原生来实现要求高的界面,对于一些比较通用型,展示型的页面完全可以用web来实现,达到跨平台效果,提升效率。当然了,一般好一点的Hybrid方案,都会把资源放在本地的,可以减少网络流量消耗

    • 选择React Native App模式的情况

      追求性能,体验,同时追求开发效率,而且有一定的技术资本,舍得前期投入

      React Native这种模式学习成本较高,所以需要前期投入不少时间才能达到较好水平,但是有了一定水准后,开发起来它的优势就体现出来了,性能不逊色原生,而且开发速度也很快

    • 选择其它方案

      小程序:(目前移动 App 中开发难度最低的,体验也是仅次于原生+跨平台NativeApp)

    更多相关内容
  • android开发?究竟如何进行?

    这里是学习过程,正在记录/....

    索引目录

    前言:

    工具介绍:

    首页基础界面框架:

    1.top.xml【微信头部】

    2.bottom.xml【微信尾部】

    3.FramentContentView【四个中间的部分】

    4.最终效果

     存在问题:

    写在最后:


    前言:

            移动开发也称为手机开发,或叫做移动互联网开发,移动应用开发等。是指以手机、PDA、UMPC等便携终端为基础,进行相应的开发工作,由于这些随身设备基本都采用无线上网的方式,因此,业内也称作为无线开发。

            那么我们将对于移动开发技术——Android_Studio【安卓】进行学习记录。本次学习过程会以微信界面为参照进行整体设计模仿。


    工具介绍:

            使用工具为Andro Studio 2021.1.1.22的版本,软件安装与环境搭配此处不做说明。

    【一些实用较为通用的快捷键】

            1、重写接口:Ctrl + Shift + o

            2、删除一行:Ctrl + Y

            3、自动纠错: Ctrl + 回车

            4、切换界面: Ctrl + tab

            5、添加构造函数、set、get等:alt + insert

            在对Android Studio的使用中,我们创建项目选择的是Empty Activity,即空项目。  创建后MainActivity的java文件也是对应主界面代码文件。         

             开发时会有两种视图帮助我们开发,下面的图即为Design模式和code模式,即通过视图和代码两种方式。

    【design】

     【code】


    首页基础界面框架:

            主界面初步我们需要分别建立几个页面,最基础包括头部、尾部、以及中间的fragment部分。我们所做的就是分别做出几个页面后,将它们组合在一起,然后去实现其相关联的功能。

    1.top.xml【微信头部】

            头部结构很简单,它的布局为LinearLayout,同时只有一个TextView,然后改变文字和设置底色,效果就出来了。

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:text="微信"
            android:textColor="@color/black"
            android:textSize="30sp" />
    </LinearLayout>

     

    2.bottom.xml【微信尾部】

            对于尾部,包含四个图表,同时具有相关的功能。从结构上看,整体设置水平的布局,内部嵌入四个垂直布局的layout,每个部分含有图片和textView(文字)。但是每个小的布局需要位置关联。

        <LinearLayout
            android:id="@+id/tab01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical">
    
            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#C3BDBD"
                app:srcCompat="@drawable/tab_weixin_pressed" />
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#C3BDBD"
                android:gravity="center"
                android:text="微信"
                android:textColor="#000000" />
        </LinearLayout>
    
    ......(部分)

    3.FramentContentView【四个中间的部分】

            中间四个部分,即四个按钮对应的界面,在我们点击的时候,会有对应的切换效果。这里暂时只用文字标注。设置对应界面的id为tab01、tab02、tab03、tab04。

            那如何实现点击这一功能的实现?

            在MainActivity.java文件中,首先初始化方面,针对四个页面也有四个用来显示的java文件,那么我们需要在主界面进行new对象引入。

            weixinFragment = new weixinFragment();
            friendFragment = new friendFragment();
            contactFragment = new contactFragment();
            settingFragment = new settingFragment();

            同时对于界面视图,我们通过id进行索引导入。

            tab01 =findViewById(R.id.tab01);
            tab02 =findViewById(R.id.tab02);
            tab03 =findViewById(R.id.tab03);
            tab04 =findViewById(R.id.tab04);

           在界面显示的时候,微信界面要显示,其他需要隐藏。

        private void initalfragement() {
            FragmentTransaction transaction = fm.beginTransaction();//开始做transaction
            transaction.add(R.id.content,weixinFragment);
            transaction.add(R.id.content,friendFragment);
            transaction.add(R.id.content,contactFragment);
            transaction.add(R.id.content,settingFragment);
            Hide(transaction);
            transaction.show(weixinFragment);
            transaction.commit();

            对于动作进行监听。

            tab01.setOnClickListener(this);
            tab02.setOnClickListener(this);
            tab03.setOnClickListener(this);
            tab04.setOnClickListener(this);
        public void onClick(View v) {//点击后操作
            switch (v.getId()){
                case R.id.tab01: show(1); break;
                case R.id.tab02: show(2); break;
                case R.id.tab03: show(3); break;
                case R.id.tab04: show(4); break;
                default: break;
            }
        }

    4.最终效果

     

     


     存在问题:

             在界面切换的时候,实则对于按钮的状态应该会有颜色的变化,但是这一点还未实现,后面会继续完善。


    写在最后:

    通过整体的设计后,我们初步了解了整个UI界面的实现过程,了解相关属性和控件,但是整体条理还不是非常清晰,希望多多指教。

    gitee:https://gitee.com/with-zero/android_-studion_-mobile.git

    With_Zero 2022.3.21

    展开全文
  • 移动开发技术有哪些?

    千次阅读 2019-04-23 13:40:15
    原生开发技术 什么是原生开发? 原生开发指的是纯原生应用程序(简称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/

    展开全文
  • 2016年,你要学习这些移动开发技术

    千次阅读 2016-06-01 15:54:38
    其中的预兆有初级和实习职位的减少,投机性移动创业公司融资困难,人们的注意力被AI、VR、直播等技术所吸引,移动开发光环不再。也许再过几年,它会和其它开发职位一样,不再是转岗的首选、高薪的代名词。 虽然光环...

    2016年,移动开发似乎走过它辉煌的顶点,开始走向平淡。其中的预兆有初级和实习职位的减少,投机性移动创业公司融资困难,人们的注意力被AI、VR、直播等技术所吸引,移动开发光环不再。也许再过几年,它会和其它开发职位一样,不再是转岗的首选、高薪的代名词。

    虽然光环消失会让从业者有些失落,不过对于浮躁的移动开发行业来说,也许这是一件好事,真正优秀的技术和人才会沉淀下来,得到应有的评价。

    在2016年,移动开发已经经过了多年的发展,有些技术可以总结,有些新技术在不断涌现,不学就会落后,还有些前沿和热点技术有待大家探索。这里就为大家总结一下。

    应该得出最佳实践的技术


    最佳实践,就是已经被实践证明为实现某种目的的最佳技术路线。在移动开发领域,有些技术经过多年的碰撞和思考,可以总结为最佳实践,避免让后来人重复踩坑,目前我认为这样的技术有应用架构和动态化、插件化技术。

    应用架构

    移动应用架构在最初几年仅仅是传统的MVC架构当道,直到最近几年,从服务端、PC端甚至前端借鉴过来的MVP、MVVM、Clean、Flux等架构还是涌现,出现了百花齐放的局面。从业务角度来讲,国内一些大公司的应用经过多次的迭代,也基本确定了架构的最佳实践,如微信之前分享的架构演进之路,还有前段时间手淘在QCon北京上分享的对移动开发最佳实践的思考,甚至连Google都发布了一个MVP架构的示例项目,说明移动应用架构发展到现在,总结最佳实践的时机已经成熟。

    动态化/插件化

    动态化也是另一个移动开发的热门话题,人们对于无需下载应用即可更新应用的内容、展现形式甚至是行为逻辑的需求一直存在,并且从未放弃过对这方面的追求。众多开源方案的出现,说明这一技术阶段性的成熟,可以有一些通用方案出现,这也是我们所追求的最佳实践。

    比如在动态化的子领域热修复里面,iOS平台有被广泛使用的Wax、JSPatch,Android平台从去年开始也开源了不少的Hotfix方案,如Dexposed、AndFix、Nuwa等。

    在Android平台上,动态化更演变成为了插件化,通过动态加载二进制代码来更新应用。2015年到现在国内插件化技术爆发,如DroidPlugin、DL、DynamicAPK、Small等开源框架纷纷涌现,网络上也出现了很多分析插件化技术的文章。

    在我们于6月24日北京举行的GMTC全球移动技术大会上,为应用架构和动态化技术准备了丰富的议题,如滴滴、微博、天猫都会来分享他们的客户端架构经验、JSPatch、Small等框架作者都会来讲他们对于动态化的思考。

    不学就落后的技术


    移动开发技术每年仍然在迅速的更新,有些新技术试图取代现有技术,虽然它们看起来暂时还很弱小,但如果你忽视它们,过几年你就发现你落伍了。比如下面这些新技术。

    Swift

    Swift从发布到现在已经两年了,两年间Swift取得了飞速的发展,也获得了众多开发者的喜爱,但在国内仍然使用率不高。

    有些人不用的理由是要兼容iOS 7,Swift运行时会增大包大小,Swift API不稳定,升级麻烦云云,但下下周WWDC上Swift 3.0就会发布,再过几个月,苹果发布新iPhone以及iOS 10正式版,兼容也将不再成为理由。

    预计2016年下半年一些公司的新项目将采用Swift开发,如果你现在学了Swift,你就有可能搭上新班车,或者至少比其他现学的同学领先一步,否则就只能落后于人。

    React Native

    React Native自发布以来一直热度不减,虽然它仍然还有许多坑,但它代表了移动开发的发展方向,即移动和前端的融合。很多公司或个人纷纷出手,为打造增强方案,如ReactWeb、ReactMix等,甚至还有受它影响的类似方案Weex,也让学习React Native的热潮更加高涨。

    不过,有些移动开发者对于React Native有些抵触,认为掌握了原生开发就不用学习React Native了。有的人被公司要求自学React Native开发新项目甚至还不愿意,认为是浪费时间。

    但这只是暂时的,因为React Native并没有足够有分量的成功案例。一旦出现了这样的案例并且在节省开发成本上取得成功,大多数公司一定会去用React Native或类似技术进行开发,并裁减原来的原生开发团队,到时候,你就一定能保证你是留下来的那一个吗?

    因此,现在学习Swift和React Native对于提高自己的竞争力非常有必要,虽然它们暂时不能用在工作中,但人要往前看,不能永远停留在现在。

    在这次GMTC全球移动技术大会中,我们也开设了Swift和React Native的议题,来自ThoughtWorks、猿题库的专家以及RxSwift布道者会向我们分享Swift内容,而React Native入门和实战作者、QQ空间RN项目负责人则会向我们分享React Native的实践。

    前沿及热点技术


    今年以来,VR和直播是非常火的两个领域,人们称为VR元年、直播元年。值得一提的是,VR和直播原来在PC平台已经有实现,但一直不温不火,直到都冠上移动的名字之后才一飞冲天,比如VR里现在最火的是头戴式VR,也就是移动VR,直播里最火的也是映客、17等手机直播平台。

    对于移动开发者,了解这些前沿和热门领域的技术,有助于在适当的时候抓住风口,在这些新兴技术领域大展拳脚。

    VR/AR

    到目前为止,国外几大互联网公司,除了苹果之外,基本都已经布局VR领域。在国内,BAT以及乐视、暴风等等也不甘落后,在VR领域投入巨资。虽然,VR技术现在还处于早期,我们仍然在争论VR带来的眩晕是否真的能消除,但是,它有着成为下一代计算和内容平台的潜力。如果你相信VR的未来,从现在开始学习并不晚。

    直播

    从今年以来直播和网红成为人们津津乐道的关键词,很多应用都在添加直播模块,或者变身为直播应用,直播成为一种潮流。目前移动直播技术渐渐成熟,国内也出现了不少优秀的实践分享,有很多服务商也提供了解决方案。到现在,直播的技术并不成为门槛,也许你并不需要开发直播相关的模块,但了解这项技术会给你的未来带来更多可能性。

    在这次GMTC全球移动技术大会中,我们也设置了VR和直播相关的议题,让开发者能够学习当前最前沿和流行的技术。

    当然,移动开发绝不仅仅只是这些技术,还有性能优化、移动测试、音视频等等,也都非常值得学习。但是,如果要我选择的话,上面这些技术的优先级更高一些,如果你还在犹豫学习哪些技术,上面这些将是很好的选择。

    展开全文
  • 移动应用开发常见技术比较

    千次阅读 2019-08-12 12:57:45
    一、概念介绍 1.APP   App(应用程序,application的缩写)一般指手机软件,主要指安装在智能手机上...使用OC或Swift语言开发,运行在苹果公司的iOS系统上的移动应用程序。2.使用Java或Kotlin语言开发,运行在谷歌...
  • 移动开发技术——近场通信

    千次阅读 2021-12-07 22:00:42
    近场通信(Near Field Communication,简称NFC),是一种新兴的技术,使用了NFC技术的设备(例如移动电话)可以在彼此靠近的情况下进行数据交换,是由非接触式射频识别(RFID)及互连互通技术整合演变而来的,通过在...
  • 移动APP开发技术选择

    万次阅读 2018-03-13 15:21:14
    APP开发种类 目前主流的APP主要为iOS版本和Android版本...由于Native APP开发成本高、难度大,随着技术的发展,出现了Hybrid(混合)APP开发,即支持跨平台或支持原生+H5相结合的APP。除此之外,还有一种称为Web Ap...
  • 本篇文章主要介绍了 Android 的起源以及体系结构,然后是 Android 开发环境的搭建
  • 2020年10种最佳移动开发编程语言

    千次阅读 2020-04-19 17:01:07
    拥有移动设备仅限于社会上所谓的精英和有经济能力的人群的日子已经一去不复返了。但是,在过去的十年中,随着技术的进步,情况发生了巨大的变化。今天,每个人都有一部智能手机。从青少年学生到老年人,无论年龄,...
  • 几种移动开发技术的比较和选型

    千次阅读 2015-12-10 16:14:34
    移动开发很火,移动开发技术很多。都有哪些技术?相互对比如何?怎样选择? 简单列了个表。 其中Native指原生语言,如安卓的java语言,苹果的objective-c或swift;Hybrid指混合开发,在前种语言基础上,借助...
  • Android学习成果之打地鼠小游戏打地鼠小游戏界面下面展示一下我的打地鼠界面 打地鼠小游戏界面 这款打地鼠小游戏是我学习了各种网课、还有老师上课讲的内容、和一...使用的开发工具为:Android studio ...
  • 手机移动开发大作业 -- 仿淘宝app

    千次阅读 2020-07-21 22:47:01
    前言 : 本次大作业因为时间不充裕,所以只做了一部分功能。 PS : 购物车因为没有用数据库存商品,所以有bug。 项目代码: 有空再上传吧... ...
  • 培训内容: 1,Android 动画培训 2,H5混合app开发之路 3,App界面开发和性能优化
  • 移动端前端开发技术概况

    千次阅读 2020-11-07 20:28:58
    目录移动web开发流式布局1.0...物理像素比3.2背景缩放background-size4.0 移动开发选择和技术解决方案4.1移动端主流方案4.2 移动端技术解决方案4.3 移动端大量使用 CSS3盒子模型box-sizing4.4移动端特殊样式5.0移动端常
  • 移动直播技术详解

    千人学习 2016-09-02 13:14:12
    本课程通过直播的方式,对当下非常火爆的 “移动直播”领域的核心技术进行交流,探讨。重点讲解FFMpeg音视频编解码, Linux rtmp流媒体转发服务器, 音视频采集,视频渲染,以及各个环节的优化. 通过本课程的学习交流...
  • 根据一些老博客里面的内容,现在整理一下目前流行的跨平台移动App开发技术的特点,并将几个不同的开发平台框架进行比较说明,仅供大家参考。 每个开发框架几乎都包含以下特性: 使用 HTML5 + CSS + JavaScrip
  • 由CSDN、创新工场联合主办的MDCC 移动开发者大会...大会以移动领域热点技术+典型应用案例实战为主的内容主旨,增设移动直播、VR开发等热点技术实战专场,满足移动开发者的新需求,以促进移动开发领域的分享和交流。
  • 移动应用发展现状 本文首次出现在... 当前的工具为应用程序开发人员提供了使用各种技术(例如Java,Open C,Python,Flash Lite,XHTML / CSS,JavaScript和Mobile Ajax)的选项,以实现功能强大的移动应用程序。 ...
  • 如何为移动开发选择技术栈?

    万次阅读 2019-07-21 18:08:01
    选择合适的技术栈是移动开发领域最关键的决策之一。你选择的技术栈将为你开发的移动应用提供基本的功能、可拓展和维护性。选择技术栈时应该注意项目的类型、预期投入市场的时间和创意的可行性。 原则上来说,选择何...
  • HTML5移动Web开发指南,完整扫描版

    热门讨论 2013-11-21 16:28:11
    第三部分主要介绍目前比较流行的两套 javascript移动开发框架jquery mobile、sencha touch,以及phonegap,并配备丰富的例子作为实践;第四部分主要结合sencha touch框架库和html5技术构建进行讲解,旨在帮助读者将...
  • web移动开发总结(一)

    千次阅读 多人点赞 2018-12-02 21:48:24
    移动web的开发方式和区别 响应式原理和媒体查询(重点) 响应式框架的介绍 bootstrap框架的基本使用 bootstrap全局CSS样式布局容器使用(重点) bootstrap全局CSS样式栅格系统使用(重点) bootstrap全局CSS样式响应式工具...
  • 《Android移动应用开发(第3版)卷Ⅱ:提高篇》涵盖了Android开发从概念、技术到市场推广应用的全部话题,内容包括:高级Android应用程序设计原则,高级Android用户界面设计原则,使用常用Android API,Android中的...
  • 由CSDN、创新工场联合主办的MDCC 移动开发者大会...大会以移动领域热点技术+典型应用案例实战为主的内容主旨,增设移动直播、VR开发等热点技术实战专场,满足移动开发者的新需求,以促进移动开发领域的分享和交流。
  • 移动政务中的小程序技术

    千次阅读 2022-03-24 10:26:15
    一、移动政务发展趋势 移动政务的发展至今历经三个阶段,不同的阶段有其各自特点与阶段性任务,其建设的目的与最终结果产出也各.
  • Android网络开发技术实战详解 pdf

    热门讨论 2013-03-08 20:19:25
    《Android移动开发技术丛书:Android网络开发技术实战详解》的讲述由浅入深,从介绍Android平台的基本组件到带领读者开发大型应用程序,结构清晰、语言简洁。  全书分为18章,分别介绍了Android开发之前所要做的...
  • 由CSDN、创新工场联合主办的MDCC 移动开发者大会...大会以移动领域热点技术+典型应用案例实战为主的内容主旨,增设移动直播、VR开发等热点技术实战专场,满足移动开发者的新需求,以促进移动开发领域的分享和交流。
  • 很难说,因为Java、object-C在原生开发界已大行其道这么多年,C#这么多年固步自封,很难说在移动开发领域能重新有所建树。   目前国内有一个基于VB/C#的APP开发平台,叫Smobiler,它主打的就是.Net移动开发,使用...
  • 使用Objective-C进行iOS移动开发

    千人学习 2019-01-13 12:06:14
    2、创新的教学模式:手把手教您iOS开发技术,一看就懂,一学就会;3、完美贴心的操作提示:让您的眼睛始终处于操作的焦点位置,不用再满屏找光标;4、语言简洁精练:瞄准问题的核心所在,减少对思维的干扰,并节省您...
  • 十大移动开发平台

    千次阅读 2018-12-28 19:46:50
    1. Putdb WebBuilder    WebBuilder是一款开源的可视化移动Web应用开发和运行平台。基于浏览器的集成开发环境,可视化和智能化的...包括智能数据库访问在内的多项先进技术,使应用系统的开发更快捷和简单。  ...
  • HTML5移动开发的10大移动APP开发框架

    万次阅读 2017-12-13 15:52:29
    今天给大家介绍10款有关HTML5移动开发APP开发框架,这几款框架都是比较优秀的移动 Web 开发框架,能够帮助开发者更加高效的开发移动Web应用。. 十款移动APP开发框架: 1.jquery mobile框架 2.bootstrap框架 3.ionic...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 559,227
精华内容 223,690
关键字:

移动开发技术

友情链接: test.gz