opk安装后不更新
在开发过程通过run等命令安装新的opk,或者安装线上opk后,机器人不会立即下载更新最新的opk,而是需要重新进入小豹程序,才会更新下载新的opk,具体操作参见视频
三指下拉->应用中心->小豹。
如果是豹小秘机器人,重启小豹APP后OPK仍不能更新,需要执行如下命令:
adb shell am force-stop com.ainirobot.moduleapp
原因:
ReactNative缓存,需要在重新启动moduleApp后才会清楚并重新加载
在开发过程通过run等命令安装新的opk,或者安装线上opk后,机器人不会立即下载更新最新的opk,而是需要重新进入小豹程序,才会更新下载新的opk,具体操作参见视频
三指下拉->应用中心->小豹。
如果是豹小秘机器人,重启小豹APP后OPK仍不能更新,需要执行如下命令:
adb shell am force-stop com.ainirobot.moduleapp
原因:
ReactNative缓存,需要在重新启动moduleApp后才会清楚并重新加载
使用 opk开发中的应用管理api,例如getOpkExtraPath,getOpkPath等获取当前应用信息的接口,获取到的资源信息错误,请检查opk的安装方式是否错误,正确方式如下:
opk的安装方式必须使用orionos-sh pack命令打包,然后使用 opk开发文档—发布与迭代—本地安装pack包的方式,安装到机器人,然后通过正常的语言指令打开opk才能正常获取当前运行的opk数据,如果使用run或者debug的方式,无法正常保证每次运行都能正确获取数据。
运行orionos-sh run 时候碰到如下错误:
安装完成自己的OPK后,启动应用:
解决方法:orionos-sh start workflow
碰到未知的错误造成无法成功执行:orionos-sh run, orionos-sh debug, orionos-sh pack
当在开发过程中,遇到opk报错或崩溃等问题,可以通过自行解决与寻求我们的帮助,步骤如下:
1、获取机器日志
2、根据时间点、关键字等,找到报错日志,确认报错原因
3、根据报错原因,先自行百度解决方案,排除是否是自己的代码错误造成
4、自行无法解决,提供准确的相关日志(完整日志)、发生时间(精确到分钟)、现象(录制视频),供我方开发人员查询原因
当调试出现这样的红屏无法调试的时候,可尝试使用官方的这个解决方案来解决:
https://blog.malov.im/reactnative-troubleshooting-guide/unable-to-connect-with-remote-debugger
特别注意这一行:
如果不是这问题,可继续google相关关键词“Unable to connect with remote debugger”
此外 mac 操作系统或者linux OPK 运行orionos-sh debug 如果出现红屏的情况,有可能使用下面方式尝试修复:(可能原因:orionos默认配置路径有出入或者加载有问题):
情况1:
orionos-sh run 执行报错
error node_modules\@react-navigation\core\lib\module\views\NavigationContext.js: Property body[5] of BlockStatement expected node to be of a type [“Statement”] but instead got “AssignmentExpression”
debug TypeError: Property body[5] of BlockStatement expected node to be of a type [“Statement”] but instead got “AssignmentExpression”
[orionos-cli error]: Error: Command failed: node node_modules/react-native/local-cli/cli.js bundle –reset-cache –config platform.config.js –platform android –verbose –bundle-output ./bundle_output/publish/platform.android.bundle –entry-file ./platformIndex.js –dev false –assets-dest ./bundle_output/publish/res
Error: Command failed: orionos-cli pack –multiBundle false –extraEnable true –type plugin –buildVersion false –nlpAction true
解决方案:
情况2(windows):
D:\phpstudy_pro\WWW\vue\weilirobotmini>orionos-sh run
Start run plugin opk
Error while accessing provider:com.ainirobot.robotplatform.dataprovider
android.database.sqlite.SQLiteException: unrecognized token: “\” (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM AppInfo WHERE (type=\’host\’)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:418)
at com.android.commands.content.Content$QueryCommand.onExecute(Content.java:619)
at com.android.commands.content.Content$Command.execute(Content.java:470)
at com.android.commands.content.Content.main(Content.java:690)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:340)
TypeError: Cannot read property ‘split’ of undefined
at queryOPKInfo (C:\Users\86159\AppData\Roaming\nvm\v12.10.0\node_modules\orionos-sh\src\utils\OPKUtils.js:121:25)
at runPlugin (C:\Users\86159\AppData\Roaming\nvm\v12.10.0\node_modules\orionos-sh\src\run\run.js:292:20)
at run (C:\Users\86159\AppData\Roaming\nvm\v12.10.0\node_modules\orionos-sh\src\run\run.js:436:13)
at Command.<anonymous> (C:\Users\86159\AppData\Roaming\nvm\v12.10.0\node_modules\orionos-sh\src\index.js:51:13)
at Command.listener (C:\Users\86159\AppData\Roaming\nvm\v12.10.0\node_modules\orionos-sh\node_modules\commander\index.js:315:8)
at Command.emit (events.js:209:13)
at Command.parseArgs (C:\Users\86159\AppData\Roaming\nvm\v12.10.0\node_modules\orionos-sh\node_modules\commander\index.js:651:12)
at Command.parse (C:\Users\86159\AppData\Roaming\nvm\v12.10.0\node_modules\orionos-sh\node_modules\commander\index.js:474:21)
at Object.<anonymous> (C:\Users\86159\AppData\Roaming\nvm\v12.10.0\node_modules\orionos-sh\src\index.js:110:9)
at Module._compile (internal/modules/cjs/loader.js:936:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
at Module.load (internal/modules/cjs/loader.js:790:32)
at Function.Module._load (internal/modules/cjs/loader.js:703:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:999:10)
at internal/main/run_main_module.js:17:11
Error: 当前机器未安装Workflow,不支持插件型OPK。
解决方案:
情况3:
error node_modules/react-native-webview/lib/WebView.android.js: Unexpected token: operator (<) in file node_modules/react-native-webview/lib/WebView.android.js at 368:20
debug Error: Unexpected token: operator (<) in file node_modules/react-native-webview/lib/WebView.android.js at 368:20
at /Users/sakuya/Desktop/hgx_normal_v2/node_modules/metro/src/JSTransformer/worker.js:414:17
at Generator.next (<anonymous>)
at asyncGeneratorStep (/Users/sakuya/Desktop/hgx_normal_v2/node_modules/metro/src/JSTransformer/worker.js:75:24)
at _next (/Users/sakuya/Desktop/hgx_normal_v2/node_modules/metro/src/JSTransformer/worker.js:95:9)
at /Users/sakuya/Desktop/hgx_normal_v2/node_modules/metro/src/JSTransformer/worker.js:100:7
at new Promise (<anonymous>)
at /Users/sakuya/Desktop/hgx_normal_v2/node_modules/metro/src/JSTransformer/worker.js:92:12
at JsTransformer._minifyCode (/Users/sakuya/Desktop/hgx_normal_v2/node_modules/metro/src/JSTransformer/worker.js:421:7)
at /Users/sakuya/Desktop/hgx_normal_v2/node_modules/metro/src/JSTransformer/worker.js:355:33
[orionos-cli error]: Error: Command failed: node node_modules/react-native/local-cli/cli.js bundle –reset-cache –config platform.config.js –platform android –verbose –bundle-output ./bundle_output/publish/platform.android.bundle –entry-file ./platformIndex.js –dev false –assets-dest ./bundle_output/publish/res
at checkExecSyncError (child_process.js:621:11)
at execSync (child_process.js:657:15)
at doBuildPluginBundle (/Users/sakuya/.orionos-cli/dist/commands/pack/build.js:8:6178)
at build (/Users/sakuya/.orionos-cli/dist/commands/pack/build.js:12:143)
at Timeout._onTimeout (/Users/sakuya/.orionos-cli/dist/commands/pack/localPack.js:16:4)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7)
Error: Command failed: orionos-cli pack –multiBundle false –extraEnable true –type plugin –buildVersion false –nlpAction true
at checkExecSyncError (child_process.js:621:11)
at execSync (child_process.js:657:15)
at pack (/usr/local/lib/node_modules/orionos-sh/src/pack/pack.js:70:5)
at Command.<anonymous> (/usr/local/lib/node_modules/orionos-sh/src/index.js:33:13)
at Command.listener (/usr/local/lib/node_modules/orionos-sh/node_modules/commander/index.js:315:8)
at Command.emit (events.js:203:13)
at Command.parseArgs (/usr/local/lib/node_modules/orionos-sh/node_modules/commander/index.js:651:12)
at Command.parse (/usr/local/lib/node_modules/orionos-sh/node_modules/commander/index.js:474:21)
at Object.<anonymous> (/usr/local/lib/node_modules/orionos-sh/src/index.js:110:9)
at Module._compile (internal/modules/cjs/loader.js:868:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:879:10)
at Module.load (internal/modules/cjs/loader.js:731:32)
at Function.Module._load (internal/modules/cjs/loader.js:644:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:931:10)
at internal/main/run_main_module.js:17:11
解决方案:
情况4:
orionos-sh run 执行报错
解决方案:
修改项目根目录下的.npmrc 文件,补全用户名和邮箱,
registry = https://npm.ainirobot.com/repository/eve-group/
init.author.name=
init.author.email=
init.author.url = https://npm.ainirobot.com
init.author.password =
# an email is required to publish npm packages
email=
情况5:
cmd.option(opt.name, opt.description ?? ”, opt.parse || (val => val), typeof opt.default === ‘function’ ? opt.default(config) : opt.default);
解决方案:
将 package.json 中的@types的库去掉
情况6:
提示找不到acorn库,在dependencies依赖里增加:”acorn”: “8.8.2”
情况1:
‘java’ 不是内部或外部命令,也不是可运行的程序
解决方案:
当使用语音控制从当前opk跳转到其他opk时,机器人没有进行opk的切换,并且屏幕出现:“若需其它服务,请先说退出”的弹窗时,此时需要检查的步骤如下:
例如下面的日志中,通过key或者appId可以找到当前opk的关键信息,其中关键词是:SceneRegistry,关键值 priority:1
在日志中查看当前opk被注册的优先级 priority 09-02 19:01:30.540 23251 23317 I ReactNativeJS: 'SceneRegistry', 'Add scene : {"default":true,"key":"home","appId":"ed9f81b741652db83871c560a4a5f62c","portal":true,"priority":1}' 09-02 19:01:30.540 23251 23317 I ReactNativeJS: 'SceneRegistry', 'Add scene : {"key":"wakeUp","appId":"ed9f81b741652db83871c560a4a5f62c","portal":false,"priority":1}' 09-02 19:01:30.540 23251 23317 I ReactNativeJS: 'SceneRegistry', 'Add scene : {"key":"idle","appId":"ed9f81b741652db83871c560a4a5f62c","portal":false,"priority":1}'
例如下面的日志中,通过key或者appId可以找到需要跳转至的opk的关键信息,其中关键词是:ScenePolicy,关键值 priority:1
在日志中查看当前opk进行trigger跳转时,是从什么优先级的opk跳转到什么优先级的opk 09-02 19:01:37.955 23251 23317 I ReactNativeJS: ScenePolicy : community_service&community_service_homepage ,current: ed9f81b741652db83871c560a4a5f62c_home ,target: e353b6dad9d3b1a351f3e542aba7da72_community_service ,userText: 社区服务 09-02 19:01:37.955 23251 23317 I ReactNativeJS: ScenePolicy : 1 1 target: {"default":true,"intent":["community_service&community_service_homepage","restaurant_menu&get_menu","elderly_college&query_course","leave_registration&set_out_date","leave_registration&set_back_date","regular_bus&query_bus_schedule"],"key":"community_service","appId":"e353b6dad9d3b1a351f3e542aba7da72","portal":false,"priority":1} currentConfig: {"default":true,"key":"home","appId":"ed9f81b741652db83871c560a4a5f62c","portal":true,"priority":1} intent: community_service&community_service_homepage
1. 项目的index.js文件中设置,具体代码如下:
AppRegistry.registerConfig([{ appKey: 'demo_service', component: () => App, intent: [ 'weather&get_weather' ], appId: appid, priority: 3 //修改这里的优先级 }]);
2. 应用后台发布时设置,可联系售前查看与修改
注:修改opk优先级请先使用第一种方式,若第一种无效再联系售前在后台进行设置
core版本问题
配置环境的时候安装的脚手架工具脚本依赖,涉及到兼容性问题core版本默认是1.34.1。
但是招财豹因为功能需求原因一直在更新依赖库版本,因此,为了您的开发体验与版本一致性,请手动升级您的依赖版本
到您购买的机器人所支持的版本。如下图:
安装好的APK要正确的加载机器人能力组件,只有两种方法:
1、通过机器人应用中心,点击apk运行
具体方法为:机器人屏幕三指下拉->全部应用->找到APK并进入。
如果需要debug 程序,可用这个方式打开APK之后,attach进程进行调试。
例如我们要打开一个开发者演示Demo
2、把APK设置为默认APK。
这种方法不适合用来调试,具体请参照apk开发中的sdk接入部分
如果使用Android studio的run或者debug直接启动apk,是无法正确加载机器人能力组件的,切记。
因为机器人麦克风阵列的特殊性,它不能当做普通Android麦克风使用,使用录音机功能会有一些限制。
首先它不支持VOIP,其次它必须在特定的音频设置下才能收到声音,具体可参考SDK文档->音频->音频数据采集