精华内容
下载资源
问答
  • 几种移动开发技术的比较和选型

    千次阅读 2015-12-10 16:14:34
    移动开发很火,移动开发技术很多。都有哪些技术?相互对比如何?怎样选择? 简单列了个表。 其中Native指原生语言,如安卓的java语言,苹果的objective-c或swift;Hybrid指混合开发,在前种语言基础上,借助...

    首发:个人博客,更新&纠错&回复

    移动开发很火,移动开发技术很多。都有哪些技术?相互对比如何?怎样选择?

    简单列了个表。

    其中Native指原生语言,如安卓的java语言,苹果的objective-c或swift;Hybrid指混合开发,在前种语言基础上,借助WebView控件,将其中部分功能用前端技术实现;Html5指PhoneGap和HBuilder这种,最终会生成app安装包,但完全用前端技术开发,不需要懂原生语言;Web指为移动浏览器开发的网页,在手机上看外观良好,很可能要使用专门的样式框架如jquery mobile,或者bootstrap这种响应式框架;js-sdk指微信推出的技术,可以为在微信浏览器里展示的网页添加额外的功能。

    技术选型,一看既有人力情况,二看需求。

    既有人力情况:如果目前的程序员擅长后端语言(比如要做安卓应用,你恰好是java程序员),就该采用原生技术;如果程序员擅长前端,则该采用前端技术;如果程序员后端前端都有能力,混合开发也是可以的选择。

    在需求上:如果要做在商城中上架的App,移动版网页和微信应用就不可能选择了;如果不希望每次改版都要求用户重新安装应用,纯原生应用就不要列为选项;如果时间紧迫人力有限,希望开发一套代码在所有平台都使用,则或者完全放弃原生技术,或者采用混合方案(嵌入WebView里的网页是同一份,只需要为两种平台各做一个壳子);如果看中应用的性能,采用原生技术能达到的性能上限当然高于非原生技术,但要结合程序员水平思考能不能达到上限;如果需要使用相机音频这些功能,纯在浏览器打开的移动版网页就不能胜任了,原生和混合当然能满足这个要求,Html5应用和微信应用则提供了数量有限但是跨平台了的接口,根据到底需要调用哪些本地功能来考虑;如果不同应用间需要交互,网页当然就是为这个而生的,微信应用本质也是网页也没问题,原生应用理论上在本机内部也能互通,但还是在互联网上来互通更合适,因为网页的跳转比下载安装程序方便太多了。

    打开网页忌讳流量太大,等待时间太长,注意别用太大的库,而且做好缓存,如果是混合开发或者Html5应用,把资源打到安装包里会不错,这样往来的流量就只有数据了,如果是移动版网页或者微信应用,库的选择和缓存策略将是重中之重。

    采用前端技术的优点是开发简单,表现力强大,而且跨平台,缺点一是用来解决性能敏感的需求不稳健,二是javascript作为弱类型的脚本语言,在工程上和团队协作上,相比强类型语言更容易失控,这就考验团队的经验和素质,如果功能实在简单,迭代周期不长,这倒算不上什么缺点,毕竟在没有ie6的世界里javascript用得认真点还是比较靠谱的。

    由于html5支持本地存储和websocket,即使是移动版网页也有一定的c/s能力了。但如果使用原生技术,c/s编程元素的承载者应该是原生语言,即使同时使用移动技术,移动技术也该纯粹地用来表现和交互,这时候不该贪图移动技术的程序能力,就像java编程时不该贪图jsp拥有的写程序代码的能力一样。如果纯使用前端技术,那javascript就是程序实现的主力了,这时候就是前端转全栈的程序员最喜闻乐见的情景:后端的nodejs只提供rest接口,前面工程化的前端代码大发神威,这时AMD/CMD的模块组织就很关键了。这时库的选择就很重要,一是要足够强大,二是要体积够小,三是要模块化,最理想的还是前端程序员量体裁衣亲手写一套专门为这个项目定制的,如果觉得划不来那就用点心找第三方库吧。

    原生开发中的库选择也很重要,好在无论Android还是iOS基础库都很强大好用了,本机自带基础库就是好,让应用既强大又小巧,windows上的.net运行式也算是半套基础库了,微信也算半个,既然事实上每台手机上都有安装微信,跟本机自带的也没什么区别了,所以微信本身它就是一个壳子,比起在手机浏览器里的移动版网页,微信应用先天多个壳子,比起HBuilder这种Html5解决方案,微信应用先天减少了下载壳子需要的流量。用c#写个桌面程序,可以逼迫用户下载.net运行时,你用python写一个桌面程序,则只好打成一个硕大的包来发布,HBuilder就像是Python,而微信就像是.net。

    说来说去,还是没有银弹,移动开发技术之所以百花绚烂,就是因为每种技术都有明显的长处和短板,谁都无法取代谁,作为程序员,还是该多学点,这样可以采用最贴切需求的技术,但作为选型者,则不能逼迫小伙伴们全成为全能战士,根据团队情况和需求来综合考量吧,决策不就是个权衡和舍弃的过程吗,重要的,一是知己,二是知彼,这样,大概不会太糟。

    长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博: @冷镜,QQ: 908789432
    展开全文
  • 移动开发技术有哪些?

    千次阅读 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-07-21 18:08:01
    选择合适的技术栈是移动开发领域最关键的决策之一。你选择的技术栈将为你开发的移动应用提供基本的功能、可拓展和维护性。选择技术栈时应该注意项目的类型、预期投入市场的时间和创意的可行性。 原则上来说,选择何...

    感谢内容提供者:金牛区吴迪软件开发工作室

    今天就来聊一聊
    如何选择移动应用开发的技术栈
    在这里插入图片描述
    选择合适的技术栈是移动开发领域最关键的决策之一。你选择的技术栈将为你开发的移动应用提供基本的功能、可拓展和维护性。选择技术栈时应该注意项目的类型、预期投入市场的时间和创意的可行性。

    原则上来说,选择何种技术栈取决于产品的设计目标。例如,跨平台方法对于初创公司是一个很好的解决方案,而原生开发适合构建具有出色性能的复杂移动应用。

    对于缺乏技术背景的客户来说,想要全面了解新产品开发流程的所有功能和特性可能会很困难。如果我们并不清楚该使用哪种技术栈,这时候还要构建产品的详细规范就会是件麻烦事。

    具体来说,我们应该为应用开发选择哪种技术栈?或者为什么某些编程语言(以及工具包)比另一种更好?

    为了解答这些疑惑,本文将介绍多种用来组织和构建移动应用的方法。我们将讨论原生、混合、跨平台开发以及PWA方法,探讨它们技术特性和优缺点。

    还可参阅 “怎样为web应用开发选择技术栈”:

    https://2muchcoffee.com/blog/how-to-choose-a-technology-stack-for-web-app-development/
    在这里插入图片描述

    原生开发:

    如今最常见的开发方法就是原生应用开发。需要注意的是Android 和 IOS 的原生开发技术各有不同。原生应用开发提供完整的设备集成、出色的用户体验以及较高的安全等级。基于原生方法开发的应用响应迅速、性能出色。考虑到分别为Android 和 IOS 开发各自独立的原生应用可能带来高昂的成本和漫长的开发周期,你可能需要聘请更多具有相应技能的开发人员,这也是开发流程成本投入的一部分。


    Android技术栈:

    Android技术栈可以使用 Java 或 Kotlin 编程语言,最佳的开发环境则是 Android Studio。

    编程语言:

    • Java:谈到 Android 技术栈时,人们首先想到的就是Java。它是一种基于类的面向对象编程语言,拥有大量库和工具可以简化开发工作。Java拥有一系列核心功能,支持自动内存管理,可移植且可拓展,可用来构建高质量的移动应用。此外Java还拥有庞大的开源生态系统。虽然有人批评这种语言速度缓慢并占用大量内存,但Java的可拓展性和稳健性使其成为开发复杂移动应用时的首选。
    • Kotlin:这是一种非常新的语言,可以让开发流程更简洁。Kotlin是开源语言,具有许多拓展功能和优势,诸如懒加载、减少代码bug和错误的助手等,他还提供了完整的Java兼容性。

    工具包:

    • Android Studio: 这种开发环境提供了代码编辑和性能监测工具,可以打造灵活的构建系统。开发者可以使用它来创建创意独特、品质出色的应用。

    IOS技术栈:

    iOS 的原生应用开发使用 Objective C 或 Swift 编程语言,以及 Apple Xcode 开发工具包。

    编程语言:

    • Objective C:使用这种简洁的编程语言就可以利用苹果的众多技术了。开发者可以轻松使用它的私有 API 和富有表现力的消息语法,实现动态运行时环境和面向对象的功能。
    • Swift:它是一种更具功能性的编程语言。它支持文本字符串和数据的内联操作,错误率更低。此外,Swift 具有直接上传到内存的动态库,使应用更加瘦身,同时提升了应用性能。

    工具包:

    • Apple Xcode:这个功能齐全的开发环境可以用来创建移动应用和桌面应用。Xcode 拥有用于构建用户界面的图形编辑器、可以修复任何错误的工具、集成文档以及对 Git 存储库的集成支持。

    原生开发的优势:
    1. 出色的用户体验
    2. 完整的设备集成
    3. 高速接口
    4. 相应迅速
    5. 非常安全
    原生开发的劣势:
    1. 只支持一个平台
    2. 开发成本高昂
    3. 需要雇佣更多开发人员
    4. 漫长的开发周期
      在这里插入图片描述


    混合开发:

    混合移动应用开发使用标准的Web技术和工具,诸如HTML 、 CSS 、JavaScript等。包装在原生壳中的代码库被视为一个常规应用来运行。混合方法使用原生浏览器呈现引擎,基于 WebView 控件以全屏格式呈现 HTML 和 JavaScript 文件。换句话说,它是包装在原生移动容器内的网页。这些应用的功能与网站类似,准确来说是介于应用和浏览器呈现的页面之间。显然,混合应用的宗旨是单个应用就可用于 Android、iPhone 和 Windows 等多种平台。

    混合开发易于构建和维护。此外它可以节省你的成本投入,因为你只需为所有平台构建一个应用就够了。反过来说,它的缺点在于缺乏原生特性,交互也比较缓慢。

    编程语言:HTML5、CSS3、JavaScript

    混合应用开发兼顾了 Web 开发的快节奏与原生应用开发的用户体验,前者源于其使用的一系列标准 Web 技术,实现后者则需要使用下面这些框架。

    框架:

    Ionic 和 Apache Cordova:Ionic 是一个基于 Angular 的框架,可以创建强大的多功能应用。它可以提供基础的原生功能,并使应用在不同的操作系统和设备上运行。Ionic 为开发流程提供了丰富和稳健的支持,并加快了整个流程,使开发者无须从头开始编写代码。Apache Cordova 是 Ionic 的良好补充,它是一个基于 Web 的框架,帮助开发者使用 HTML 构建移动应用。在它们的帮助下,开发者可以使用各种 Web 技术来创建 iOS、Android 和 Windows 的原生应用。

    混合应用开发的优势:
    • 支持所有平台
    • 开发成本低廉
    • 无需雇佣额外的开发人员
    • 缩短开发周期
    • 较好的用户体验
    • 易于构建和维护
    混合应用开发的劣势:
    1. 安全性略低
    2. 较慢的页面
    3. 缺乏原生功能
    4. 难以访问设备硬件和操作系统的专属功能
      在这里插入图片描述


    跨平台开发

    跨平台移动应用开发与混合开发的区别在于,前者不使用 WebView 控件来呈现 HTML 和 JavaScript 文件。跨平台开发会创建在多个平台(包括 Android 和 iOS)上共享的代码库,从而节约大量时间和金钱。

    用于开发跨平台应用的技术包括:

    React Native框架和JavaScript/TypeScript编程语言

    React Native 是一个 JavaScript 框架,用来在 iOS 和 Android 上编写体验非常接近原生的移动应用。React Native 使用与常规 iOS 和 Android 应用相同的基础 UI 构建块。React Native 引入了一种新颖、激进且功能强大的方法来构建用户界面。使用 React Native 时你的应用 UI 完全是原生的。这类应用的典型例子就是 Instagram 和 Skype。你还可以使用 TypeScript 语言来构建跨平台应用。Typescript 提供了最新的 JavaScript 功能,用它编写 React 组件时可以更容易发现常见的错误。

    NativeScript框架和JavaScript/TypeScript编程语言

    你可以使用 NativeScript 在 iOS 和 Android 上开发完全原生的应用。它基于 JavaScript 语言,还支持 Angular 和 Vue JavaScript 框架。

    跨平台应用开发的优势
    1. 低廉的开发成本
    2. 无需雇佣额外的开发人员
    3. 代码可复用
    4. 支持所有平台
    5. 易于启动和更新开发工作
    6. 平台覆盖
    跨平台应用开发的劣势
    1. 相当差的用户体验
    2. 安全性略低
    3. 开发周期较长
    4. 集成问题
    5. 只支持有限的设备功能
    6. 性能损失
    7. 缺乏灵活性

    在这里插入图片描述



    移动平台的Web应用开发

    谈到移动应用开发就一定会提到渐进 Web 应用(Progressive Web App,PWA)开发。它提供的功能与节约时间的优势赢得了越来越多开发者的认同。本质上来说,当网站演变为移动应用时,响应式网页设计(在移动触摸屏上浏览网页)也就演变为 PWA 了。换句话说,PWA 就是具有移动应用功能的网页。PWA 支持离线工作,可以推送通知。总之,PWA 是一种获得卓越移动应用体验的新方式,这种体验可靠、经过优化并可完全在 Web 端访问。

    通过 PWA,你可以使用现代 Web 技术来提供快速、引人入胜且可靠的移动 Web 体验,非常适合个人和企业用户。

    对于 PWA 开发,建议使用:

    Angular/lonic框架和HTML、CSS、JavaScript编程语言

    Angular 是一种轻松开发原生和渐进式 Web 应用的好方法。它使用对用户友好的功能和优秀的 UI 元素构建应用。Angular 可以在缓慢或不可靠的网络连接上保障应用的终端用户体验,同时最大限度地减少不得不提供过期内容的风险。

    移动平台的Web应用开发优势
    1. 低廉的开发成本
    2. 高度安全
    3. 缩短开发周期
    4. 无需雇佣额外的开发人员
    5. 较好的用户体验
    6. 出色的性能
    7. 支持所有平台
    8. 相应迅速
    移动平台的Web应用开发劣势
    1. 离线支持局限较大
    2. 耗电较快
    3. 并非所有设备都支持完整的PWA功能

    在这里插入图片描述



    总结:

    为移动应用开发选择合适的技术是迈向成功或失败的关键一步。本文重点介绍移动应用开发的不同方法,并讨论了原生、混合、跨平台开发以及 PWA 方法。

    原生开发 能提供出色的用户体验,但可能非常昂贵且耗时。具体的原生开发技术栈则取决于移动设备的操作系统。

    混合移动应用 支持所有平台。这种方法结合了标准的 Web 技术和工具,如 HTML、CSS 和 JavaScript 等;而代码库包装在原生壳中,作为常规应用运行。

    跨平台开发 使用可在所有平台上共享的可复用代码。这种方法可以节省大量的时间和金钱,同时构建外观和体验接近原生的应用。

    渐进 Web 应用开发 是开发具有移动应用功能的网页。其功能特性和节约时间的优势赢得了众多开发者的支持。

    请记住,构建移动应用没有最佳方案可言。一个原则就是,根据产品的设计目标来选择技术栈。

    展开全文
  • 培训内容: 1,Android 动画培训 2,H5混合app开发之路 3,App界面开发和性能优化
  • 随着智能手机平台的兴起,移动平台应用开发变成现在热门的话题,而在应用开发中,游戏的开发占有举足轻重的位置,而移动平台的开发技术,尤其是游戏的开发技术在近几年的变化非常大,从最早门槛低的J2me技术开始,到...
  • HTML 5移动开发从入门到精通

    万人学习 2015-01-14 20:16:03
    本课程讲述了HTML 5移动开发的各种技术,通过本课程的学习,用户可以掌握HTML 5移动开发的技巧
  • Flutter基础(一)移动开发跨平台技术的百家争鸣

    千次阅读 多人点赞 2019-04-23 12:04:35
    本来这一篇应该介绍如何搭建Flutter开发环境的,但我想在了解Flutter前,不妨了解一下跨平台技术的演进,这样更有助于学习Flutter,也能认清Flutter的优势和本质。这篇文章还有一个目的,就是希望大家是玩技术的人,...
  • 摘要由于H5的逐步普及,混合移动应用开发变的炙手可热,其主要的开发语言就是JavaScript,这在很多人看来无论是在性能和安全上来讲,并不被大家所看好,所今天就来谈一下如何对混合应用做优化以及加密,希望对大家...
  • 移动应用开发常见技术比较

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

    千次阅读 2018-03-13 15:21:14
    APP开发种类 目前主流的APP主要为iOS版本和Android版本...由于Native APP开发成本高、难度大,随着技术的发展,出现了Hybrid(混合)APP开发,即支持跨平台或支持原生+H5相结合的APP。除此之外,还有一种称为Web Ap...
  • 最近在学习APICloud这个移动应用开发平台,真心感觉很强大。对快速开发出跨平台的移动应用很有助益,大家感兴趣的可以了解一下。 APICloud 移动应用开发平台提供中国领先的“云端一体”的移动应用云服务,能够大幅...
  • 在本次课程中,王浩老师和邵伟老师将分别带来中国电信5G+VR的广阔应用前景和移动VR开发技术讲解的详细内容。王浩老师将重点围绕内容生态建设、产业链开放合作、应用场景发掘拓展等方面,阐述电信5G带来的全新赋能...
  • 一 摘要今天给大家介绍有关HTML5移动开发APP开发框架,这里主要给大家介绍10款移动APP开发框架,下一篇文章将给大家具体演示一下如何用这些框架来搭建一个移动APP应用. 十款移动APP开发框架:1.jquery mobile框架2....
  • 该课程以新生的HarmongOS操作系统为基础,讲解学习基于HarmongOS的移动应用开发技术,全面学习鸿蒙移动应用开发技术,开启鸿蒙开发新航程,支持国产操作系统发展,推广鸿蒙操作系统,促进HarmonyOS技术生态发展。
  • 前端最常用的移动App开发方式及技术栈详解 混合App相关技术 共同点: 把网页打包成移动 App,使 Web 程序可以访问手机原生能力。 Cordova Cordova 是Apache软件基金会的一个产品。其前身是PhoneGap,由Nitobi开发...
  • 今天给大家介绍10款有关HTML5移动开发APP开发框架,这几款框架都是比较优秀的移动 Web 开发框架,能够帮助开发者更加高效的开发移动Web应用。.  十款移动APP开发框架: 1.jquery mobile框架 2.bootstrap框架 3....
  • 移动APP开发

    2018-04-20 14:10:43
    jQuery Mobile —— 一款很方便就可以把 Web App ...开发成本低,周期短, Web 开发者可以使用现成的工具及开发技术。 2.跨平台,用户只需要一个标准的移动浏览器。 3.维护方便,维护不干扰用户使用,可实时修复 Bug。
  • HTML5移动开发的10大移动APP开发框架

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

    千次阅读 2014-04-16 10:23:44
    移动开发[1]也称为手机开发,或叫做移动互联网开发[2]。是指以手机、PDA、UMPC等便携终端为基础,进行相应的开发工作,由于这些随身设备基本都采用无线上网的方式,因此,业内也称作为无线开发。 移动应用开发是为...
  • 移动直播技术详解

    千人学习 2016-09-02 13:14:12
    本课程通过直播的方式,对当下非常火爆的 “移动直播”领域的核心技术进行交流,探讨。重点讲解FFMpeg音视频编解码, Linux rtmp流媒体转发服务器, 音视频采集,视频渲染,以及各个环节的优化. 通过本课程的学习交流...
  • 移动跨平台开发一步到位

    万人学习 2015-04-15 15:24:28
    基于.NET的移动跨平台开发教程,现在!.NET 不一样了,让你一统三国! 通过Xamarin开发套件,你将可以用 Visual Studio 及 C# 开发各...让使用 .NET 技术开发企业应用者,用既有的投资及熟悉的技术进入 App 开发世界。
  • 2007年8月25日参加了深圳.NET俱乐部2007年8月活动-"移动畅想",讲了一节“移动开发技术:Visual Studio 2008 和 Windows Mobile 6”的课。课程的主题围绕着 Windows Mobile 开发的新技术,介绍了 Visual Studio ...
  • Android网络开发技术实战详解 pdf

    热门讨论 2013-03-08 20:19:25
    《Android移动开发技术丛书:Android网络开发技术实战详解》的讲述由浅入深,从介绍Android平台的基本组件到带领读者开发大型应用程序,结构清晰、语言简洁。  全书分为18章,分别介绍了Android开发之前所要做的...
  • 由CSDN、创新工场联合主办的MDCC 移动开发者大会...大会以移动领域热点技术+典型应用案例实战为主的内容主旨,增设移动直播、VR开发等热点技术实战专场,满足移动开发者的新需求,以促进移动开发领域的分享和交流。
  • 平安科技移动开发二队技术周报(第十三期) @author ASCE1885的 Github 简书 微博 CSDN 业界新闻1)Android曝严重安全漏洞 95%设备受影响网络安全公司Zimperium研究人员日前表示,他们在Android设备中发现了一处...
  • 移动APP开发的三种技术对比

    千次阅读 2019-08-23 16:00:20
    目前来说主流的App开发方式有三种:Native App 、Web App、Hybird App。下面我们来分析一下这三种App开发方式的优劣对比: 一 :Native App 即 原生App开发 优点: (1)打造完美的用户体验 (2)性能稳定 (3)操作...
  • 很难说,因为Java、object-C在原生开发界已大行其道这么多年,C#这么多年固步自封,很难说在移动开发领域能重新有所建树。   目前国内有一个基于VB/C#的APP开发平台,叫Smobiler,它主打的就是.Net移动开发,使用...
  • 平安科技移动开发二队技术周报(第十四期) @author ASCE1885的 Github 简书 微博 CSDN 业界新闻1)Android Studio 1.3 正式发布Android Studio 1.3 正式进入稳定版,求稳的同学该升级了。作为今年改进最大的一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 472,255
精华内容 188,902
关键字:

移动开发技术