とか書いたけど、改めて見直したら自分でもさっぱりなにをどうしたのか分からなかったので、
改めて適当なプロジェクトを作ってテストしてみた。
参考サイト
・Android NDKを使った開発環境の構築
空のプロジェクトを作る
まずは環境だけが整ったプロジェクトを作る。
- メニューからAndroidApplicationProjectを作成する。
- プロジェクトを右クリック。「Androidツール」から「Add Native Suport」を選択
- 任意の名前を付けて「完了」。
これで環境だけが整った空のプロジェクトが完成。
jniファイルとの連携用のクラスを作成する
参考サイトではMainActivityに直接書き込んでいるけど、後述のjavahを使ったときに怒られた。
可読性もろもろのためにもネイティブと連携するファイルは個別にするのがいいと思う。
/*---------------------------------------------------------------------------*/
public class HogeJNI {
statis {
System.loadLibrary("hoge");
}
public static native void fuga();
}
/*---------------------------------------------------------------------------*/
System.loadLibraryには呼び出すsoファイルの名前を指定する。
C/C++のファイルと同じ名前になると思う。
C/C++のヘッダファイルを作成する
自分で打つと失敗する可能性大なので、jdkのjavahコマンドを使う。
コマンドプロンプトでプロジェクトのルートフォルダに移動して、以下のコマンドを実行。
/*---------------------------------------------------------------------------*/
$ javah -o jni/hogejni.hpp -classpath bin/classes com.example.test.HogeJNI
/*---------------------------------------------------------------------------*/
-oに出力先、-classpathに参照するクラスパス。最後が対象クラス。
詳しいことは参考サイトを見よう。
これでファイルが作成された。しかし、手動でインポートしないといけないの?
リフレッシュしてもいつまで経っても表示されないんだけども。
C/C++のソースファイルを作成
javahコマンドで作成したヘッダファイルをインクルード&そのまま使える部分をコピーして
ソースファイルに書き込み。
そのままコピペすると変数名を忘れる。
少なくとも自分は忘れた。30分以上、それに気づかず無駄にした。
C/C++側のエラーは感知してくれないんかね?
あとは必要なところでネイティブメソッドを呼び出せば動くはず。
0 件のコメント:
コメントを投稿