Android NDK应用程序中的android.app.NativeActivity.onCreate()引发的异常(仅适用于Android 6.0)

时间:2019-06-13 14:09:51

标签: android exception android-ndk native

我最近更新了Android Studio和所有SDK库(2019年6月),突然我的一些用户在应用程序启动时开始遇到此崩溃。

据我所知,它仅在Android 6.0上发生。

该应用程序是一个Android Native App,它使用NDK和app_glue基类,并内置于buildedSDK = 26中。

有人经历过类似的事情吗?

我没有Android 6.0手机。我试图创建虚拟设备,但是无法在虚拟设备上复制该问题。 它非常适合其他数千名玩家(Android 7、8、9)

这是Exception调用堆栈===============================

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)

更新: 此问题仅在最新的 Gradle版本:3.4.1 中出现 当我恢复为 3.2.1 时,崩溃消失了。 Gradle似乎采取了不同的措施,导致Android 6.0中的应用程序崩溃。

1 个答案:

答案 0 :(得分:1)

如果您在NativeActivity implementation in AOSP中检查this commit from 5 years ago(下一个是3年零7个月前,应该是6.0以上),则会发现line 170抛出了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->“分析APK ...”,以查看所有本机库是否都存在所有体系结构。一个可能的问题可能是,由于某些原因,它被排除在某些体系结构之外,因此可以在大多数设备上使用,但是在某些情况下会失败。

相关问题