android NDK应用程序中android.app.NativeActivity.onCreate()的异常(仅限android 6.0)
我最近更新了Android Studio和所有SDK库(2019年6月),突然,我的一些用户在应用程序启动时开始遇到这种崩溃 就我所见,这只发生在Android 6.0上 该应用程序是一个Android原生应用程序,使用NDK和android NDK应用程序中android.app.NativeActivity.onCreate()的异常(仅限android 6.0),android,exception,android-ndk,native,Android,Exception,Android Ndk,Native,我最近更新了Android Studio和所有SDK库(2019年6月),突然,我的一些用户在应用程序启动时开始遇到这种崩溃 就我所见,这只发生在Android 6.0上 该应用程序是一个Android原生应用程序,使用NDK和App\u glue基类,内置compiledSDK=26 其他人也经历过类似的事情吗 我没有安卓6.0手机。我试图创建一个虚拟设备,但无法在虚拟设备上复制该问题。 它可以完美地为成千上万的其他玩家(安卓7、8、9)工作 这是异常调用堆栈=================
App\u glue
基类,内置compiledSDK=26
其他人也经历过类似的事情吗
我没有安卓6.0手机。我试图创建一个虚拟设备,但无法在虚拟设备上复制该问题。
它可以完美地为成千上万的其他玩家(安卓7、8、9)工作
这是异常调用堆栈=================================
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity
(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3349)
at android.app.ActivityThread.access$1100 (ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1794)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:158)
at android.app.ActivityThread.main (ActivityThread.java:7224)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)
Caused by: java.lang.IllegalArgumentException:
at android.app.NativeActivity.onCreate (NativeActivity.java:170)
at android.app.Activity.performCreate (Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3206)
更新: 此问题仅在最新版本3.4.1中出现 当我回到3.2.1时,崩溃消失了。 Gradle似乎做了一些不同的事情,导致Android 6.0中的应用程序崩溃 如果您签入(下一个是3年零7个月前的,应该超过6.0),您会发现抛出一个
IllegalArgumentException
:
mNativeHandle = loadNativeCode(path, funcname, Looper.myQueue(),
getAbsolutePath(getFilesDir()), getAbsolutePath(getObbDir()),
getAbsolutePath(getExternalFilesDir(null)),
Build.VERSION.SDK_INT, getAssets(), nativeSavedState);
if (mNativeHandle == 0) {
throw new IllegalArgumentException("Unable to load native library: " + path);
}
这意味着无法找到您的本机库(或某些引用库),或者可能由于某种原因无法加载它
我将使用Cmd-shift-A->“Analyze APK…”检查是否所有本机库都存在所有体系结构。一个可能的问题是,出于某种原因,它被排除在某些体系结构之外,正因为如此,它在大多数设备上都能工作,但在某些设备上却失败了。此调试文本还不够,因为“IllegalArgumentException”发生在刚刚新建/创建的活动中,可能发生在其“on…()”方法中。请检查可能引发该异常的内容(可能是您抛出了该异常?或者可能是某个库?),这似乎是合理的解释。我将进行检查并报告任何结果。感谢您的回复,希望这有助于找到根本原因。该异常是从此行引发的:
String path=null;File libraryFile=新文件(ai.applicationInfo.nativeLibraryDir,System.mapLibraryName(libname));if(libraryFile.exists()){path=libraryFile.getPath();}if(path==null){抛出新的IllegalArgumentException(“找不到本机库:“+libname”);}
这只是检查文件是否存在。我仍然不明白为什么只有在某些Android 6.0中才会发生这种情况。该文件试图查找的是您的本机库。出现这种情况的原因有很多,其中一个是64位环境中的混合库体系结构。基本上,这意味着您必须拥有所有受支持体系结构中的所有库。例如,如果只编译库的32位arch,但包含另一个同时具有32位和64位的库,则加载可能会失败。请看:我发现了一个解决问题的方法,就是恢复到以前的gradle版本:classpath'com.android.tools.build:gradle:3.2.1'。错误的Gradle是classpath“com.android.tools.build:Gradle:3.4.1”。我不知道Gradle是否对Android 6.0崩溃负有全部责任,但恢复到以前的版本似乎可以避免这个问题。我将尝试与gradle团队就此进行沟通。谢谢你的帮助。