目的
「Android NDK で COLLADA dom ライブラリをビルド - TOP」でビルドした、COLLADA DOM ライブラリを、実際に使ってみる。最初は、基本的な設定を行う。これらの設定は、NativeActivity を利用して、C/C++ だけで、Android のアプリを作成するために行う。
はじめに
COLLADA DOM ライブラリは、ビルド済みで、同一ワークスペースに存在する前提とする。COLLADA DOM で読み込む、モデルデータファイルは、Blender のエクスポートを利用して出力した。
出力されたモデルデータのバージョンは 1.4.1 となっている。
当方、C/C++ の知識は、「お遊びレベル」で、Android での「プログラミング経験無し」、さらには、「COLLADA DOMって何?おいしいの?」っていう状態ゆえに、内容については、参考程度と心得られたし。あしからず。
プロジェクト作成
「Android Application Project」を作成
「File」メニュー⇒「New」⇒「Other」を選択。「Android」⇒「Android Application Project」を選択し、「Next」ボタンを押下。
「New Android Application」ダイアログ
Application Name:「ColladaSandbox」Project Name:「ColladaSandbox」
Package Name:「foobar.colladasandbox」
Build SDK:「Android 2.3.1 (API 9)」
Minimum Required SDK:「API 9: Android 2.3 (Gingerbread)」
「Next」ボタンを押下。
「Configure Launcher Icon」ダイアログ
値を、任意に変更して(デフォルトのままでも可)、「Next」ボタンを押下。「Create Activity」ダイアログ
「Create Activity」チェックボックスを外す。(Java の Activity は利用せず、C の NativeActivity だけで実装するための設定。)
「Finish」ボタンを押下。
「C++ Project」へ変換
「ColladaSandbox」プロジェクトを選択し、「File」メニュー⇒「New」⇒「Other」を選択。
「C/C++」⇒「Convert to a C/C++ Project (Adds C/C++ Nature)」を選択し、「Next」ボタンを押下。
Convert to C or C++:「C++ Project」を選択
Project options:「Specify project type」チェックボックスをチェックする。
Project type:「Makefile project」を選択
Toolchains:「-- Other Toolchain --」を選択
「Finish」ボタンを押下。
「C/C++」パースペクティブに変更
「Window」メニュー⇒「Perspective」⇒「Other」を選択。「C/C++」を選択し、「OK」ボタンを押下。
ビルド設定
「ColladaSandbox」プロジェクトを選択し、「File」メニュー⇒「New」⇒「Folder」を選択。Folder name:「jni」
「Finish」ボタンを押下。
「ColladaSandbox」プロジェクトを選択し、「Project」メニュー⇒「Properties」を選択
「C/C++ Build」
「Builder Settings」タブ
「Use default build command」チェックボックスのチェックを外す。
Build command:「${CYGWIN_HOME}/bin/bash ${NDKROOT}/ndk-build NDK_DEBUG=1 V=1」
Build directory:「${workspace_loc:/ColladaSandbox/jni}」
(「Workspace...」ボタンを押下、「ColladaSandbox」プロジェクトの「jni」ディレクトリを選択して、「OK」ボタンを押下。)
「Behaviour」タブ
Use parallel build:チェックする。
Use parallel jobs:4
(ビルド処理を並列化する。マルチコアマシンの場合に設定)
Build (Incremental build):チェックボックスは、チェックしたまま、デフォルトの"all"文字列を削除して、空にする。
「OK」ボタンを押下。
「C/C++ General」⇒「Paths and Symbols」
「Includes」タブInclude の設定は、必須ではないが、補完機能などが利用できるので、設定しておく。
設定するパスは、ターゲットにする SDK のバージョンや、標準C++ライブラリなどによって異なる。
・「Assembly」
何も無し
・「GNU C」
${NDKROOT}/platforms/android-9/arch-arm/usr/include
${NDKROOT}/sources/android/native_app_glue
・「GNU C++」
${NDKROOT}/platforms/android-9/arch-arm/usr/include
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/include
${NDKROOT}/sources/android/native_app_glue
/ColladaDom/jni/include
/ColladaDom/jni/include/1.4
ColladaDom のインクルード定義は、「Is a workspace path」チェックボックスをチェックした状態で追加した。「Workspace」ボタンを押下して選択すると、自動的にチェックが付く。
アプリ設定
「AndroidManifest.xml」ファイルを開く。「Application」タブ
「ApplicationAttributes」エリアDebuggable:「true」
Has code:「false」
「Application Nodes」エリア
・「Activity」定義を追加
「Add」ボタンを押下。
「Activity」を選択し、「OK」ボタンを押下。
「Activity」属性に以下の値を設定。
Name:「android.app.NativeActivity」
・アプリのライブラリ名定義を追加
「Meta Data」を選択して、「OK」ボタンを押下。
「Meta Data」属性 Name:「android.app.lib_name」
「Meta Data」属性に以下の値を設定。
Value:「ColladaSandbox」
(ビルド後にできる、libColladaSandbox.so ファイルの lib と .so を除いた値を設定する)
・「Intent Filter」定義を追加
「Add」ボタンを押下。
「Intent Filter」を選択し、「OK」ボタンを押下。
属性の設定は、無し。
・「Action」定義を追加
「Intent Filter」を選択して、「Add」ボタンを押下。
「Action」を選択して、「OK」ボタンを押下。
「Action」属性に以下の値を設定。
Name:「android.intent.action.MAIN」
・「Category」定義を追加
「Intent Filter」を選択して、「Add」ボタンを押下。
「Category」を選択して、「OK」ボタンを押下。
「Category」属性に以下の値を設定。
Name:「android.intent.category.LAUNCHER」
「Permissions」タブ
パーミッションには、アプリで必要なものを設定する。今回は、SDカードにファイルを書き出すための、パーミッションを設定する。
「Add」ボタンを押下。
「Uses Permission」を選択して、「OK」ボタンを押下。
「Uses Permission」属性に以下の値を設定。
Name:「android.permission.WRITE_EXTERNAL_STORAGE」
設定後の「AndroidManifest.xml」は、こんな風になった。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="foobar.colladasandbox" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme" android:hasCode="false" android:debuggable="true"> <activity android:name="android.app.NativeActivity"> <meta-data android:name="android.app.lib_name" android:value="ColladaSandbox"/> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>