Android NDKを使う前に知っておいた方が良いメモ
執筆時点のAndroid NDK(r19)について。
知って措いた方良い事
JNIのCバインディングとC++バインディングはまったく別物
APIの名前は同じ挙句にC++版でも名前空間つこうて無かったりで、ありがちなC/C++対応と言いつつ実はCっていうパターンかと思いきやC++バインディングでは同名のAPIでパラメーターの数が違ったり、ポインターのポインターがポインターと参照になっていてAPIを使ったユーザー定義部分のコードをCとC++では変える必要があるなど設計がおかしい。
JNIは蛇殺し
JNIのJAVAとCの名前空間の結合ルールが馬鹿なのでユーザー定義でsnake_caseのシンボルを使うと死ぬ。しかもAndroidで実行してランタイムエラーが出現するまで問題は顕在化しない。
この問題に対しsnakerの私は_の代わりに大文字の'X'を使う事にせざるを得なかった。例えば`jni_is_bakuhatsu`は`jniXisXbakuhatsu`として代替した。悪夢的である。