4

私は Phonegap アプリに取り組んでおり、Phonegap が最近 2.2 に更新され、多くの Android 修正が適用されていることがわかりました。そのため、xml、jar、および JS ファイルを置き換えて、すぐに更新しました。私のアプリは以前はうまく機能していました。カスタム Javascript インターフェイスを使用して追加機能を追加しています。残念ながら、2.2 にアップグレードすると、次のエラー ログが表示されます。

Pastebin エラーログ

これは、4.0.4 を実行している Samsung Galaxy S2 でアプリを実行したときに発生するエラーです。これは、私が使用しているメイン アプリケーションの Java ファイルです。

Pastebin Java ファイル

皆さんが問題を見つけるのを手伝ってくれることを願っています. JNI エラーの原因についての手がかりがありません。

編集: Android 2.2 エミュレーターで同じコードを試したところ、よりわかりやすいエラーが表示されました:

10-31 13:02:12.945: I/dalvikvm(543): Could not find method android.webkit.WebView.<init>, referenced from method org.apache.cordova.CordovaWebView.<init>
10-31 13:02:12.945: W/dalvikvm(543): VFY: unable to resolve direct method 3298: Landroid/webkit/WebView;.<init> (Landroid/content/Context;Landroid/util/AttributeSet;IZ)V
10-31 13:02:12.945: D/dalvikvm(543): VFY: replacing opcode 0x70 at 0x0001
10-31 13:02:12.945: D/dalvikvm(543): VFY: dead code 0x0004-005b in Lorg/apache/cordova/CordovaWebView;.<init> (Landroid/content/Context;Landroid/util/AttributeSet;IZ)V
10-31 13:02:13.195: I/CordovaLog(543): Changing log level to DEBUG(3)
10-31 13:02:13.205: I/CordovaLog(543): Found preference for useBrowserHistory=false
10-31 13:02:13.205: D/CordovaLog(543): Found preference for useBrowserHistory=false
10-31 13:02:13.205: I/CordovaLog(543): Found preference for exit-on-suspend=false
10-31 13:02:13.205: D/CordovaLog(543): Found preference for exit-on-suspend=false
10-31 13:02:13.215: W/CordovaWebView(543): useBrowserHistory=false is deprecated as of Cordova 2.2.0 and will be removed six months after the 2.2.0 release.  Please use the browser history and use history.back().
10-31 13:02:13.245: D/JsMessageQueue(543): Set native->JS mode to 2
10-31 13:02:13.245: I/CordovaWebView(543): Disabled addJavascriptInterface() bridge since Android version is old.
10-31 13:02:13.255: D/CordovaWebView(543): Origin to allow: http://127.0.0.1*
10-31 13:02:13.255: D/CordovaWebView(543): Unlimited access to network resources
10-31 13:02:13.265: D/CordovaWebView(543): Origin to allow: http://api.enkhuizenapp.nl
10-31 13:02:13.265: D/CordovaWebView(543): Origin to allow: .*
10-31 13:02:13.265: I/CordovaLog(543): Found log level DEBUG
10-31 13:02:13.265: I/CordovaLog(543): Changing log level to DEBUG(3)
10-31 13:02:13.265: I/CordovaLog(543): Found preference for useBrowserHistory=false
10-31 13:02:13.265: D/CordovaLog(543): Found preference for useBrowserHistory=false
10-31 13:02:13.265: I/CordovaLog(543): Found preference for exit-on-suspend=false
10-31 13:02:13.265: D/CordovaLog(543): Found preference for exit-on-suspend=false
10-31 13:02:13.265: W/CordovaWebView(543): useBrowserHistory=false is deprecated as of Cordova 2.2.0 and will be removed six months after the 2.2.0 release.  Please use the browser history and use history.back().
10-31 13:02:13.285: D/JsMessageQueue(543): Set native->JS mode to 2
10-31 13:02:13.285: I/CordovaWebView(543): Disabled addJavascriptInterface() bridge since Android version is old.
10-31 13:02:13.285: D/CordovaWebView(543): >>> loadUrl(file:///android_asset/www/menu.html)
10-31 13:02:13.285: D/PluginManager(543): init()
10-31 13:02:13.296: D/CordovaWebView(543): >>> loadUrlNow()
10-31 13:02:13.296: D/CordovaWebView(543): >>> loadUrl(file:///android_asset/www/main.html)
10-31 13:02:13.296: D/PluginManager(543): init()
10-31 13:02:13.315: D/CordovaWebView(543): >>> loadUrlNow()
10-31 13:02:13.955: D/dalvikvm(543): GC_FOR_MALLOC freed 1775 objects / 133528 bytes in 76ms
10-31 13:02:14.765: D/Cordova(543): onPageFinished(file:///android_asset/www/menu.html)
10-31 13:02:15.365: D/Cordova(543): onPageFinished(file:///android_asset/www/main.html)
10-31 13:02:15.685: I/Database(543): sqlite returned: error code = 14, msg = cannot open file at source line 25467
10-31 13:02:15.945: D/CordovaLog(543): Falling back on PROMPT mode since _cordovaNative is missing.
10-31 13:02:15.955: D/CordovaLog(543): file:///android_asset/www/scripts/cordova-2.2.0.js: Line 1032 : Falling back on PROMPT mode since _cordovaNative is missing.
10-31 13:02:15.955: I/Web Console(543): Falling back on PROMPT mode since _cordovaNative is missing. at file:///android_asset/www/scripts/cordova-2.2.0.js:1032
10-31 13:02:16.065: D/AndroidRuntime(543): Shutting down VM
10-31 13:02:16.065: W/dalvikvm(543): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
10-31 13:02:16.075: E/AndroidRuntime(543): FATAL EXCEPTION: main
10-31 13:02:16.075: E/AndroidRuntime(543): java.lang.NullPointerException
10-31 13:02:16.075: E/AndroidRuntime(543):  at org.apache.cordova.api.Plugin.execute(Plugin.java:74)
10-31 13:02:16.075: E/AndroidRuntime(543):  at org.apache.cordova.api.CordovaPlugin.execute(CordovaPlugin.java:61)
10-31 13:02:16.075: E/AndroidRuntime(543):  at org.apache.cordova.api.PluginManager.exec(PluginManager.java:224)
10-31 13:02:16.075: E/AndroidRuntime(543):  at org.apache.cordova.ExposedJsApi.exec(ExposedJsApi.java:43)
10-31 13:02:16.075: E/AndroidRuntime(543):  at org.apache.cordova.CordovaChromeClient.onJsPrompt(CordovaChromeClient.java:213)
10-31 13:02:16.075: E/AndroidRuntime(543):  at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:566)
10-31 13:02:16.075: E/AndroidRuntime(543):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-31 13:02:16.075: E/AndroidRuntime(543):  at android.os.Looper.loop(Looper.java:123)
10-31 13:02:16.075: E/AndroidRuntime(543):  at android.app.ActivityThread.main(ActivityThread.java:4627)
10-31 13:02:16.075: E/AndroidRuntime(543):  at java.lang.reflect.Method.invokeNative(Native Method)
10-31 13:02:16.075: E/AndroidRuntime(543):  at java.lang.reflect.Method.invoke(Method.java:521)
10-31 13:02:16.075: E/AndroidRuntime(543):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-31 13:02:16.075: E/AndroidRuntime(543):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-31 13:02:16.075: E/AndroidRuntime(543):  at dalvik.system.NativeStart.main(Native Method)

前もって感謝します!

4

2 に答える 2

7

この問題の現在の回避策は、CordovaActivity にスレッド プールを追加することです。

private final ExecutorService threadPool = Executors.newCachedThreadPool();

そしてもちろん、新しく追加された getThreadPool() メソッドを実装します。これは偶然に追加されたもので、次のリリースでカプセル化されることを願っています。

public ExecutorService getThreadPool()
{
    return threadPool;
}
于 2012-11-05T19:27:04.857 に答える
-1

私はその問題を抱えていましたが、ドキュメントUpgrading Cordova Androidに記載されている手順に従った後、そのエラーは消えました。

于 2012-11-06T18:01:57.967 に答える