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++_static
(Application.mk
ファイルのAPP_STL
という値)とコンパイルしています。また、Proguardとmultidexも使用しています。ここで
は、私たちが問題を解決しようとしたものですが、失敗しました:
- は
c++_shared
、gnustl_static
またはgnustl_shared
のいずれかに対してコンパイル。 - 私たちがlibMainをリンクしている静的ライブラリの一部を無効にします。非常に長い操作であるため、ほんのわずかなものを無効にしました。
- 非アクティブ化ProGuardの
我々は問題を追跡するために何ができますか?あなたの助け
SO参照用
ありがとう:
ネイティブのデバッガを接続しようとしましたか、またはSIGABRT( 'kill -6 pid; sleep 1; kill -6 pid')でプロセスを強制終了して、logcatのネイティブスタックダンプを取得しましたか?それはどこに止まっていたか知ることは非常に便利です。 – fadden
ちょっと退屈、あなたの答えに感謝します。私たちはネイティブデバッガでゲームを実行しましたが、OpenGL | ESの初期化機能のためにこのデバッガが止まったことに気付きました。ご協力いただきありがとうございます! – Kyone