在我们基于cocos2d-x游戏引擎、大部分代码由C++编写的Android游戏应用程序中,自从Android 11以后,我们遇到了一个非常奇怪且关键的问题:
当本地库在onLoadNativeLibraries
中被加载时,现在突然需要60秒以上的时间。在Android 11之前,一切都正常,加载只需要0.2-3秒。现在在启动游戏时,你会看到一个持续60秒以上的灰色屏幕。
我们已经发现,在这60秒停顿结束后,JNI_OnLoad
被直接调用。
下面是onLoadNativeLibraries
函数的代码:
protected void onLoadNativeLibraries()
{
try
{
ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String libName = bundle.getString("android.app.lib_name");
System.loadLibrary(libName); // line of 60 seconds stall
}
catch (Exception e)
{
e.printStackTrace();
}
}
我们已经尝试了时间分析,但没有取得任何成功。它只是显示这个函数花费了很多时间。同时,通过调试暂停也没有提供任何进一步的线索。本地调试器在C++代码方面不显示任何内容。
有谁知道为什么会发生这种情况,或者我们可以尝试什么来找出原因?任何帮助都将不胜感激 :)
android:extractNativeLibs
?你使用的是哪个 Android Gradle 插件版本进行构建的?发布模式和调试模式下的加载时间是否相同? - Michaelbuild.gradle
文件中指定为依赖项的那个插件。它应该有一个以3或4开头的版本号。 - Michaelclasspath 'com.android.tools.build:gradle:3.6.1'
。 是的,这总是发生。百分之百的时间。 - keyboard