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

时间:2016-05-05 10:23:49

标签: 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;
    } 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编译库(使用APP_STL文件中的Application.mk值。我们也在使用Proguard和multidex。

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

  • 针对c++_sharedgnustl_staticgnustl_shared;
  • 进行编译
  • 停用我们链接libMain的一些静态库。由于这是一个非常漫长的操作,我们确实只停用了少数几个;
  • 停用proguard

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

感谢您的帮助

SO参考:

1 个答案:

答案 0 :(得分:0)

我们发现问题来自于一个僵局的原生OpenGL调用。

这里的内容是连接您的本机gdb调试器并在您的本机代码中的某个位置断开以了解正在进行的操作。