Androidで画像処理をしたかったので、まずNDKを導入したら躓いたのでメモ
追記:2015-06-09
こんな長々と作業しなくても、現在の環境だとbuild.gradleに手を加えるだけでもっと簡単にできます。
記事書きました
導入する際に少し手間取ったのでメモ
環境:
・Windows 7 Pro 64bit
・Android Studio 0.8.14
・AndroidNDK Release 10 (Windows 64-bit)
※ Android ndk を使っていますがコンパイルは手動で行っています。
コンパイル時に make.exe “No rule to make target” が出て出来なかったためです…。
環境変数のPATHにNDKの場所を設定してください (ndk-build.cmd までのパス)
1. とりあえずプロジェクトを作ります (作ってある方は飛ばしてください)
Company Domain と Application name は各自決めてください。
Minimum SDK も各自決めてください
私は 「API 15: Android 4.0.3 (IceCreamSandwich)」 を選びました
デフォルトのActivityセットは「Blank Activity」を選びました
そのままFinishを押して作成
ここから本題です
2. プロジェクトにNDKのパスを設定する
プロジェクトルートあたりにある local.properties を開く
sdk.dir= (SDKのパス) の下に
ndk.dir= (NDKのパス)
を記述します
3. JNIのフォルダを作成します
プロジェクトの app を右クリックして JNIフォルダを作成します。
何か聞かれますがそのままFinishすると appの中に 作成されています。
※少し表記が違う場合がありますが appの上の[Android ▼] で切り替え可能
4. 必要なファイルを作成する
jni を右クリックし New->File を押し Android.mk という名前で作成します。
何か聞かれますが、とりあえずそのままでOKです。
空の Android.mk が作成され開かれたら 中に記述をしていきます
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SRC_FILES := hello.c include $(BUILD_SHARED_LIBRARY)
jniフォルダの中に、LOCAL_SRC_FILES と同じ名前のファイルを作成します
作られたファイル (今回はhello.c)の中に記述をしていきます
#include <string.h> #include <jni.h> jstring Java_info_nukoneko_test_hoge_MainActivity_helloWorld(JNIEnv* env, jobject javaThis){ return (*env)->NewStringUTF(env, "Hello World!."); }
・戻り値の型 jstring
JavaのString型で返したいときは jstring を指定する
たとえばintなら jint
・関数名 Java_info_nukoneko_test_hoge_MainActivity_helloWorld
長ったらしいですが、それぞれ必要な記述です
・Java
必ずつけます java_ じゃ駄目です..
・info_nukoneko_test_hoge
この関数を呼び出すActivityのパッケージ名です
package info.nukoneko.test.hoge;
の . を _ に変えたものですね
・MainActivity
この関数を呼び出すActivityの名前です
・helloWorld
Java側で呼ぶときの関数名です
例えば、
戻り値の型 int
パッケージ名 com.aaa
Activity名 CalcActivity
関数名 sum
なら
jint Java_com_aaa_CalcActivity_sum(JNIEnv* env, jobject javaThis, …
になるでしょう
引数の JNIEnv* env, jobject javaThis
は必ず必要な記述です。
この関数自体で引数が必要な場合は
..(JNIEnv* env, jobject javaThis, jstring hoge, jint huga)
などと続きます。
長くなってきたので 2に続きます