2011年5月27日金曜日

Android NDKでネイティブCUIアプリを作ってみる

キーボード付きのAndroid端末を使って、Terminalアプリ上でshellを起動して、キーボード操作で動作するアプリを動かすのを模索していた。
最初のAndroid携帯電話を使った時( Android Dev Phone 1を使ってみる )から色々と試していて、主にネイティブのアプリを作る( Android実機上でLinuxのネイティブバイナリを動かしてみる )というのを考えていた。
ネイティブバイナリ以外にも、スクリプト言語( SL4A )もあるのだが、できればC言語で開発をしたい。
Android NDKがバージョンアップし、NDK r4bでネイティブアプリが作れるようになったというので試してみた。
キーボード付きのAndroid端末 ( Android DevPhone 1, シャープIS01 , AcerのAndroid/Win7デュアルブート機 , 東芝DynabookAZ )

1. Android NDKの開発環境を準備する
 WindowsのPC上にCygwinをインストールする。
 Cygwinのサイトからインストーラーをダウンロードして実行し、インストール作業の中でコマンドDevel内のmakeとArchive内のunzipを追加でインストールした。

 次にNDKをインストールする。
 NDKのサイトからandroid-ndk-r4b.zipをダウンロードした。(現在2010-12-12は、ndk-r5がダウンロードできる。ndk-r5の場合も同様に作業する)
 次のようなコマンドで、ホームディレクトリ直下にインストールした。
 % unzip android-ndk-r4b-windows.zip -d ~/.

2. ネイティブアプリのソースと、メイクファイルと、フォルダ構成
 簡単なHello,worldのソースを試した。
 hello.cというソースファイルで、内容は次の2行のとおり。
 #include <stdio.h>
 int main(){ printf("Hello,world\n"); return 0; }

 メイクファイルは、Android.mkというファイル名で、内容は次のとおり。
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 LOCAL_MODULE := hello
 LOCAL_SRC_FILES := hello.c
 include $(BUILD_EXECUTABLE)

 ホームディレクトリ直下にhelloというフォルダを作成しておいて、その中にjniというフォルダを作成し、上記のhello.cとAndroid.mkを入れる。
 ( ~/hello/jni/hello.c と ~/hello/jni/Android.mk )

 ビルドのための手順を書いた起動用のスクリプトbuild.shというファイルを作成。内容は次の2行のとおり。
 export PATH=$PATH:~/android-ndk-r4b; export ANDROID_NDK_ROOT=~/android-ndk-r4b
 ndk-build
 やっているのは、1行目でパスを通すのと必要な環境変数を設定していて、2行目でビルドコマンドndk-buildを実行している。
 このbuild.shというファイルは~/helloフォルダに入れる。( ~/hello/build.sh )

3. ビルド
 次のコマンドでビルド用スクリプトを実行する。
 % cd ~/hello
 % sh build.sh

 手順に問題が無ければ無事にビルドが終了し、コンパイル結果のバイナリ ~/hello/obj/local/armeabi/hello が得られる。

4. 実行
 adbコマンドを使って、実機に転送する。
 % adb push hello /data/hello

 実機上で、ファイル属性に実行属性を付加する。
 % chmod 755 /data/hello

 helloアプリ実行する。
 % /data/hello
 結果、「Hello,world」と表示されるのが確認できた。

0 件のコメント:

コメントを投稿