Ubuntu で Android NDK を使い ARM+Android で動く C プログラムをコンパイルしてみる
前準備
前準備として,下記のインストールが済んでいること.
- JDK (Java Development Kit)のバージョン1.6.0_2以上と、Android SDK
→ Ubuntu: Ubuntu での Android Studio についての Web ページ
- (オプション) Eclipse, Eclipse の プラグイン Android Development Tools のインストール が終わっていること
- Android NDK のダウンロードとインストール
/usr/local/android-ndk-r9bにインストールされているものとして説明を続ける
- Android 2.2 を、次のような手順でインストールしておくこと
Android SDK マネージャ を起動し、Android 2.2 をインストールする。
◆ 起動手順の例
sudo /usr/local/android-studio/sdk/tools/android
Ubuntu で Android NDK を使いCプログラムをコンパイルしてみる(コマンドライン)
- Android NDK のファイルの確認
プラットフォーム
cd /usr/local/android-ndk-r9b ls -la platforms
プラットフォーム下の sysroot
cd /usr/local/android-ndk-r9b ls platforms/android-4/arch-arm
ツールチェーン
ls /usr/local/android-ndk-r9b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
- 「Hello, World !」 を表示する C プログラムを hello.cのようなファイル名で保存
#include
int main() { printf("Hello, World !\n"); return 0; } - コンパイル
参考Webページ http://blog.kmckk.com/archives/2918551.html
cd /tmp export PATH=/usr/local/android-ndk-r9b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin:$PATH /usr/local/android-ndk-r9b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -mandroid --sysroot=/usr/local/android-ndk-r9b/platforms/android-4/arch-arm -march=armv5te -msoft-float -o a.out hello.c
- ファイルの確認
- Android SDK 付属のエミュレータで実行してみる
次を実行
adb push /tmp/a.out /data/local adb shell cd /data/local ./a.out
次のように 「not executable: magic 7F45」のようなエラーメッセージが出る場合. Genymotion は ARM ではなく x86 ベースのエミュレータなので注意. Genymotion ではなく Android SDK 付属のエミュレータを使う.(android コマンドで簡単に起動できる)
Ubuntu で Android NDK を使いCプログラムをコンパイルしてみる(コマンドライン)
以下、アプリケーションを置くディレクトリを /tmpであるとして説明する
- 「Hello, World !」 を表示する C プログラムを /tmp/jni/hello.cのようなファイル名で保存
#include
int main() { printf("Hello, World !\n"); return 0; } - /tmp/jni/Android.mkを作成
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := a.out LOCAL_SRC_FILES := hello.c include $(BUILD_EXECUTABLE)
- ndk-build の実行
cd /tmp ndk-build
- ファイルの確認
file /tmp/libs/armeabi/a.out
- Android SDK 付属のエミュレータで実行してみる
次を実行
adb push /tmp/libs/armeabi/a.out /data/local adb shell cd /data/local ./a.out
ログ(logcat のログ)として表示結果を残したい場合は次のように実行
adb push /tmp/libs/armeabi/a.out /data/local adb shell cd /data/local logcat ./a.out