金子邦彦研究室プログラミングJavaScript による Web プログラミングWindows で Android NDK を使ってみる

Windows で Android NDK を使ってみる

このページでは,次のことを行う.

この Web ページでの設定

前準備

前準備として,下記のインストールが済んでいること.

  • Eclipse のインストール が終わっていること
  • Eclipse Android 開発ツールのインストール が終わっていること

    Android NDK のダウンロードとインストール

    1. Web ページを開く

      https://developer.android.com/sdk/ndk/index.html

    2. 必要な Andorid のバージョンを確認しておく

      [image]
    3. Windows 版を選ぶ

      クリックするとダウンロードが始まる。

      [image]
    4. ライセンス条項の確認

      熟読し、納得できる場合にのみ続行する.

      [image]
    5. ダウンロードしたファイルを、分かりやすい場所に保存

      [image]
    6. 分かりやすいディレクトリで、ダウンロードしたファイルを展開(解凍)

      [image]
    7. 解凍が終わったら、環境変数を設定する

      環境変数 PATH の設定

      C:\android-ndk-r10b」のように設定

      [image]

      環境変数 ANDROID_NDK_HOME の設定

      C:\android-ndk-r10b」のように設定

      [image]

    パスを通す

    1. Windowsのスタートメニューを開き,コントロールパネル→システムとセキュリティ→システム と辿る
    2. 左側のメニューに「システムの詳細設定」という項目があるのでそこを選択
    3. 「詳細設定タブ」の一番下「環境変数」を選択し,環境変数を変更するウィンドウ<を開く
    4. 下側のグループ「システム環境変数」のなかから「PATH」を探してダブルクリック

      パスを追記する

      ※すでに記入してある内容は削除しない

      ※変数と変数の間は「;」(半角セミコロン)で区切る

    5. 追記が完了したら「OK」を押してウィンドウを閉じる

    Android NDK に同封のサンプルプログラムのコンパイル

    1. コマンドプロンプトを開き、Hello.Jni サンプルプログラムのディレクトリに移動

      C:\android-ndk-r10b」は、実際のディレクトリに読み替えること.

      cd C:\android-ndk-r10b\samples\hello-jni
      

      [image]
    2. ndk-build コマンドの実行
      ndk-build
      

      [image]
    3. 「.so」ファイルができる.

      dir obj\local\armeabi-v7a
      

      [image]

    Eclipse の C/C++ 開発ツール (CDT) のインストール手順

    1. Eclipse の起動
    2. 「新規ソフトウェアのインストール」の開始

      ヘルプ (Help)」メニュー → 「新規ソフトウェアのインストール (Install New Software ...) 」 を選ぶ

      [image]
    3. 作業対象として「--すべての使用可能なサイト-- (--All Available Sites--)」を選ぶ

      [image]
    4. プログラミング言語」の展開

      いろいろなグループが表示される. 「プログラミング言語」の左横の三角形をクリックして展開

      [image]
    5. C/C++ 開発ツールの選択

      次を選択し,下の方にある「次へ」をクリック.

      • C/C++ 開発ツール (C/C++ Development Tools)
      • C/C++ 開発ツール SDK (C/C++ Development Tools SDK)
      • C/C++ Visual C++ サポート

      [image]

      [image]

      [image]
    6. インストール詳細の確認

      このままでよいので, 「次へ」をクリック.

      [image]
    7. ライセンス条項の確認

      [image]
    8. インストールが始まる

      [image]
    9. Eclipse の再起動

      [image]

    Eclipse の設定

    Eclipse で Android NDK に同封のサンプルプログラムを動かしてみる

    ここでは,インストールがうまくできたことの確認のため, さきほど、ビルドを済ませた hello-jni(Android NDK に同封のサンプルプログラム) のファイルをまるごと Eclipse のワークスペースに取り込んで実行する.

    1. Eclipse の起動
    2. ファイル (File)」 → 「新規 (New)」 → 「プロジェクト (Project)」 と操作する

      [image]
    3. 既存コードからの Android プロジェクト (Android Project from Existing Code) を選ぶ

      [image]
    4. ルートディレクトリ として「C:\android-ndk32-r10b\samples\hello-jni」を指定する.

      「プロジェクトをワークスペースへコピー (Copy projects into workspace)」にチェックし、「Finish」をクリックする

      ※ hello-jni は、先ほどコマンドプロンプトで ndk-build を実行して、ビルド済み

      [image]
    5. 実行してみる (エミュレータにデプロイ)

      プロジェクトを右クリックし, 「実行 (Run)」 → 「Android アプリケーション (Android Application)

      [image]

      しばらく待つと, エミュレータの画面に「Hello from JNI!」というメッセージが現れる.

      [image]

      コンソールに、エラーメッセージが出ていないことを確認する

      [image]

      次のようなエラーメッセージが出る場合には ndk-build からやり直す.

      [image]

    JNI プログラムの ビルドが Eclipse で行えるようにするための設定

    端末を開いて ndk-build コマンドを実行するのが面倒(Eclipse ndk-build コマンドの起動が行えるように設定したい)ので、次のように操作する.

    1. 先ほど使ったプロジェクト HelloJni を右クリックし,「Android ツール」を選び、 「ネイティブサポートの追加 (Add Native Support)」
    2. libhello-jni.so に設定
    3. プロジェクトを右クリックし、 「プロジェクトをクリーン」、「プロジェクトをビルド」と操作
    4. コンソールに ndk-build の実行結果が出るので確認する

      ※ コンソールにエラーメッセージが無いのに、エラーメッセージが出る場合がある.

      もともとサンプルプログラムを使っているので、エラーメッセージが出るはずが無い. なのに、エラーメッセージが出る.どうやら Eclipse の設定が甘い(が、どうしたらよいか分からない). エラーメッセージが出たせいで、実行ができないという Eclipse のおせっかい機能.

      このときは Eclipse を再起動するとうまくいく場合がある.

    5. Andorid の画面を確認する






    以下、書きかけ 以下、書きかけ 以下、書きかけ 以下、書きかけ 以下、書きかけ

    Eclipse での Android プロジェクト作成と実行

    1. Eclipse の起動
    2. Eclipse で,次のような Android プロジェクトを新規作成
      • プロジェクト名: Hello2
      • パッケージ名: hoge.hoge.com
      • アクティビティ: Hello2Activity
      1. ファイル (File)」 → 「新規 (New)」 → 「プロジェクト (Project)」 と操作する

        [image]
      2. Android プロジェクト (Android Project) を選ぶ

        [image]
      3. プロジェクト名を「Hello2」のように設定する.

        ワークスペース内に新規プロジェクトを作成」をチェックする.

      4. ビルド・ターゲットを設定する

        [image]

        バージョンを確認

      5. パッケージ名の設定

        パッケージ名は 「hoge.hoge.com」のように設定

    3. jni/Android.mk の作成

      Eclipse のプロジェクト・エクスプローラーで,新しいフォルダとして「jni」を作成し, 新しいファイルとし Android.mk を作成する.次のように編集する

      ※ 「jni」のところは何でもよいが、分かりやすい名前にしておくkと

      LOCAL_PATH := $(call my-dir)
      
      include $(CLEAR_VARS)
      
      LOCAL_MODULE    := hello
      LOCAL_SRC_FILES := hello.c
      
      include $(BUILD_SHARED_LIBRARY)
      
    4. jni/hello.c の作成

      Eclipse のプロジェクト・エクスプローラーで, 新しいファイルとして hello.c を作成する.hello.c を次のように編集する

      ※ ファイル名「hello.c」のところは何でもよいが、Android.mk で、そのファイル名を正しく設定しておくこと.

      関数名は、「Java_<パッケージ名>_<アクティビティ名>_<文字列>」のようになる

      #include<string.h>
      #include<jni.h>
      
      jstring
      Java_hoge_hoge_com_Hello2Activity_stringFromJNI( JNIEnv* env, jobject thiz )
      {
          return (*env)->NewStringUTF(env, "Hello, World!\n");
      }
      
    5. Hello2Activity.java の編集

      Android.mk で「hello.c」のように設定したので,「System.loadLibrary("hello");」のところは「hello」になる.

      package hoge.hoge.com;
      
      import android.app.Activity;
      import android.os.Bundle;
      import android.widget.TextView;
      
      public class Hello2Activity extends Activity {
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
              
              TextView  tv = new TextView(this);
              tv.setText( stringFromJNI() );
              setContentView(tv);
          }
          
          public native String  stringFromJNI();
          public native String  unimplementedStringFromJNI();
          static {
              System.loadLibrary("hello");
          }
      
      }
      
    6. プロパティーの設定

      プロジェクトを右クリックし,プロパティーを選ぶ.設定用のウインドウが現れるので,

      C/C++ ビルド (C/C++ Build)」の の ビルドコマンドを 「ndk-build」のように設定

      [image]
    7. インクルード・ディレクトリーの設定

      [image]
      ディレクトリーを 「/usr/lib/jvm/java-7-openjdk-amd64/include」のように設定。この設定は、ndk-build で、このディレクトリーを使うように設定しているのではなくて、Eclipse でのコード解析などでこのディレクトリーを使うという設定

      [image]
    8. 実行してみる

      [image]

    他のCPUで実行したいとき

    jni/Application.mk ファイルを作り「APP_ABI := x86」のように設定する.