【Android】【NDK】JNIのパッケージ名、クラス名に_(アンダースコア)がある場合
JNIの関数名は以下の命名規約があります。
関数名規約
"
_パッケージ名_クラス名_メソッド名"
それぞれを_(アンダースコア)でつなぐわけですが、
そもそもパッケージ名、クラス名に_(アンダースコア)があったらどうなるんだろう?
ということで試してみました。
Java側
パッケージ名:my.kotatsu.ndk_practice
クラス名:MainActivity
C側
関数名:Java_my_kotatsu_ndk_practice_MainActivity_stringFromJNI()
予想通り UnsatisfiedLinkError をくらいました...
解決方法がないものかなーと探しみると…あった!
つなぎの _ じゃない場合は _1でエスケープできるようです。
先ほどの例でいくと、
Java_my_kotatsu_ndk_1practice_MainActivity_stringFromJNI()
とすればOKです。
じゃあパッケージ名に _1 があったら!!?
パッケージ名:my.kotatsu.ndk_practice_1
関数名:Java_my_kotatsu_ndk_1practice_11_MainActivity_stringFromJNI
うん。これで動きますね。
なかなかこの情報に辿り着くのに苦労(なんて検索すればいいのかわからない)
したので、より多くの人が解決できるようにSEO対策しときます↓
アンスコ、アンダーライン、アンダーバー
参考HP
http://qarc.info/qa/show-8916-161.html