Developer's memo

開発メモ

【Android】【NDK】JNIのパッケージ名、クラス名に_(アンダースコア)がある場合

JNIの関数名は以下の命名規約があります。

 

関数名規約 

"Java_パッケージ名_クラス名_メソッド名"

 

それぞれを_(アンダースコア)でつなぐわけですが、

そもそもパッケージ名、クラス名に_(アンダースコア)があったらどうなるんだろう?

ということで試してみました。

 

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