まずは準備から。
今回使用した開発環境は、Windows7 64bit、JDK1.7.0、ADT(v22.3.0-887826)です。Android SDKのAPIレベルは、最新版の19を使用しました。
コマンドプロンプトからjavahコマンドを実行できるように、あらかじめJDKへのパスは設定しておいてください。パスの設定はこちらが参考になります。
http://www.javadrive.jp/install/jdk/index4.html
まずは、NDKのダウンロードサイトから、NDKのWindows 64bit版をダウンロードします。
http://developer.android.com/tools/sdk/ndk/index.html
android-ndk-r9c-windows-x86_64.zipというファイルです。
ファイルをダウンロードして、解凍したら、C:\ndkというディレクトリを作って、そこに入れてください。場所は任意ですが、ここではわかりやすいように、実際に僕が利用している環境を記します。
C:\ndk\android-ndk-r9c-windows-x86_64\android-ndk-r9c
という場所にNDKが入りました。
次に、ADTを起動して、[Window -Preference]の[Android - NDK]という設定画面を開いてください。
NDK Locationに
C:\ndk\android-ndk-r9c-windows-x86_64\android-ndk-r9c
と入力して、OKを押して、設定画面を終了してください。
これで設定は完了です。
続いて、実際のAndroidプロジェクトでNDKを使用する手順を説明します。まずは通常通り、Android Application Projectを新規作成してください。
ここでは、JNITestという名前でプロジェクトを作成しました。プロジェクトのデータは
C:\ws_android\ws_test\JNITest
に作成されました。
自動生成されたMainActivityを編集します。
res/layout/activity_mail.xmlを以下のように編集してください。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>内容はほぼデフォルトのままで、TextViewにlabelというIDを付けただけです。
MainActivity.javaは以下のように編集してください。
package com.fumobox.jnitest; import android.os.Bundle; import android.app.Activity; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView label = (TextView)findViewById(R.id.label); Test test = new Test(); label.setText("Result: " + test.test01(9)); } }次に、プロジェクトにTest.javaというクラスを作成して、中身を以下のように記述してください。
package com.fumobox.jnitest; public class Test { static { System.loadLibrary("JNITest"); } public native int test01(int value); }これがNativeコード呼び出し用のクラスになります。次はNativeコードの作成です。
C:\ws_android\ws_test\JNITestの下に、jniというディレクトリを作成してください。ここにNativeコードとビルド用のファイルが作成されます。
ADT内で、ProjectExplorer内にある、JNITestプロジェクトを右クリックして、Android Tools - Add Native Support ...を押すと、下のような画面が表示されるので、そのままFinishを押してください。
成功すると、jniディレクトリに、Android.mkとJNITest.cppが追加されます。
スタードメニューのプログラムのファイルと検索にcmdと入力すると、cmd.exeが見つかるはずです。実行するとコマンドプロンプトが表示されます。
コマンドプロンプトで、cd C:\ws_android\ws_test\JNITestと入力して、プロジェクトのディレクトリに移動してください。
そこで、以下のコマンドを実行します。
javah -o jni/JNITest.hpp -classpath bin/classes com.fumobox.jnitest.Test問題なければ、何も表示されません。成功すると、jniディレクトリ内にJNITest.hppというファイルが追加されます。ADTから見ると、JNITest.hppにエラーがあるように見えますが、ここでADTを再起動すると、エラー表示は消えます。コンソールにCannot run program "cygpath"というメッセージが表示されますが、これも無視しても問題ないようです。
JNITest.cppは下のように編集してください。関数名はJNITest.hppからコピーしました。
#include <jni.h> #include <JNITest.hpp> JNIEXPORT jint JNICALL Java_com_fumobox_jnitest_Test_test01(JNIEnv *env, jobject o, jint value) { return value * 7; }これで作業は完了です。実機かエミューレーターでアプリを起動してください。
Result: 63と表示されていたら、実行は成功です。
参考になったサイトはこちら
http://digital4johnny.blog.fc2.com/blog-entry-109.html
試してみて、もしうまくいったら、こちらにコメントいただけるとうれしなっしー
20140209
作業順が間違っていたので修正しました。
0 件のコメント:
コメントを投稿