本文和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生产移动应用外,还有这种方式相关推荐

  1. SAP ABAP TOOLS 在生产系统直接修改程序(ZABAP_SE38)

    SAP ABAP TOOLS 在生产系统直接修改程序(ZABAP_SE38) 引言: 这是一个潘多拉魔盒1. 关键字:SAP ABAP SE38 ZABAP_SE38 TOOLS 文章目录 SAP A ...

  2. SAP/R3模块概述---生产计划和控制

    SAP已经成为全球最大的企业管理软件及协同商务解决方案供应商.全球第三大独立软件供应商.在全球有120多个国家的超过19,300家用户正在运行着60,100多套SAP软件.财富 500强80%以上的企 ...

  3. SAP License:CO生产订单

    进行看了一下CO生产订单,CO生产订单其实要比PP生产订单简单,PP生产订单需要有BOM 工作中心等主数据,而CO生产订单可以根据某个物料创建(KKF1)一个CO生产订单,然后把费用发到CO生产订单, ...

  4. navision系统和sap区别_上海生产管理EPR系统和SAP系统有什么不同,我们应该选择哪个?...

    今天我们来聊一下很一个很有趣的话题,上海生产管理ERP系统和SAP的区别是什么?关于SAP与ERP的区别,也许只有真正用过的人才会说出其中的内涵和它们之间的关系.其实用一句通俗易懂的语句进行描述,我相 ...

  5. sap中如何追踪生产订单的修改记录

    方法一:系统标准方法 如何查找到production order的修改记录呢?因为有很多用户 "赖皮",明明自己修改过某些资料,如qty or component,可就是不承认,并 ...

  6. co88 sap 实际结算_SAP生产订单实际成本计算

    SAP计算产品成本的方法有三种,按期间计算成本,按工单计算成本,按销售单(sales order)计算成本.其中,按工单计算成本最为常见,很多公司采用,我们也以此为例说明SAP产品计算的流程. 一.S ...

  7. 关于SAP APO RPMCALL 指定生产订单的BOM更新

    1.APO模块中,主生产计划把销售订单分解为生产订单时,会给每一个生产订单绑定BOM清单. 2.一段时间后,计划员选取一部分订单去确认生产,并在对生产的订单下达到下游系统前,有一个RPMCALL 订单 ...

  8. SAP中Product Orders(生产订单)相关函数BAPI

    项目中,生产订单的状态是了解生产过程的主要依据,也是自开发报表中常用到的,下面是生产订单状态的几个函数以及生产订单技术关闭.生产订单报工的几个函数,希望对用到的兄弟有所帮助. [相关表] JEST-对 ...

  9. 如何手动创建SAP S/4HANA的生产订单

    A production order specifies which material is to be produced, where it is to be produced, which ope ...

最新文章

  1. 你究竟了解多少HTML代码
  2. 整理的一点MD5资料(第一部分)
  3. @Quelifier的用法,
  4. 编译原理视角下的 c c 语言左值教学,西安交通大学18年3月课程考试《编译原理》作业考核试题...
  5. ABAP 字符串操作
  6. 【机器视觉】 return算子
  7. c++中的lambda特性
  8. 性能测试——loadrunner_添加多个主机发送请求
  9. javaMail发送邮件设置发件人中文昵称
  10. VMware workstations pro16.23已经安装vmware tool,Ubuntu仍然无法复制粘贴
  11. VBA编程_ActiveSheet
  12. Nmap 扫描主机端口
  13. OBV指标交易策略(累积能量潮与移动能量潮,成交量多空比率净额及相关应用原则)
  14. ccccccccccc
  15. APISpace 银行卡四要素API
  16. win7抓取计算机窗口存于位图文件,电脑按printscreen截屏后 图片会保存在哪里?-win7截图,win7电脑自带的截图快捷键...
  17. 【测试开发】Python—zipfile库文件压缩封装
  18. 用cocos实现的《我的世界》已经上线微信小游戏,分享一下主要技术
  19. 【烈日炎炎战后端】JAVA基础(3.4万字)
  20. Facebook pop

热门文章

  1. (网页)Uncaught ReferenceError: pageImport is not defined
  2. STL总结 (C++)
  3. P4语言编程快速开始 实践二
  4. 大话异步与并行(一)
  5. 条件编译用法(#ifndef #define #endif#else)
  6. 网页UTF8编码--多出空白行的问题(ZT)
  7. Json.net/Newtonsoft 3.0 新特性JObject/Linq to Json
  8. localhost,127.0.0.1 与 本机IP的区别
  9. 第三次学JAVA再学不好就吃翔(part76)--Collection类
  10. 计算机控制系统的概念构成,计算机控制系统复习