升级科尔多瓦应用程序时出错

Posted

技术标签:

【中文标题】升级科尔多瓦应用程序时出错【英文标题】:Errors upgrading cordova app 【发布时间】:2015-09-19 17:21:51 【问题描述】:

出于安全考虑,我正在尝试将 phonegap android 应用从 cordova 3.5.0 更新到 cordova 5.1.1。 当我启动应用程序时,我收到以下错误,但我无法理解它们来自哪里。你能帮我建议在哪里调查吗?

W/System.err( 1672): org.json.JSONException: Value PluginManager at 0 of type java.lang.String cannot be converted to int
W/System.err( 1672):    at org.json.JSON.typeMismatch(JSON.java:100)
W/System.err( 1672):    at org.json.JSONArray.getInt(JSONArray.java:357)
W/System.err( 1672):    at org.apache.cordova.CordovaBridge.promptOnJsPrompt(CordovaBridge.java:131)
W/System.err( 1672):    at org.apache.cordova.engine.SystemWebChromeClient.onJsPrompt(SystemWebChromeClient.java:119)
W/System.err( 1672):    at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:655)
W/System.err( 1672):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 1672):    at android.os.Looper.loop(Looper.java:137)
W/System.err( 1672):    at android.app.ActivityThread.main(ActivityThread.java:4745)
W/System.err( 1672):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 1672):    at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err( 1672):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
W/System.err( 1672):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
W/System.err( 1672):    at dalvik.system.NativeStart.main(Native Method)
W/System.err( 1672): org.json.JSONException: Value App at 0 of type java.lang.String cannot be converted to int
W/System.err( 1672):    at org.json.JSON.typeMismatch(JSON.java:100)
W/System.err( 1672):    at org.json.JSONArray.getInt(JSONArray.java:357)
W/System.err( 1672):    at org.apache.cordova.CordovaBridge.promptOnJsPrompt(CordovaBridge.java:131)
W/System.err( 1672):    at org.apache.cordova.engine.SystemWebChromeClient.onJsPrompt(SystemWebChromeClient.java:119)
W/System.err( 1672):    at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:655)
W/System.err( 1672):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 1672):    at android.os.Looper.loop(Looper.java:137)
W/System.err( 1672):    at android.app.ActivityThread.main(ActivityThread.java:4745)
W/System.err( 1672):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 1672):    at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err( 1672):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
W/System.err( 1672):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
W/System.err( 1672):    at dalvik.system.NativeStart.main(Native Method)
W/System.err( 1672): org.json.JSONException: Value File at 0 of type java.lang.String cannot be converted to int
W/System.err( 1672):    at org.json.JSON.typeMismatch(JSON.java:100)
W/System.err( 1672):    at org.json.JSONArray.getInt(JSONArray.java:357)
W/System.err( 1672):    at org.apache.cordova.CordovaBridge.promptOnJsPrompt(CordovaBridge.java:131)
W/System.err( 1672):    at org.apache.cordova.engine.SystemWebChromeClient.onJsPrompt(SystemWebChromeClient.java:119)
W/System.err( 1672):    at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:655)
W/System.err( 1672):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 1672):    at android.os.Looper.loop(Looper.java:137)
W/System.err( 1672):    at android.app.ActivityThread.main(ActivityThread.java:4745)
W/System.err( 1672):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 1672):    at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err( 1672):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
W/System.err( 1672):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
W/System.err( 1672):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

你有最新的 SDK 版本吗(我认为是 22)? 我不确定,但有时,删除插件并重新添加它们会很好地重新生成代码。希望这只是给你的。 @jcesarmobile npm update -g 然后我在 config.xml 中更改了 phonegap 版本 @LeZohan68 刚试过但没用 【参考方案1】:

要更新 cordova 项目,您必须这样做:

首先更新 CLI 版本

npm update -g cordova

然后转到您的项目文件夹并执行

cordova platform update android

【讨论】:

我很抱歉,但按照你说的做之后,错误是完全一样的:( 嗯,我不这么认为。无论如何,目前我已经删除了所有插件- 如果您再次添加它们,问题仍然存在吗?如果您创建一个新的空项目,您是否有同样的问题?你安装了 java 7 还是 java 8? 是的,如果我再次添加它们,它仍然存在。不,一个全新的应用程序运行正常。 (但将整个应用程序移至新项目会有点挑战 - 请帮助我:| 即使将应用程序移至新项目,问题仍然存在! [现在很绝望]【参考方案2】:

编辑:我没有仔细阅读其他答案的所有评论,现在我意识到这个答案可能对 OP 并没有真正有用,但无论如何它可能有助于与 Cordova 3.x->5 迁移作斗争的人。 ..

当您更新 cordova 时,您通常还必须更新平台和插件。

因此,在您像以前一样升级 CLI 后,您必须删除所有平台和插件,然后重新安装。

(如果您有仅在平台中的内容,请考虑先保存)

在我们开始之前,保存您使用的插件列表

cordova plugin list

然后我们清理一切(windows 命令提示符):

rd /s/q platforms
rd /s /q plugins

或者对于 linux/OS X :

rm -rf platforms
rm -rf plugins

请注意,这是一种删除平台和插件的“粗暴”方式,你可以只运行cordova platform remove android,但你必须处理文件platforms.json,你可以为每个使用cordova plugin remove ...插件,但它会更长。

然后你使用cordova plugin add ... 重新添加你所有的插件。

请注意,cordova 5 中的核心插件现在使用 npm 而不是 git,因此对于每个插件,您必须检查新 id,否则您可能会得到旧版本。

例如,使用

cordova plugin add cordova-plugin-camera

而不是

cordova plugin add org.apache.cordova.camera

最后你必须添加负责安全的新插件

cordova plugin add cordova-plugin-whitelist

并在 config.xml 中进行配置,并在您的 html 中添加 CSP 元标记。

并重新添加平台:

cordova plugin add android

【讨论】:

这应该在哪个 SO 中工作? del 不是 mac os X 上的命令 我看到问题中没有指定操作系统,所以我选择了最常见的操作系统:Windows。在 OS X 中,应该键入 rm -r 而不是 del(但实际上,即使对于 Windows,del 也不是最好的命令)【参考方案3】:

您的项目似乎已“部分升级”。我建议从一个新的 5.11 Cordova 项目开始,并像使用原始 3.5.0 项目一样构建它。

尝试自动化(如在脚本中)构建项目的过程,以便您始终可以从一个新的 Cordova 项目开始并自动构建它以成为您成熟的应用程序。

我过去曾使用该选项来克服一些无法解释的问题 - 所有这些都是由于升级没有达到应有的顺利。

【讨论】:

以上是关于升级科尔多瓦应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用此命令在移动设备中运行离子应用程序时出错(离子科尔多瓦运行安卓)

添加平台并使用离子科尔多瓦构建时出错?

编译“ant”构建时出错

科尔多瓦升级问题到 3.2

安装科尔多瓦时出错

安装科尔多瓦时出错