Android NDK错误-致命信号11(SIGSEGV)Android Studio 3.1.3

时间:2018-08-09 09:14:15

标签: android android-studio android-ndk

我将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
lib的

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构建系统?

2 个答案:

答案 0 :(得分:0)

  

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:中止。停止。   :buildNative失败

     

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

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

  

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

您不必。但是,建议,而不是使用ndk-build来使用 CMake

答案 1 :(得分:0)

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