執筆時点の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