[Android] Hello, Android Linux!

Hello, Androidを書いてみる。
作成するディレクトリーは、mydroidのexternalのディレクトリの下に以下のファイルを作る。

  • mydroid/external/hello/hello.c
/*
  File: hello.c
 */
#include 
int main(int argc, char *argv[])
{
  printf("Hello, Android Linux!\n");
  return 0;
}
  • mydroid/external/hello/Android.mk
# Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= hello.c
LOCAL_MODULE := hello

include $(BUILD_EXECUTABLE)

まずは、エミュレータを実行しておく。

$ ~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.kinami_linux-x86/tools/emulator &

hello.cから実行ファイルであるhelloを作成する。helloディレクトリでmmコマンドで実行。もしくは、トップディレクトからmmm ~/mydroid/external/helloでもOK。

$ cd ~/mydroid/external/hello
$ mm
make: ディレクトリ `/home/kinami/mydroid' に入ります
build/core/product_config.mk:229: WARNING: adding test OTA key
build/core/main.mk:177: implicitly installing apns-conf_sdk.xml
============================================
TARGET_PRODUCT=generic
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
TARGET_OS=linux
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=TC3
============================================
target thumb C: hello <= /home/kinami/mydroid/external/hello/hello.c
target Executable: hello (out/target/product/generic/obj/EXECUTABLES/hello_intermediates/LINKED/hello)
target Non-prelinked: hello (out/target/product/generic/symbols/system/bin/hello)
target Strip: hello (out/target/product/generic/obj/EXECUTABLES/hello_intermediates/hello)
Install: out/target/product/generic/system/bin/hello
Finding NOTICE files: out/target/product/generic/obj/NOTICE_FILES/hash-timestamp
Combining NOTICE files: out/target/product/generic/obj/NOTICE.html
make: ディレクトリ `/home/kinami/mydroid' から出ます

出来上がったファイルをエミュレータに転送する。

$ adb push ~/mydroid/out/target/product/generic/system/bin/hello /data/hello
79 KB/s (5288 bytes in 0.065s)

ファイルを実行する。

$ adb shell /data/hello
Hello, Android Linux!

できた!