Java System.loadLibrary被卡住,永远不会返回

Java System.loadLibrary被卡住,永远不会返回,java,android,c++,android-ndk,shared-libraries,Java,Android,C++,Android Ndk,Shared Libraries,我们的游戏在Android下加载API级别为15(或14,尚未测试以前的版本)的主库时暂停API级别为16及以上的设备上不会出现这种情况。 我们正在使用NDK,因此Main.java的末尾包含以下几行: static { boolean bFMODReady = false; try { System.loadLibrary("fmod"); System.loadLibrary("fmodstudio"); bFMODReady = true

我们的游戏在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++\u static
(使用
Application.mk
文件中的
APP\u STL
值)编译库。我们还使用Proguard和multidex

以下是我们试图解决但失败的问题:

  • 根据
    c++\u-shared
    gnustl\u-static
    gnustl\u-shared
    进行编译
  • 停用我们链接libMain所针对的一些静态库。由于这是一个非常长的操作,我们只停用了很少几个
  • 解除保护
我们能做些什么来追踪这个问题

谢谢你的帮助

因此,参考:


我们发现问题来自于死锁的本机OpenGL调用


这里的要点是连接本机gdb调试器并中断本机代码中的某个地方,以了解发生了什么。

我们发现问题来自本机OpenGL调用,该调用处于死锁状态


这里的要点是连接本机gdb调试器并中断本机代码中的某个地方,以了解发生了什么情况。

您是否尝试附加本机调试器,或使用SIGABRT(
kill-6pid;sleep 1;kill-6pid
)终止进程,以在logcat中获得本机堆栈转储?知道它卡在哪里会很有用。嘿,法登,谢谢你的回答。我们确实使用本机调试器运行了游戏,并且我们意识到由于OpenGL | ES初始化函数,它被卡住了。谢谢你的帮助!您是否尝试过附加本机调试器,或使用SIGABRT(
kill-6pid;sleep 1;kill-6pid
)终止进程,以在logcat中获取本机堆栈转储?知道它卡在哪里会很有用。嘿,法登,谢谢你的回答。我们确实使用本机调试器运行了游戏,并且我们意识到由于OpenGL | ES初始化函数,它被卡住了。谢谢你的帮助!