Happy My Life

日常とか技術とか

Android NDKでC++の例外を投げるとアプリが落ちる

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ネイティブプログラミング
出村 成和
秀和システム
売り上げランキング: 24507