在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社区上写了一些文章:
这篇文章介绍的是如果发现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
至于React-Native应用里的JavaScript代码是否通过同样的原理调用Java代码,Jerry还没有时间去研究,因为我下一步需要弄清楚如何使用React-Native基于Android平台打一个可以安装的apk文件出来,这样才能分发给其他同事测试。
感谢阅读。
更多阅读
- SAP移动应用解决方案之一:HTML5应用 + Cordova = 平台相关的混合应用
- SAP Fiori应用的三种部署方式
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
在SAP除了使用Cordova生产移动应用外,还有这种方式的更多相关文章
- Cordova页面加载外网图片失败,Refused to load the image
原文:Cordova页面加载外网图片失败,Refused to load the image 1.使用Cordova页面加载外网图片失败,抛出异常 Refused to load the image ...
- SAP交货单过账自动生产采购订单、采购订单自动收货入库
公司间需要买卖操作,由于发货和收货都是同一批人在操作,为了减少业务人员的工作量,提高工作效率,特实现以上功能 1.增强实现:增强点为交货单过账成功时触发,在提交前触发,如果遇到不可预知问题,可能造成数 ...
- 雪妖现世:给SAP Fiori Launchpad增添雪花纷飞的效果
1995年7月,台湾大宇公司发布了一款国产单机角色扮演游戏神作:<仙剑奇侠传1>,所谓"一包烟,一杯茶",就能在电脑面前坐一整天. 这么经典的游戏Jerry当然已经通关 ...
- [转帖]SAP MES生产执行系统解决方案
一.SAP MES概述: SAP公司成立于1972年,总部位于德国,是全球最大的企业管理和协同化商务解决方案供应商.全球第三大独立软件供应商.目前,在全球有120多个国家的超过86,000多家用户正在 ...
- SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的
大家如果使用我github上的这段代码创建S/4HANA的生产订单时,一定会发现,我在代码里并没有硬编码来指定生产订单的ID,然而运行时会发现我在系统里配置的这个2800被自动使用了,这是怎么做到的呢 ...
- SAP问题【转载】
1.A:在公司代码分配折旧表时报错? 在公司代码分配折旧表时报错,提示是"3000 的公司代码分录不完全-参见长文本" 希望各位大侠帮我看看. 3000 的公司代码分录不完全-参见 ...
- SAP Fiori应用的三种部署方式
封面图片来自Google搜索,关键字: Fiori Deployment 方式1 On premise环境下以BSP应用作为Fiori应用部署和运行的载体 在SAP成都labs我曾经担任过CRM这几个 ...
- 如何在云端部署SAP HANA实战, Azure 上的 SAP HANA(大型实例)概述和体系结构
什么是 Azure 上的 SAP HANA(大型实例)? Azure 上的 SAP HANA(大型实例)是一种针对 Azure 的独特解决方案. 除了提供 Azure 虚拟机以用于部署和运行 SAP ...
- 评点SAP HR功能及人力资源管理软件
评点SAP HR功能及人力资源管理软件 本文导航 第1页:my SAP 人力资源软件 第2页:my SAP HR协同功能 第3页:组织结构管理 第4页:mySAPTM HR的战略功能 第5页:集成 ...
随机推荐
- 记一次haproxy反向代理配置
首先借用一下前辈的话,解释下反向代理是什么? 反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...
- Qt编写气体安全管理系统6-地图监控
一.前言 地图监控主要是提供一个地图(可以是平面的也可以是立体彩色的,一般建议鸟瞰图,有3D感),然后设备在对应的地图上,可以切换地图来查看对应区域的设备,一般来说一个区域会有一个地图文件,设备在地图 ...
- SAP标准屏幕中字段描述增强
转自:https://www.cnblogs.com/sap-ronny/p/7921817.html如果想要改变标准屏幕中的字段名称,如把物料主数据基本数据元素的名字改为我们想要的名字 . 1.首先 ...
- HR数据分析常用的50个公式
HR数据分析常用的50个公式 HR经常需要和数据打交道,如入职率.离职率.加班费计算等.虽然日常工作中,单个数据的计算并不麻烦,但几十上百个累计在一起,确实很容易混淆,甚至计算失误.今天小编急HR之所 ...
- LeetCode:交替打印【1115】
LeetCode:交替打印[1115] 题目描述 我们提供一个类: class FooBar { public void foo() { for (int i = 0; i < n; i++) ...
- 【Tools】ModbusSlave 7.0和ModbusPoll 7.0官网最新软件+注册码
某宝1.5元淘的:有币的求赏,小弟下载缺币.没币的从附件下载. 赏币地址:https://download.csdn.net/download/qq_18187161/10724794 谢谢! 无币百 ...
- Django 之安全篇
一.CSRF攻击 CSRF攻击概述: CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其 ...
- ubuntu18.04下安装gitlab
1.安装并配置必要的依赖关系 sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates 接下来,安 ...
- js控制数量包含截取
<div class="usermes_index_line"> 进行中的单 <div id="usermes_index_line_i2"& ...
- 二进制知识(java中的位操作)
文章目录 前言 机器数 真值 原码 反码 补码 计算机中保存的都是补码 位操作 强制转换,精度丢失 前言 讲二进制的东西,必须要说明是多少位机器,八位机上的 1000 1000 和 十六位机上的 10 ...