AndroidNDK を使ってHelloWorldを表示するまで 1

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. とりあえずプロジェクトを作ります (作ってある方は飛ばしてください)
 
a1

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フォルダを作成します。

a2

何か聞かれますがそのまま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に続きます

Atsumi3

したいことをします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください