Android NDK開発環境構築から実行まで

作成するAndroidアプリは下のような流れのアプリ。

  1. JavaからCに数値を渡す
  2. Cは受け取った数値を加算してJavaに返す
  3. Javaは帰ってきた数値を画面に表示する

開発環境構築

Cygwinのサイトからsetup.exeをダウンロードしCygwinをインストールする。

※今回はCドライブ直下に配置しました。
C:\cygwin

Android DevelopersからAndroidNDK(Windows版)をダウンロードしCygwinの/home/(user)/に展開する。(今回使用したのはandroid-ndk-r5b-windows.zip)

C:\cygwin\home\(user)\android-ndk-r5b

Eclipseを起動し新しいAndroidプロジェクトを作成する。

Project name
TestNDK
Build Target
Android 2.1-update1 API 7
Application name
TestNDK
Package name
com.example.testndk
Create Activity
MainActivity
Min SDK Version
7

作成したプロジェクトの直下(srcと同じ階層)にjniディレクトリを作成し、その中にAndroid.mkとcalc.cの2つのファイルを作成する。

Android.mkには以下を記述する。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := mcalc
LOCAL_SRC_FILES := calc.c

include $(BUILD_SHARED_LIBRARY)
			

calc.cには以下を記述する。

#include <jni.h>
jint Java_com_example_testndk_MainActivity_add(
			JNIEnv* env, jobject thiz, jint a, jint b){
	return a + b;
}
			

javaから呼び出すためにMainActivity.javaには以下を記述する。

package com.example.testndk;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
	
	static {
		System.loadLibrary("mcalc");
	}
	
	public native int add(int x, int y);
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		TextView tv = new TextView(this);
		tv.setText("add(5, 3)->" + add(5, 3));
		
		setContentView(tv);
	}
}
			

作成したプロジェクトを/cygwin/home/(user)/にコピーする。

Cygwinを立ち上げコピーしたプロジェクトに移動し、ndk-buildを実行するとビルドが始まる。

cd /home/(user)/TestNDK/

/home/(user)/android-ndk-r5b/ndk-build
		

コピーしたプロジェクト内にlibsが作成されているので、それをEclipse側の同プロジェクトにコピーする。

Eclipseのメニュープロジェクトからクリーンプロジェクトを行う。

後はプロジェクトを実行すると画面にadd(5, 3)->8が表示される。

add(5, 3)->8