【问题标题】:Android NDK error - Fatal signal 11 (SIGSEGV) Android Studio 3.1.3Android NDK 错误 - 致命信号 11 (SIGSEGV) Android Studio 3.1.3
【发布时间】:2019-01-16 16:33:21
【问题描述】:

我将 Android Studio 升级到 3.1.3 , 我还将 ndk 从 15 升级到 17 修订版

我从下面更改了Application.mk中的以下内容

APP_ABI := armeabi
APP_PLATFORM := android-17

APP_ABI := armeabi-v7a
APP_PLATFORM := android-17

但现在我开始收到以下错误:

  --------- beginning of crash
08-09 14:16:01.783 17582-17582/com.my.app A/libc: Fatal signal 11 (SIGSEGV), code 2, fault addr 0x9eed9b60 in tid 17582 (.my.app)
08-09 14:16:01.848 17602-17602/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-09 14:16:01.849 17602-17602/? A/DEBUG: Build fingerprint: 'motorola/potter_n/potter_n:7.0/NPN25.137-67-5/6:user/release-keys'
    Revision: 'p3b0'
    ABI: 'arm'
    pid: 17582, tid: 17582, name: .my.app  >>> com.my.app <<<
    signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x9eed9b60
        r0 00000000  r1 00001000  r2 00000003  r3 00000003
        r4 00001000  r5 00000005  r6 9eed9000  r7 9eed9a28
        r8 a87f6050  r9 be997688  sl a5fb2000  fp be9974e8
        ip 9eed9a28  sp be9974a8  lr 9eed9b60  pc 9eed9b60  cpsr 000f0010
08-09 14:16:01.850 17602-17602/? A/DEBUG: backtrace:
        #00 pc 00000b60  /data/app/com.my.app-1/lib/arm/libmyApp.so (offset 0x5000)

可能的问题是什么。我的应用程序使用单独构建的本机库。 NDK 构建是否已停止,仅支持 CMake 构建?

******更新********************************************** ************

编译时使用的本机库出现以下错误

Configuration on demand is an incubating feature.
Incremental java compilation is an incubating feature.
:buildNative
Android NDK: The armeabi ABI is no longer supported. Use armeabi-v7a.    
Android NDK: NDK Application 'local' targets unknown ABI(s): armeabi    
Android NDK: Please fix the APP_ABI definition in <location to JNI library sources>/jni/Application.mk    
make: Entering directory `<location to JNI library sources>/jni'
make: Leaving directory `<location to JNI library sources>/jni'
C:<sdk-location>/sdk/ndk-bundle/build//../build/core/setup-app.mk:79: *** Android NDK: Aborting    .  Stop.
:buildNative FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':buildNative'.
> Process 'command 'C:<sdk-location>\AppData\Local\Android\Sdk\ndk-bundle\ndk-build.cmd'' finished with non-zero exit value 2

build.gradle 的库是 ;

android {
     compileSdkVersion 25
     buildToolsVersion "25.0.0"

     defaultConfig {
         minSdkVersion 18
         targetSdkVersion 21
         versionName  "2"

         ndk {
             moduleName "jniLibrary"
         }
    }
}     

Application.mk 如下:

APP_ABI := armeabi
APP_PLATFORM := android-18

我必须将我的本机代码导入 CMake 构建系统吗?

【问题讨论】:

  • 在你更新 ndk 和 android studio 之前它工作了吗?
  • 是的。 ndk-bundle 文件夹中 source.properties 中的版本如下: Pkg.Desc = Android NDK Pkg.Revision = 17.1.4828580
  • 正如构建错误所说,armeabi 不再是受支持的 ABI。您可以为armeabi-v7aarm64-v8ax86 和/或x86_64 构建本机库。
  • 至于为什么会发生崩溃,我们显然不能根据现有的信息说。您必须尝试调试您的库,例如首先分析你得到的堆栈跟踪。

标签: android android-studio android-ndk


【解决方案1】:

APP_PLATFORM := android-17

此变量APP_PLATFORM 包含您想要支持的最低 Android 平台版本,但它不是您用于构建共享库的 NDK 版本。

可能的问题是什么。我的应用程序使用单独构建的本机库。 NDK 构建是否已停止,仅支持 CMake 构建?

从错误日志中,

08-09 14:16:01.783 17582-17582/com.my.app A/libc:致命信号 11 (SIGSEGV),代码 2,tid 17582 (.my.app) 中的故障地址 0x9eed9b60

由于访问无效地址,您的应用程序在您的 libc 库中崩溃。例如空指针异常。您可以在任何引用 libc 函数的地方调查您的代码,例如strlenstrcpymemcpy

Android NDK:不再支持 armeabi ABI。使用 armeabi-v7a。
Android NDK:NDK 应用程序“本地”针对未知 ABI:armeabi
Android NDK:请修复 /jni/Application.mk 中的 APP_ABI 定义
make: 进入目录<location to JNI library sources>/jni' make: Leaving directory/jni' C:/sdk/ndk-bundle/build//../build/core/setup-app.mk:79: *** Android NDK: Aborting .停止。 :buildNative 失败

FAILURE:构建失败并出现异常。

armeabi 在 r16 中已弃用并在 r17 中删除,因此您需要使用旧版本的 NDK,例如ndk-16b 或更早版本 (https://developer.android.com/ndk/downloads/older_releases),用于构建 armeabi 共享库。

我必须将我的本机代码导入 CMake 构建系统吗?

您不必这样做。但推荐使用 CMake 代替 ndk-build。

【讨论】:

    【解决方案2】:

    感谢 cmets。 我找到了原因。我正在加密 .so 形成的路径,我给 .so 的路径来自 armeabi 文件夹。我已经将 applicatin.mk 中的 armeabi 替换为 armeabi-v7a,但没有将 build,gradle 中的文件夹名称替换为 armeabi-v7a。发生 SIGSEGV 可能有多种原因,这是其中之一,因为应用程序正在链接旧的 armeabi 库而不是 armeabi-v7a

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多