2013/09/27
Android NDK でデフォルトディレクトリを jni 以外にする方法
JNI 製作時は便利なのですが、実行ファイルを作りたい時などは、「jni というディレクトリ名はどうなのよ?」って思います 。
というわけで、任意のプロジェクト構成で ndk-build する方法を探ってみました。
例として、以下のような構成のプロジェクトで Android 用の実行ファイルを作成してみます。
$(NDK_PROJECT_PATH)/ |-src/ | |-HelloWorld.c | |-Android.mk | |-Application.mk
Application.mk を作成する
正確には、Application.mk を作成しなくても良いのですが、柔軟なプロジェクト構成のためにはあったほうが良いでしょう。基本的には、プロジェクトディレクトリの直下に配置します。
Application.mk
APP_PROJECT_PATH := $(NDK_PROJECT_PATH) # ターゲットの Android.mk を指定する APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/src/Android.mk
プロジェクト作成
プロジェクトの作成は、jni 以下に作成するのと同様に行います。例えば、以下のような感じです。
src/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := a.out LOCAL_SRC_FILES := HelloWorld.c include $(BUILD_EXECUTABLE)
本筋とは関係ないですが、一応ソースコードも載せておきます。
src/HelloWorld.c
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello world."); return 0; }
ビルド
プロジェクト直下で、ndk-build
を実行します。この時、以下のようにオプションを追加するところがポイント。
$ ndk-build NDK_PROJECT_PATH=${PWD} NDK_APPLICATION_MK="\$(NDK_PROJECT_PATH)/Application.mk" Compile thumb : a.out <= HelloWorld.c Executable : a.out Install : a.out => libs/armeabi/a.out
NDK_PROJECT_PATH
にプロジェクトのルートディレクトリ。NDK_APPLICATION_MK
に Application.mk ファイル。上記2点を適切に指定する必要があります。
実行すると、無事
libs/armeabi/a.out
が作成されました。また、Windows の場合は以下で同様の処理が可能です。
> ndk-build.cmd NDK_PROJECT_PATH=%cd% NDK_APPLICATION_MK="$(NDK_PROJECT_PATH)/Application.mk" "Compile thumb : a.out <= HelloWorld.c Executable : a.out Install : a.out => libs/armeabi/a.out
Windows の場合は
$(PWD)
が定義されていませんので、同様の環境変数 %cd%
を使用してやる必要があるわけです。参考
作成した実行ファイルをエミュレータ等に送って実行したりできます。
Android NDK で .so ではなく、実行ファイルをつくる - Hacking My Way ~ itogのhack日記
Android NDK で .so ではなく、実行ファイルをつくる - Hacking My Way ~ itogのhack日記
0 件のコメント:
コメントを投稿