升级 cordova 应用程序时出错
Errors upgrading cordova app
出于安全考虑,我正在尝试将 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)
要更新 cordova 项目,您必须这样做:
首先更新 CLI 版本
npm update -g cordova
然后转到您的项目文件夹并执行
cordova platform update android
编辑:我还没有仔细阅读其他答案的所有评论,我现在意识到这个答案可能对 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
请注意,这是一种删除平台和插件的 "brute" 方法,您可以只 运行 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
你似乎有 'partially upgraded' 你的项目。我建议从一个新的 5.11 Cordova 项目开始,并按照与原始 3.5.0 项目相同的方式构建它。
尝试自动化(如在脚本中)构建项目的过程,以便您始终可以从一个新的 Cordova 项目开始并自动构建它以成为您的完整应用程序。
我过去曾使用该选项来解决一些无法解释的问题 - 所有这些都是由于升级不如应有的顺利。
出于安全考虑,我正在尝试将 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)
要更新 cordova 项目,您必须这样做:
首先更新 CLI 版本
npm update -g cordova
然后转到您的项目文件夹并执行
cordova platform update android
编辑:我还没有仔细阅读其他答案的所有评论,我现在意识到这个答案可能对 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
请注意,这是一种删除平台和插件的 "brute" 方法,您可以只 运行 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
你似乎有 'partially upgraded' 你的项目。我建议从一个新的 5.11 Cordova 项目开始,并按照与原始 3.5.0 项目相同的方式构建它。
尝试自动化(如在脚本中)构建项目的过程,以便您始终可以从一个新的 Cordova 项目开始并自动构建它以成为您的完整应用程序。
我过去曾使用该选项来解决一些无法解释的问题 - 所有这些都是由于升级不如应有的顺利。