2017-01-26 2 views
1

私は自分のアプリケーションを殺す特定のデバイスにsigdevを投げているndkコードライブラリを持つライブラリを持っています。このsigdevを捕まえてJava例外をスローすることは可能ですか?キャッチは、例外をスローしているライブラリを変更することなく行う必要があります。そのようNDK SIGABRTをJavaコードからndkコードにアクセスすることなくキャッチ

例外が見えます:

01-26 09:09:38.610 19393-19869/com.foo.bar A/libc: /Volumes/Android/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libc++abi/libcxxabi/src/abort_message.cpp:74: void abort_message(const char *, ...): assertion "terminating with uncaught exception of type char const*" failed 
01-26 09:09:38.610 19393-19869/com.foo.bar A/libc: Fatal signal 6 (SIGABRT) at 0x00004bc1 (code=-6), thread 19869 (Thread-9201) 

SO上のどこかに尋ねた同様の質問がありますが、しかし、これらのケースで、彼らはNDKとJava sourcの両方を制御するようだと、トリガーにNDKコードを使用しますJavaの例外です。私の状況では、ndkコードを制御することはできません。クローズされたソースライブラリなので、Javaコードを使用して完全に処理する必要があります。

答えて

1

Javaでネイティブ例外をキャッチすることはできませんが、C++からキャッチしてラッパーライブラリ経由でJava例外にすることができます。元のライブラリではなく、Javaからラッパーを呼び出して、ラッパー・ライブラリーで作業を委任して例外を処理させます。

共有ライブラリの境界を越えて例外をキャッチするには、両方のライブラリがRTTI、例外を使用して構築され、同じSTLを使用している必要があります。

関連する問題