乐趣区

关于sap:SAP-移动开发技术综述

作为寰球最卓越的企业管理软件提供商之一,SAP 的解决方案涵盖了从 PC 端到挪动设施等多个平台。笔者在 SAP 成都研究院工作了 15 年,对企业管理软件畛域内的挪动开发也有所涉猎。本文将我过来工作中对于挪动开发中积攒的一些教训和大家交换,请社区内挪动开发的专家们不吝赐教。

本文通过以下三局部,分享笔者在 SAP 经验过的挪动利用开发的我的项目教训:

(1) 基于 Java 的 Android 原生挪动利用开发
(2) 基于 UI5 + Cordova 的混合挪动利用开发
(3) 基于 SAP BTP 平台 Mobile Service 的挪动利用开发

挪动操作系统里的最夺目的两颗明星,iOS 和 Android,于 2007 年先后诞生。SAP 随后也推出了一系列基于 iOS 和 Android 平台的原生挪动利用。以 2011 年笔者所在的 CRM 开发团队,负责开发的名为 SAP Customer Briefing 的一款 Android 原生利用为例,该利用能帮忙使用者,高效疾速地浏览利用连贯远端的 CRM 零碎里存储的客户主数据,显示每个客户的 Company Profile, 历史业务数据,Key People,销售机会,社交媒体相干信息等维度的数据。

CRM 零碎里的客户主数据信息,通过 OData 裸露给 Android 原生利用生产。OData 是一种形容如何创立和拜访 Restful 服务的 OASIS 规范,咱们采取 ABAP 这门编程语言来实现供 Customer Briefing 利用生产的 OData 服务,具体源代码位于 CRM 零碎名为 CRM_ODATA 开发包内。

对于这种典型的 iOS/Android 挪动原生利用连贯远端 CRM 零碎的利用场景,因为 CRM 零碎部署在企业内网受防火墙爱护,挪动原生利用无奈通过 HTTP 间接生产防火墙前面的 OData 服务。

为了解决内外网穿梭问题,咱们采纳了 SUP 和 SAP Netweaver Gateway 的组合计划,将位于公网的原生挪动利用的 OData 申请,转发到内网防火墙后的 ABAP On-Premises 零碎进行业务解决。

SUP 即 Sybase Unwired Platform 的缩写,是一个挪动企业应用程序平台 (Mobile Enterprise Application Platform, 简称 MEAP)。SUP 是一种用于治理挪动应用程序的中间件,次要用于在 挪动设施和 SAP 零碎之间存储和传递数据。

基于 UI5 + Cordova 的混合挪动利用开发

采纳挪动原生利用开发方式公布的挪动利用,企业须要为同一个业务场景别离保护 iOS 和 Android 两套不同的代码线。随着 SAP 自研的前端开发框架 UI5 的诞生,以及 Cordova 开源我的项目的一直成熟,咱们在 2014 年起开始 SAP CRM Fiori 挪动利用开发时,抉择了 UI5 + Cordova 的技术解决方案。

SAP UI5 是 SAP UI Development Toolkit for HTML5 的简称,是 SAP 为了疾速开发具备 Fiori 设计语言格调的 UI,构建企业级 Web 利用而推出的一款前端开发框架,蕴含丰盛的界面控件、CSS 页面展现模板、数百个工业图标,以及反对控件的扩大性能。

Cordova 是一个开源的挪动开发框架,通过 Cordova,开发人员能够用 HTML5 和 JavaScript 等通用的 Web 开发技术,实现跨平台的挪动利用开发,即达到相似 Java 的 “ 一次编译,到处执行 ” 的成果。

SAP CRM Fiori 挪动利用采取 UI5 + Cordova 组合计划后,作为利用开发人员,咱们应用 UI5 实现了 Web 利用的开发,而后再应用 Cordova 提供的 build 工具,将开发好的前端利用,打包成可能装置到 iOS 和 Android 平台下来的混合挪动利用 (Hybrid Mobile Application)。所谓混合挪动利用,是为了同应用原生开发伎俩失去的 native 利用相辨别。对混合挪动利用的最终用户来说,其用户体验同原生挪动利用简直没有太大差异。

下图是 Cordova 官网上的架构图。图中上半局部橘色的 Cordova Application,即前端 Web 利用应用 Cordova 工具打包后的生成的混合利用。运行时,这个混合利用里的前端资源文件被加载,渲染并且运行在一个嵌入的 HTML Rendering Engine,即 WebView 控件外部。这个嵌入的 WebView 通过 Cordova 框架提供的插件 (Plugins),可能拜访挪动操作系统的 Native API,比方相机,陀螺仪,本地存储等零碎调用。

另一方面,Cordova 也具备极佳的可扩展性。如果混合挪动利用里须要应用的某些挪动操作系统提供的 API,并不被 Cordova 现有插件反对,此时还能够间接在 iOS 或者 Android 等挪动开发平台上,自行开发自定义 Cordova 插件 (即下图蓝色的 Custom Plugins),在该插件里应用 iOS 的 Object C & Swift,Android 零碎的 Java & kotlin 等编程语言,调用挪动操作系统的 API,而后通过 JavaScript 接口,将这些 Custom Plugin 裸露给前端利用生产。

对混合挪动利用的终端一旦用 UI5 完结 Web 利用的开发之后,将其打包成特定挪动平台上能够装置并运行的混合挪动利用,采取简略的命令行即可实现。

如下图所示,这是我用 UI5 实现的一个服务订单列表的利用。上面我将展现如何应用 Cordova 的构建工具,生成一个能够在 Android 平台装置的 APK 文件。

首选应用命令行装置 Cordova:

npm -g install cordova:

而后新建一个文件夹,进入该文件夹外部,应用命令行创立一个新的 Cordova 我的项目:

cordova create JerryUI5HelloWorld

cordova 命令行为咱们主动创立了如下的资源文件。此时 platforms 文件夹还是空的,因为咱们尚未增加该 Cordova 我的项目反对的指标挪动平台。

应用命令行增加对 Android 平台的反对:

cordova platform add android

之后 platforms 文件夹内就会多出一个 android 文件夹,外面蕴含的资源文件都是生成 Android APK 安装文件所必须的。

将实现开发的 UI5 利用拷贝到 Cordova 我的项目根目录下的 www 文件里,而后执行命令行 cordova prepare,根目录下 www 文件内的资源主动被拷贝到 platforms/android 文件夹内。

最初应用命令行 cordova compile 进行打包,生成的针对 Android 平台的混合挪动利用的 APK 文件,就呈现在文件夹 platforms/android/build/output/apk 里了。

把这个 APK 文件拷贝到我的 Android 手机上进行装置后运行,成果如下:

Cordova 有着极佳的可扩展性,即 Cordova 的官网架构图里提到的 Custom Plugin,自开发插件,如下图红色高亮区域所示。

假如咱们须要开发的混合挪动利用,须要应用到 Android 零碎一些硬件设施比方陀螺仪。传统的 Web 利用里是无奈通过 JavaScript 代码间接调用挪动操作系统提供的原生 API,因而须要开发 Custom Plugin,作为沟通 Cordova 混合挪动利用中的 JavaScript 代码和 挪动操作系统中原生 API 的桥梁。

咱们看一个具体的例子。以 Android 平台为例,用 Java 实现两个整数相加,来模仿平台上的原生 API。咱们在 Android 平台以 Custom Plugin 的模式用 Java 实现一个加法器,而后用 Web 利用的 JavaScript 代码生产这个 Custom Plugin.

首先应用 npm 装置 Cordova 插件管理器。

命令行:npm -g install plugman

胜利装置插件管理器后,用它创立一个 Custom Plugin:

命令行:plugman create -name Adder -plugin_id jerry.adder -plugin_version 1.0.0

这个命令会主动创立一个名叫 Adder 的插件,插件 id 为 jerry.adder, 版本号为 1.0.0。

plugman 会主动生成一个名为 Adder 的文件夹,该 Custom Plugin 的实现源代码就写在 Adder 文件夹内:

进入 Adder 文件夹,为该插件增加对 Android 平台的反对:plugman platform add –platform_name android

该命令会主动生成子文件夹 src/android 和插件实现文件 Adder.java。当初能够入手编写 Java 代码了。

用 Java 实现两个整数的加法运算,操作数通过 Web 利用的 JavaScript 代码通过参数 args 传入,计算结果通过回调上下文 CallbackContext 返回给调用端。

实现 Custom Plugin 开发之后,为其创立一个 package.json 文件:

plugman createpackagejson ./

主动生成一个 package.json 文件。

最初应用命令即将开发好的 Custom Plugin,装置到混合挪动利用中。

cordova plugin add Adder。

一切正常的话,能看到 BUILD SUCCESSFUL 的提醒,意味着该插件能够被 Web 利用的 JavaScript 代码生产了。

在挪动混合利用文件夹 /platforms/android/assets/www/js 的 index.js 文件里,应用上面的 JavaScript 代码生产 Custom Plugin:

JavaScript 调用代码里传入的 action 名称 performAdd, 必须和 Custom Plugin 实现 Java 代码里接管的 action 名称保持一致。Custom Plugin 的执行后果,通过上图代码里的 success 回调函数,返回给 JavaScript 调用端。

上图代码我在 JavaScript 代码里传入了 10 和 20 作为加数,传递给 Custom Plugin,在手机上运行这个混合挪动利用,失去了加法器的计算结果 30.

Cordova 混合挪动技术的呈现,使得企业无需专门组建具备 iOS 和 Android 原生挪动利用开发技能的团队,只需保护一套 Web 利用的代码库,就能交付跨平台且用户体验不逊色于原生挪动利用的混合挪动利用,升高了利用的开发和保护老本。

SAP CRM 和 SAP Cloud for Customer 的挪动利用,均是采取本文所述的 UI5 + Cordova 的技术计划开发而成。

基于 SAP BTP 平台 Mobile Service 的挪动利用开发

随着云时代的到来,SAP 也推出了本人的云原生利用开发平台:SAP 业务技术平台 (SAP Business Technology Platform,下文简称 SAP BTP).

SAP BTP 将智能企业应用程序与数据库和数据管理、剖析、集成和扩大性能整合到一个平台中,实用于云环境和混合环境,包含数百个用于 SAP 和第三方应用程序的预构建集成。

SAP BTP Service Marketplace 里提供了各种类别开箱即用的服务,其中之一就是 Mobile Service,其底层基于 NativeScript,一个应用 JavaScript 构建原生挪动利用的开源框架:

本文刚刚介绍过的基于 Cordova 开发而成的混合挪动利用,其本质是一个运行在挪动平台 Webview 控件里的 Web 利用,这也是其名称中 ” 混合 (Hybrid)” 的由来。

业界另一个风行的框架 React Native,构建出的是一个真正的原生挪动利用,其应用的根底 UI 组件与用 Object C 或 Java 编写的原生挪动利用相比并无差别,只不过 React Native 利用里的 UI 组件,是由 Web 开发人员通过 JavaScript 语言和 React 进行操纵,最初被编译器转换成原生组件罢了。

SAP BTP Mobile Service 基于的 NativeScript 框架的工作原理,和 React-Native 又有所不同。React Native 通过 Bridge 概念实现了 JavaScript 和挪动操作系统原生 API 的双向交互,而 NativeScript 编写的 JavaScript 代码,在一个称之为 NativeScript Runtime 的环境中执行,后者负责 JavaScript 代码同挪动平台原生 API 交互。NativeScript Runtime 实质是一个 JavaScript 虚拟机,在 Android 平台上采纳 Google V8 引擎实现,在 iOS 上基于 WebKit JavaScriptCore 实现。

咱们登录 SAP BTP 控制台,在 Service Marketplace 里找到 Mobile Services,点击 Support 进入服务控制台:

新建一个利用:

保护利用的 ID 和 Name 字段:

给该挪动利用调配 Features:

这些 Features 能够了解成 SAP 对企业级挪动利用所需满足的最基本功能汇合所形象出的一些最佳实际。依据我的项目理论须要调配 Features 之后,咱们用 WebIDE 生成的挪动利用工程项目,将主动蕴含对应的模板实现。

其中一个名叫 Mobile Sample OData ESPM 的 Feature,表演的是相似 UI5 开发中 Mock Server 的角色,能够让挪动利用在开发过程中,不须要连贯远端的 OData 服务实现。ESPM 即 Enterprise Sales Procurement Model 的缩写, 蕴含 SalesOrder,Customers,Products 等一系列业务数据的汇合。

给挪动利用调配好须要的 Features 之后,关上 SAP WebIDE,启用 Mobile Service Development Tools 这个扩大:

胜利启用后,在 SAP WebIDE 左侧会多出一个 MDK Development 的标签:

创立一个新的 MDK 我的项目:

在 Application ID 下拉菜单里,抉择方才在 Mobile Service 控制台里创立并调配了 Features 的利用 ID com.sap.jerry.demo:

Mobile Service Development Tools 扩大主动生成的我的项目如下图所示,其中文件 Application.app 所起的作用,相似 Android 原生开发我的项目中的 manifest.xml 配置文件:

如何将这个 WebIDE 里的挪动利用工程,部署到 Android 设施上呢?右键菜单里抉择 MDK Deploy and Activate:


WebIDE 控制面板里打印出部署胜利的音讯:

通过 WebIDE 部署胜利后,会生成一个二维码。此时 Android 挪动设施上若已装置 SAP Mobile Services Client,扫描该二维码,会主动在 Android 设施上刚刚部署好的利用。

SAP WebIDE 里创立的 MDK 我的项目,生成的理论是 JSON 格局的元数据。应用 Android 挪动设施上的 SAP Mobile Services Client 连贯 SAP BTP Mobile Service 后,前者会从 Mobile Services 接管这些元数据,绘制出 Android 原生利用的 UI,实现初始化动作。

笔者应用的 Android 手机,装置 SAP Mobile Services Client 后,扫描二维码,弹出登录提醒窗口。输出 SAP BTP 的用户名和明码登录:

之后点击 Get Started 按钮:

SAP Mobile Services Client 会连贯 SAP BTP Mobile Service,下载 WebIDE 里生成的 JSON 格局的利用元数据并实现利用初始化操作。

最初,胜利在 Android 手机上显示出之前在 WebIDE 里调配 Features 时选中的 Mobile Sample OData ESPM 里蕴含的本地测试数据,成果如下:



总结

本文顺次分享了笔者在 SAP 成都研究院从事开发工作中,先后应用过的三种不同的开发挪动利用的思路和技术。

如果您的公司也在开发面向企业级用户的挪动利用,并且具备原生挪动开发技术能力很强的团队,可能接受别离为 iOS 和 Android 二者保护两套不同的代码线,那么当然能够抉择原生挪动开发的技术路线。

如果挪动利用的需要里对挪动操作系统原生 API 的依赖不高,并且心愿充分利用开发团队的 Web 开发技能,或者不心愿为不同的挪动平台别离保护不同的代码线,则可思考抉择基于 Cordova 的混合挪动利用技术路线。

如果企业自身就曾经在采取 SAP BTP 同其余 SAP 利用进行集成,违心间接重用 SAP BTP Mobile Services 提供的泛滥开箱即用的 Mobile Features,能够思考采取 SAP BTP Mobile Services 来进行挪动利用开发。

更多 Jerry 的原创文章,尽在:” 汪子熙 ”:

退出移动版