Android NDKを触ってみる

  • 62
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Android NDKとは?

  • Android Native Development Kitの略称である。
  • Androidアプリケーションの一部または全部をC/C++言語で開発するためのキットです。

環境構築

  • 前提
    • eclipse上に、Android開発環境構築済み(英語版)
  • 構築手順
    • Android NDKのダウンロード
    • インストーラは、存在していない。任意の場所に解凍するだけ
    • eclipseを起動して、menu Window → Preferences → Android → NDK → “NDK Location” にNDKのパスを設定する
    • ・ 例: Path/to/android-ndk-r9d
    • 環境変数の PATH にも NDK のフォルダを追加する

hello world NDKを作成

プロジェクト作成

hellondk_create_project.png
hellondk_create_project_over.png

Native Support設定

  • プロジェクト・エクスプローラーのプロジェクト名の上でマウスを右クリックし、「Android Tools」のサブメニューから「Add Native Support」を選択する
  • Library Nameのネームを修正するとか、そのまま保留するとか
  • プロジェクト・エクスプローラーの下に、jniフォルダが出て、helloWorldNDK.cppとAndroid.mkのファイルが2つある
  • プロジェクト作成するときに、自動的に生成されたMainActivity.javaを修正する

public class MainActivity extends Activity {

    TextView text1;

    static {
        System.loadLibrary("helloWorldNDK");
    }

    public native String msgFromNDK();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        text1 = (TextView)findViewById(R.id.textView1);
        text1.setText(msgFromNDK());

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }

...省略...

eclipseで、C/C++ヘッダーファイルを作成

  • eclipseのツールバーに、「External Tools」→ 「External Tools Configurations」を選択する
  • 左上に、新規作成ボタンをクリックして、以下のように「NDK create」を作成する
  • Externa_tools_new.png
  • MainActivity.javaソースファイルを開いてテキストエディターがアクティブの状態で、「NDK create」を実行する
  • 「com_example_helloworldndk_MainActivity.h」が、jni下に、作成された

C++のソースファイル

#include <jni.h>
#include <assert.h>
#include <com_example_helloworldndk_MainActivity.h>

JNIEXPORT jstring JNICALL Java_com_example_helloworldndk_MainActivity_msgFromNDK
(JNIEnv *env, jobject thiz) {
    jstring jstr = env->NewStringUTF("hello world NDK!");
    assert(jstr);
    return jstr;
}

実行結果

hellondk_result.png

参照