在SAP除了使用Cordova生产移动应用外,还有这种方式
本文和Jerry过去的文章不太一样,算不上Jerry的知识分享,只是记录一下Jerry用React-Native把应用安装到Android手机上遇到的一些问题,方便以后查看。
Jerry的同事Leo用React-Native开发了一个应用,现在Jerry需要把这个应用在自己的安卓手机上运行起来。
客户启动这个应用后,自动召唤出手机上的摄像头,对身边的物品进行拍照,然后把照片上传到SAP Cloud Platform的Leonardo那里,消费机器学习API之一的Similarity score服务,返回最相似的三个图案。
去年Jerry的C4C开发团队同事,Yang Joey曾经写过一篇文章:SAP移动应用解决方案之一:HTML5应用 + Cordova = 平台相关的混合应用,介绍了SAP Cloud for Customer的移动端应用是怎么基于开源项目Cordova创建的,当时文章曾经提及,使用Cordova打包成的移动应用,实际上运行在移动平台的WebView里。而React-Native则有着和Cordova完全不同的设计理念。
关于这两种技术的比较,网上有很多的文章,大家根据关键字“React-Native Cordova”搜索就行了,比如这篇:
https://www.toptal.com/mobile/comparing-react-native-to-cordova
Jerry是按照React-Native中文网站一步一步操作的,过程中遇到一些问题,全都是和Android平台相关的,React-Native官网没有提及,最后靠Google都顺利解决了。
Could not resolve project: react-native-camera
Google找到一个链接:https://github.com/react-native-community/react-native-camera/blob/master/docs/migrationV2.md#android
需要在应用的android/app/build.gradle文件里添加一行配置:missingDimensionStrategy ‘react-native-camera’, ‘general’
com.android.builder.testing.api.DeviceException: No connected devices!
这报错信息很清楚,React-Native cli不知道应该将打好包的应用安装在什么地方。解决方法也很容易,要么启动一个Android模拟器,要么用USB连接真机。
用AVD manager启动一个模拟器:
然后重新执行react-native run-android, 就能将应用安装到模拟器上了。
或者用USB连接手机,打开手机上的USB调试选项:
一样能够通过react-native run-android将应用直接装到手机上:
Failed to install the following Android SDK packages as some licences have not been accepted.
这个错也容易解决,执行sdkmanager.bat --licenses, 一路选择Y接受所有的licenses即可。
cannot find symbol import androidx.annotation.Nullable;
编译错误。在应用的android文件夹的gradle.properties配置文件里,增加下面两条配置记录:
android.useAndroidX=true
android.enableJetifier=true
之后这个编译错误就没有了。
因为Leo开发的这个React-Native应用里面可以用JavaScript代码调用手机摄像头,Jerry觉得非常神奇,出于好奇,打开Leo的代码学习了一下。
从react-native-camera库里导出RNCamera组件:
到React-Native应用文件夹node_modules下查看RNCamera的实现,发现果然是根据移动操作系统的类型分别作了处理。如果是Android平台,使用摄像头对应的权限为:PermissionsAndroid.PERMISSIONS.CAMERA
在Android平台下使用摄像头的Java代码,存放在对应的android文件夹里。
Jerry以前使用Cordova生产移动移动时,曾经研究过Cordova应用里的JavaScript代码是如何调用Android平台上原生的Java代码的,也在SAP社区上写了一些文章:
https://blogs.sap.com/2017/08/18/step-by-step-to-create-a-custom-cordova-plugin-for-android-and-consume-it-in-your-ui5-application/
这篇文章介绍的是如果发现Cordova提供的标准插件不能满足我们的需求时,我们可以用Java开发自定义的Cordova插件,然后在JavaScript代码里调用。
Cordova里JavaScript代码调用Java代码的原理,Jerry在这三篇SAP社区博客里介绍过:
How is OData request routed to Offline data store by Odata offline plugin
How is JavaScript code in OData offline plugin delegated to native Java code in Android
How is OData offline store opened in Android platform
至于React-Native应用里的JavaScript代码是否通过同样的原理调用Java代码,Jerry还没有时间去研究,因为我下一步需要弄清楚如何使用React-Native基于Android平台打一个可以安装的apk文件出来,这样才能分发给其他同事测试。
感谢阅读。
更多阅读
- SAP移动应用解决方案之一:HTML5应用 + Cordova = 平台相关的混合应用
- SAP Fiori应用的三种部署方式
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
在SAP除了使用Cordova生产移动应用外,还有这种方式相关推荐
- SAP ABAP TOOLS 在生产系统直接修改程序(ZABAP_SE38)
SAP ABAP TOOLS 在生产系统直接修改程序(ZABAP_SE38) 引言: 这是一个潘多拉魔盒1. 关键字:SAP ABAP SE38 ZABAP_SE38 TOOLS 文章目录 SAP A ...
- SAP/R3模块概述---生产计划和控制
SAP已经成为全球最大的企业管理软件及协同商务解决方案供应商.全球第三大独立软件供应商.在全球有120多个国家的超过19,300家用户正在运行着60,100多套SAP软件.财富 500强80%以上的企 ...
- SAP License:CO生产订单
进行看了一下CO生产订单,CO生产订单其实要比PP生产订单简单,PP生产订单需要有BOM 工作中心等主数据,而CO生产订单可以根据某个物料创建(KKF1)一个CO生产订单,然后把费用发到CO生产订单, ...
- navision系统和sap区别_上海生产管理EPR系统和SAP系统有什么不同,我们应该选择哪个?...
今天我们来聊一下很一个很有趣的话题,上海生产管理ERP系统和SAP的区别是什么?关于SAP与ERP的区别,也许只有真正用过的人才会说出其中的内涵和它们之间的关系.其实用一句通俗易懂的语句进行描述,我相 ...
- sap中如何追踪生产订单的修改记录
方法一:系统标准方法 如何查找到production order的修改记录呢?因为有很多用户 "赖皮",明明自己修改过某些资料,如qty or component,可就是不承认,并 ...
- co88 sap 实际结算_SAP生产订单实际成本计算
SAP计算产品成本的方法有三种,按期间计算成本,按工单计算成本,按销售单(sales order)计算成本.其中,按工单计算成本最为常见,很多公司采用,我们也以此为例说明SAP产品计算的流程. 一.S ...
- 关于SAP APO RPMCALL 指定生产订单的BOM更新
1.APO模块中,主生产计划把销售订单分解为生产订单时,会给每一个生产订单绑定BOM清单. 2.一段时间后,计划员选取一部分订单去确认生产,并在对生产的订单下达到下游系统前,有一个RPMCALL 订单 ...
- SAP中Product Orders(生产订单)相关函数BAPI
项目中,生产订单的状态是了解生产过程的主要依据,也是自开发报表中常用到的,下面是生产订单状态的几个函数以及生产订单技术关闭.生产订单报工的几个函数,希望对用到的兄弟有所帮助. [相关表] JEST-对 ...
- 如何手动创建SAP S/4HANA的生产订单
A production order specifies which material is to be produced, where it is to be produced, which ope ...
最新文章
- 你究竟了解多少HTML代码
- 整理的一点MD5资料(第一部分)
- @Quelifier的用法,
- 编译原理视角下的 c c 语言左值教学,西安交通大学18年3月课程考试《编译原理》作业考核试题...
- ABAP 字符串操作
- 【机器视觉】 return算子
- c++中的lambda特性
- 性能测试——loadrunner_添加多个主机发送请求
- javaMail发送邮件设置发件人中文昵称
- VMware workstations pro16.23已经安装vmware tool,Ubuntu仍然无法复制粘贴
- VBA编程_ActiveSheet
- Nmap 扫描主机端口
- OBV指标交易策略(累积能量潮与移动能量潮,成交量多空比率净额及相关应用原则)
- ccccccccccc
- APISpace 银行卡四要素API
- win7抓取计算机窗口存于位图文件,电脑按printscreen截屏后 图片会保存在哪里?-win7截图,win7电脑自带的截图快捷键...
- 【测试开发】Python—zipfile库文件压缩封装
- 用cocos实现的《我的世界》已经上线微信小游戏,分享一下主要技术
- 【烈日炎炎战后端】JAVA基础(3.4万字)
- Facebook pop
热门文章
- (网页)Uncaught ReferenceError: pageImport is not defined
- STL总结 (C++)
- P4语言编程快速开始 实践二
- 大话异步与并行(一)
- 条件编译用法(#ifndef #define #endif#else)
- 网页UTF8编码--多出空白行的问题(ZT)
- Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json
- localhost,127.0.0.1 与 本机IP的区别
- 第三次学JAVA再学不好就吃翔(part76)--Collection类
- 计算机控制系统的概念构成,计算机控制系统复习