1

iOS デバイス用の cocos2dx でゲームを作成しました。Androidに移植したいのですが、iOSでは正常に動作するコードがAndroidではクラッシュします。Eclipse は、次の 3 種類の logCat 出力を示します。

/////////////////////////////////////////////// /////////////////////////////////////////////// ///

1) 11-27 10:41:05.168: W/SharedBufferStack(4417): waitForCondition(LockCondition) timed out (identity=302, status=0). CPU may be pegged. trying again.

/////////////////////////////////////////////// /////////////////////////////////////////////// ///

2) 11-27 10:41:36.448: D/lights(248): set_light_backlight: brightness=255
11-27 10:41:41.518: I/InputDispatcher(248): Application is not responding: Window{2b452080 org.cocos2dx.Saburbia_android/org.cocos2dx.Saburbia_android.Saburbia_android paused=false}. 5000.4ms since event, 5000.4ms since wait started
11-27 10:41:41.518: I/WindowManager(248): Input event dispatching timed out sending to org.cocos2dx.Saburbia_android/org.cocos2dx.Saburbia_android.Saburbia_android
11-27 10:41:41.528: I/Process(248): Sending signal. PID: 4417 SIG: 3
11-27 10:41:41.528: I/dalvikvm(4417): threadid=4: reacting to signal 3
11-27 10:41:41.728: I/Process(248): Sending signal. PID: 248 SIG: 3
11-27 10:41:41.728: I/dalvikvm(248): threadid=4: reacting to signal 3
11-27 10:41:41.748: I/dalvikvm(248): Wrote stack traces to '/data/anr/traces.txt'
11-27 10:41:41.748: I/Process(248): Sending signal. PID: 355 SIG: 3
11-27 10:41:41.748: I/dalvikvm(355): threadid=4: reacting to signal 3
11-27 10:41:41.758: I/dalvikvm(355): Wrote stack traces to '/data/anr/traces.txt'
11-27 10:41:41.758: I/Process(248): Sending signal. PID: 320 SIG: 3
11-27 10:41:41.758: I/dalvikvm(320): threadid=4: reacting to signal 3
11-27 10:41:41.758: I/dalvikvm(320): Wrote stack traces to '/data/anr/traces.txt'
11-27 10:41:41.968: D/dalvikvm(248): GC_EXPLICIT freed 952K, 49% free 6943K/13447K, external 3286K/4888K, paused 78ms
11-27 10:41:42.518: E/ActivityManager(248): ANR in org.cocos2dx.Saburbia_android (org.cocos2dx.Saburbia_android/.Saburbia_android)
11-27 10:41:42.518: E/ActivityManager(248): Reason: keyDispatchingTimedOut
11-27 10:41:42.518: E/ActivityManager(248): Load: 7.93 / 7.92 / 7.79
11-27 10:41:42.518: E/ActivityManager(248): CPU usage from 27270ms to 0ms ago:
11-27 10:41:42.518: E/ActivityManager(248): 99% 4417/org.cocos2dx.Saburbia_android: 99% user + 0% kernel / faults: 2 minor
11-27 10:41:42.518: E/ActivityManager(248): 0% 3877/com.google.android.apps.maps: 0% user + 0% kernel / faults: 418 minor
11-27 10:41:42.518: E/ActivityManager(248): 0% 3957/com.svox.pico: 0% user + 0% kernel / faults: 678 minor
11-27 10:41:42.518: E/ActivityManager(248): 0% 248/system_server: 0% user + 0% kernel / faults: 8 minor
11-27 10:41:42.518: E/ActivityManager(248): 0% 1679/com.sonyericsson.customization: 0% user + 0% kernel / faults: 283 minor
11-27 10:41:42.518: E/ActivityManager(248): 0% 3647/com.sonyericsson.devicemonitor: 0% user + 0% kernel / faults: 179 minor
11-27 10:41:42.518: E/ActivityManager(248): 0% 121/rild: 0% user + 0% kernel / faults: 1 minor
11-27 10:41:42.518: E/ActivityManager(248): 0% 320/com.android.systemui: 0% user + 0% kernel / faults: 3 minor
11-27 10:41:42.518: E/ActivityManager(248): 0% 3731/com.sonyericsson.android.datamonitor: 0% user + 0% kernel / faults: 25 minor
11-27 10:41:42.518: E/ActivityManager(248): 100% TOTAL: 100% user + 0% kernel
11-27 10:41:42.518: E/ActivityManager(248): CPU usage from 461ms to 976ms later:
11-27 10:41:42.518: E/ActivityManager(248): 98% 4417/org.cocos2dx.Saburbia_android: 98% user + 0% kernel
11-27 10:41:42.518: E/ActivityManager(248): 96% 4418/HeapWorker: 96% user + 0% kernel
11-27 10:41:42.518: E/ActivityManager(248): 3.8% 248/system_server: 1.9% user + 1.9% kernel
11-27 10:41:42.518: E/ActivityManager(248): 1.9% 291/InputDispatcher: 0% user + 1.9% kernel
11-27 10:41:42.518: E/ActivityManager(248): 1.9% 442/er$SensorThread: 1.9% user + 0% kernel
11-27 10:41:42.518: E/ActivityManager(248): 100% TOTAL: 98% user + 1.9% kernel
11-27 10:41:42.518: I/InputDispatcher(248): Dropping event because the pointer is not down.

/////////////////////////////////////////////// ////////////////////////////////////////////

3) 3 つ目の理由は、logCat に多くのメモリ アドレスが表示されるため不明です。

/////////////////////////////////////////////// ////////////////////////////////////////////

Web 呼び出しに libcurl を使用し、スレッド化に pThread を使用しています。このゲームには、Facebook API for mobile (Hackbook) を使用して行われる Facebook 統合もあります。

Facebook のログイン後、ネイティブ コードは libcurl を使用してサーバーに接続し、pThread を使用して約 30 回の http 呼び出しを行うため、サーバーからの応答を取得するためにレンダリング スレッドが一時停止することはありません。この読み込みが進行している間も、logcat はこれら 3 つのログのいずれかを表示し、最初から読み込みを再開します。pThreads を使用して実行されるゲームにも http 要求が存在しますが、ゲームでもこの 3 つのログのいずれかが表示され、ランダムにクラッシュします。

iOS ビルドでも同じコードが正常に機能します。Android で正しく動作しない理由を見つけることができません。Android の移植に関して従わなければならないルールがあるかどうかを提案してください。

私は次のようにバージョンを使用しています。Android NDK : r8b Cocos2dx : 2.0.3 Eclipse : 3.6.2 Android バージョン : 2.2 システム : Ubuntu 10.0.4 デバイス : SonyEricsson NeoV (android2.3.4)、Samsung Galaxy SII (android4.0.3)。

前もって感謝します..

4

1 に答える 1

0

自動解放コードが正しく機能しない可能性があるため、iPhone でメモリの問題を見つけてみてください。詳細なエラーについては、NDK スタックも使用します。更新: リモートで ndk スタックを追跡する別の方法として、https: //www.crittercism.com を使用してください 。

于 2012-12-28T05:50:35.280 に答える