2016-05-05 4 views
1

APIレベル15(または14、以前のバージョンはテストしていません)のAndroidでメインライブラリを読み込むと、ゲームが停止します。 APIレベル16以上のデバイスでは発生しません。次のログとの打ち上げでSystem.loadLibraryがスタックして返さない

static { 
    boolean bFMODReady = false; 
    try { 
     System.loadLibrary("fmod"); 
     System.loadLibrary("fmodstudio"); 
     bFMODReady = true; 
    } catch (UnsatisfiedLinkError e) { 
     Log.e(TAG, "Unable to load FMOD (" + e.getLocalizedMessage() + ")"); 
    } 

    if (BuildConfig.AMAZON) { 
     System.loadLibrary("AmazonGamesJni"); 
    } 

    System.loadLibrary("Main"); 

    if (!bFMODReady) { 
     Log.e(TAG, "FMOD is not ready -> disable audio"); 
     disableAudio(); 
    } 
} 

ゲームの屋台:

05-05 00:30:39.017 598-598/com.snip.snap D/dalvikvm: Trying to load lib /mnt/asec/com.snip.snap-1/lib/libMain.so 0x4175c7e8 

何よりも私たちは、NDKを使用している

ので、私たちMain.javaは、その末尾に次の行が含まれています。以前のログによると、fmod、fmodstudio、AmazonGamesJniのライブラリはうまくロードされています。

明らかに、libMain.soのロードは何らかの理由で止まってしまいます。私たちのライブラリをc++_staticApplication.mkファイルのAPP_STLという値)とコンパイルしています。また、Proguardとmultidexも使用しています。ここで

は、私たちが問題を解決しようとしたものですが、失敗しました:

  • c++_sharedgnustl_staticまたはgnustl_sharedのいずれかに対してコンパイル。
  • 私たちがlibMainをリンクしている静的ライブラリの一部を無効にします。非常に長い操作であるため、ほんのわずかなものを無効にしました。
  • 非アクティブ化ProGuardの

我々は問題を追跡するために何ができますか?あなたの助け

SO参照用

ありがとう:

+0

ネイティブのデバッガを接続しようとしましたか、またはSIGABRT( 'kill -6 pid; sleep 1; kill -6 pid')でプロセスを強制終了して、logcatのネイティブスタックダンプを取得しましたか?それはどこに止まっていたか知ることは非常に便利です。 – fadden

+0

ちょっと退屈、あなたの答えに感謝します。私たちはネイティブデバッガでゲームを実行しましたが、OpenGL | ESの初期化機能のためにこのデバッガが止まったことに気付きました。ご協力いただきありがとうございます! – Kyone

答えて

0

は、我々は問題がデッドロックされたネイティブのOpenGLの呼び出しから来たことを考え出しました。

ここでは、ネイティブコード内のどこかにブレークして、何が起きているのかを知るためにgdbデバッガを接続します。

関連する問題