【问题标题】:Android Studio:JNI DETECTED ERROR IN APPLICATION: native code passing in reference to invalid local reference: 0x200001Android Studio:应用程序中的 JNI 检测到错误:本机代码传入无效本地引用的引用:0x200001
【发布时间】:2015-05-30 15:37:08
【问题描述】:

我尝试将 ndk 集成到我的应用程序中。我正在使用 eclipse 并且很好,现在我切换到 android studio 并且我遇到了原生崩溃:

JNI DETECTED ERROR IN APPLICATION: native code passing in reference to invalid local reference: 0x200001

build.gradle

apply plugin: 'com.android.application'

 android {
   compileSdkVersion 19
   buildToolsVersion "22.0.1"

 defaultConfig {
    applicationId "com.example.app"
    minSdkVersion 17
    targetSdkVersion 19
    sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDir 'src/main/libs'
    }

 }

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
  }
}

dependencies {
  compile files('libs/FlurryAnalytics-5.3.0.jar')
  compile files('libs/jericho-html-3.3.jar')
  compile files('libs/smack.jar')
  compile 'com.android.support:support-v4:22.1.0'
  compile 'com.facebook.android:facebook-android-sdk:4.1.2'
  compile 'com.melnykov:floatingactionbutton:1.3.0'
  compile 'com.google.android.gms:play-services:7.3.0'
  compile 'com.android.support:appcompat-v7:22.1.0'
}

我已经从 android studio 生成了 so 文件,我已经从 eclipse 中复制了 so 文件并将其放在 libs 文件夹中。没有任何帮助。

这是我正在尝试集成的库 [vorbis][1]..

【问题讨论】:

  • 我只是简单地看了一下libvorbis的代码,所以我可能误解了它是如何工作的。但在我看来,如果readPCMDataFromEncoderDataFeed 获得零字节数据,它将删除对startEncodingjByteArrayBuffer 的本地引用,然后startEncoding 将在返回之前尝试删除相同的本地引用。
  • 根据 Ogg Vorbis 网站For Developers,错误报告者位于xiph.org
  • @Michael 那么相同的代码如何在 Eclipse 中正常工作?
  • 希望你能接受他的改变android-developers.blogspot.in/2011/11/…
  • @Michael 怎么处理。我不知道怎么写原生代码

标签: android android-studio gradle android-ndk java-native-interface


【解决方案1】:

我发现在调试原生应用程序时使用 tombstones 非常有帮助。

Android 下每次进程崩溃时,都会在/data/tombstones 目录下创建一个 Tombstone 文件。它包含有关崩溃的重要信息。

您可以阅读有关墓碑的更多信息here

在我的例子中,墓碑文件包含回溯,清楚地表明问题出在 DeleteLocalRef 函数上。我发现我不小心在同一个引用上调用了它两次。

backtrace:
    #00 pc 00038094  /system/lib/libc.so (tgkill+12)
    #01 pc 00014261  /system/lib/libc.so (pthread_kill+52)
    #02 pc 00014e7f  /system/lib/libc.so (raise+10)
    #03 pc 000116d5  /system/lib/libc.so (__libc_android_abort+36)
    #04 pc 0000fc1c  /system/lib/libc.so (abort+4)
    #05 pc 00214ded  /system/lib/libart.so (art::Runtime::Abort()+160)
    #06 pc 000a63d3  /system/lib/libart.so (art::LogMessage::~LogMessage()+1322)
    #07 pc 000afb71  /system/lib/libart.so (art::JniAbort(char const*, char const*)+1060)
    #08 pc 000b00cd  /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+60)
    #09 pc 000b2455  /system/lib/libart.so (_ZN3art11ScopedCheck5CheckEbPKcz.constprop.128+672)
    #10 pc 000b4fef  /system/lib/libart.so (art::CheckJNI::DeleteLocalRef(_JNIEnv*, _jobject*)+54)
    #11 pc 0007b110  /data/app/com.myapp/lib/arm/mynativelib.so (CMyNativeClass::Copy(_JNIEnv*, CMyNativeClass const&)+2812) 

【讨论】:

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