System.loadLibrary 卡住,永远不会 returns

System.loadLibrary get stuck and never returns

我们的游戏在 Android 下以 API 级别 15(或 14,尚未测试以前的版本)加载我们的主库时停止。 API 16 级及以上的设备不会发生这种情况。

我们使用的是 NDK,所以我们的 Main.java 在末尾包含以下几行:

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

仅此而已。根据之前的日志,fmod、fmodstudio 和 AmazonGamesJni 库加载得很好。

显然 libMain.so 的加载无论出于何种原因都会卡住。我们正在根据 c++_static(使用 Application.mk 文件中的 APP_STL 值)编译我们的库。我们也在使用 Proguard 和 multidex。

以下是我们尝试解决问题但失败的方法:

我们可以做些什么来追踪这个问题?

感谢您的帮助

SO 参考:

我们发现问题出自本机 OpenGL 调用,该调用出现死锁。

此处的要点是连接您的本机 gdb 调试器并中断本机代码中的某处以了解发生了什么。