まずは準備から。
今回使用した開発環境は、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 件のコメント:
コメントを投稿