Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
72
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

Android NDKを触ってみる

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

参照

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
72
Help us understand the problem. What are the problem?