android - Android NDK 应用程序中的 android.app.NativeActivity.onCreate() 异常(仅限 Android 6.0)
问题描述
我最近更新了 Android Studio 和所有 SDK 库(2019 年 6 月),突然我的一些用户在应用程序启动时开始遇到这种崩溃。
就我所见,它只发生在 Android 6.0 上。
该应用程序是一个 Android Native App,使用 NDK 和app_glue
基类,编译 SDK=26。
有没有其他人经历过类似的事情?
我没有 Android 6.0 手机。我尝试创建虚拟设备,但无法在虚拟设备上复制问题。它适用于数千名其他玩家(Android 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)
更新:这个问题只出现在最新的Gradle 版本中: 3.4.1 当我恢复到3.2.1时,崩溃消失了。Gradle 似乎做了一些不同的事情,导致 Android 6.0 中的应用程序崩溃。
解决方案
如果您在5 年前的此提交NativeActivity
中检查 AOSP中的实现(下一个是 3 年零 7 个月前,应该超过 6.0),您会发现第 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 -> "Analyze APK..." 检查是否所有本机库都存在所有架构。一个可能的问题是,由于某种原因,它被排除在某些架构之外,因此在大多数设备上都可以正常工作,但在某些情况下却失败了。
推荐阅读
- python - 从python中特定列的行中删除连续值
- swift - 如何在 Swift 中为 parentStack 中的 childStackview 提供动态宽度
- c - C改变sqlite prepare_stmt
- web - /?q=search/ 在 robots.txt 中是什么意思
- java - 在 Spring-WS 端点操作结果发送到客户端完成后,是否有可能调用某些代码?
- javascript - scrollIntoView 不跳到顶部
- xml - T-SQL XML 到表
- html - 无法更改字体大小
- javascript - 将 SVG 导出为 PDF,组/图层完好无损
- mysql - MySql Select Query隐藏列中的重复值