Android NDKr6bでビルドしたC++のコード中でthrowで例外を投げると、いきなりアプリが落ちるという現象に遭遇した。
で、原因を先に言うと、Android 1.6&2.1環境向けに開発しているアプリだと、C++で例外を投げると落ちるという回答だった。
そのことの詳細はAndroid NDK R5 and support of C++ exception - Stack Overflowに書かれているまま。このページの中には
I have a similar problem using JNI. All exceptions thrown from a JNI method are causing a SIGILL error under Android 1.6 and 2.1. It's working fine under Android 2.2+
とあった。
一応Issue 20176 - android - SIGILL when throwing an exception under Android 1.6 and 2.1 - Android - An Open Handset Alliance Project - Google Project HostingというIssueも登録されている。
私が開発していたのはAndroid2.1向け。なのでAndroid 2.2向けにしたところ、正常に例外がthrow & catchできるようになった。NDK & C++で例外を使うのは、Android2.2以降の環境に限定しましょう、ということで。
Android NDKネイティブプログラミング
posted with amazlet at 11.09.26