Android:从c ++ lib

时间:2016-05-17 17:29:04

标签: java android c++ android-ndk java-native-interface

在我的android项目中,我使用了我已经实现的c ++库。我的lib有一些崩溃,但我只能检索引发的异常的堆栈跟踪,但不能检索SIGSEGV之类的信号(堆栈跟踪为空)。

要检索堆栈跟踪,我已使用此代码: https://stackoverflow.com/a/28858941/5120292

处理信号:

struct sigaction psa, oldPsa;

void Utils::registerSignalHandlers() {

    psa.sa_sigaction = Utils::handleSignal;
    psa.sa_flags = SA_SIGINFO;
    sigemptyset( &psa.sa_mask );

    sigaction(SIGSEGV, &psa, &oldPsa);
}

void Utils::handleSignal(int signalNumber, siginfo_t *sigInfo, void *context) {
    std::string message = get_stacktrace();
    throw std::runtime_error(message); // this will create a java.lang.RuntimeException
}

顺便说一句,我无法修改JNI桥,因为它们是由工具自动生成的。

我的项目有这个架构:

  • android_project
    • ...
    • main_module
    • C ++ _ library_module
      • ...
      • JNI
        • armeabi-V7A
          • C ++ _ lib.so

我看到有一个名为ndk-stack的工具,但我无法理解如何使它与我的项目一起工作。此外,最好在程序中检索日志,而不是使用外部工具..任何帮助将不胜感激!

0 个答案:

没有答案