NDKでは、Java側から呼び出す関数の命名規則がとても面倒くさいです。Java_<パッケージ名>_<クラス名>_<関数名>(JNIEnv *env, jobject this, 以下関数の引数)というなんとも長ったらしい名前になります。
まあ、一々タイプしてもいいんです。実際ハイハイでは、全部手でタイプしましたよ。だけど、面倒くさいじゃないですか。
ということで自動的にこの関数名を生成してくれる便利コマンドがあるんです。それがjavahです。JDKに含まれています。
が、NDKの解説書やらあちこちのサイトに書かれているのとどうも呼出方が違うのです。もしかするとJDK6ではなくJDK7を使っているせいかもしれませんけれど、とにかく違うのです。違うので、今まで、使えていませんでした。だから、ハイハイは手で関数名を……。
では、正しい呼び方はどうなっているのでしょうか。備忘録と、万一、同じような問題でお困りの方がいらっしゃいましたら……何かのお役に立てば。
誤あるいはJDK6?) javah –classpath bin jp.wildtree.android.app.hhsadventure.ZGraphicDrawable
正あるいはJDK7?) javah –classpath "C:\Program Files (x86)\Android\android-sdk\platforms\android-8\android.jar";bin\classes jp.wildtree.android.app.hhsadventure.ZGraphicDrawable
と、まあ、こんな感じ。どうも、正しくはクラスパスは、bin/classesだし、あと、SDKのjarもちゃんとクラスパスに入れておいてあげないとだめなようです。勿論、android.jarは、ターゲットとしているAPIのバージョンにあっているものを指定しないとダメです。ハイハイは、現在ターゲットがAPI8なので、android-8のものを使っているというわけです。
コメント