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

Windows で Android NDK を使ってみる

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

この Web ページでの設定

前準備

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

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++ 開発ツールの選択

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

    [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 プロジェクトを新規作成
    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」のように設定する.