あーるPG - 社会人のデジタル生活

日曜プログラマになろうかなーと思った30代理系社会人の、キャリアアップや趣味(特にデジタル情報)の記録。らーめんとビールが好き。

androidSDK、NDKのサンプルを動かす(WindowsXP)

0.はじめに

「cocos2d-x」はC++等で記述できるのがウリですが、androidの標準開発言語はJavaです。
2言語の溝を埋めるのが「JNI」というインターフェースです。
C++ソースコードはJNI用にネイティブビルドされ、JavaはJNIを介してそのC++部分を呼び出します。

C++のネイティブビルドはndk-buildというCUI向けコマンドで行います。このために「Cygwin」が必要となります。
androidアプリを実行するには「eclipse」というIDEが必要となります。
(必須かは知りませんが、標準的に。)

手順が多いので、まずはndkの正常動作まで確認します。

1.「Cygwin」をインストールする。

http://www.cygwin.com/
Cygwin」とはWindows上でUNIX/LINUXコマンドラインインターフェイスをエミュレートして提供するもの。
android ndkのビルドに使うらしい。
インストールセットにmake, gcc, ruby等は追加すべき。

2.「JDK」をインストールする。

JDKJavaでの開発環境。「Android SDK」やIDE「Ecripse」はこれを利用して動く。
現在、「JDK」は「Java Platform, Standard Edition」だった。「JavaFX」はJDKに含まれていた。
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

3.「Android SDK」をインストールする。

http://developer.android.com/intl/ja/sdk/index.html
Android SDK」とはandroidアプリのベーシックな開発環境。プログラミング言語Java
インストーラで選択させられるバージョンは、対象とするandroid機器のOSバージョンに合わせる。全部インストールしても良い。
「ADT(Android Developer Tools)」も一緒にインストールすると、後述のEcripseがついてくる。

4.「android NDK」をインストールする。

http://developer.android.com/intl/ja/tools/sdk/ndk/index.html
Android NDK」とはandroidアプリをC/C++で記述できるようにする追加プラグイン
直接CPUを動かす(ネイティブコード)なので、汎用性は極端に落ちる。
「JNI」が含まれる。

「JNI(Java Native Interface)」とはJavaからC++を呼び出す機構。cocos2d-xに必要。
cocos2d-xはC++で記述するため、JNI経由でandroidアプリから呼び出す必要がある。

5.「EclipseIDE for Java Developers)」をインストールする。

http://www.eclipse.org/
androidアプリ開発の標準環境。「Android SDK」インストールの時に既にインストールされているはず。
最新版で良い。

6.素のandroidアプリをEclipseで動かすテスト

[File] - [New] - [New android Project] でプロジェクトを新規作成。
  package nameはJAVA開発の規則で、jp.co.hogehoge などとドメインが入るように決まっている。とりあえず"com.example"にしておく。

Eclipse」からエミュレータをNewして立ち上げる。
  [Window] - [Android Virtual Device Manager] から、「New」で作成。「Start」で起動。
  ※Nexus7だとメモリ、ストレージが大きすぎてメモリ不足になりがちなので、サイズ削減しておくと良い。

[Run As] - [Android application] で、激重エミュレータ上で起動するはず。
  エミュレータがロック状態になったらマウスドラッグで解除する。

画面が真っ暗になる場合

  最新バージョンでOpenGL ES 2.0 を使用していると、古いandroid エミュレータで動作しない。
  OS4.0.3以上でかつ、エミュレータ作成時に"Use Host GPU"オプションを入れると動作するはず。
  http://stackoverflow.com/questions/11467392/cocos2d-x-on-android-not-running

7.素のNDKサンプルをeclipseで動かすテスト

JNIの性質上、予め呼び出されるC++コードをNDK専用のビルドに通す必要がある。
これをするのが ndk/ndk-build コマンド。
サンプルを動作させる際は、まずCygwinで各サンプルディレクトリに移動し、ndk-buildコマンドを実行する。
その後eclipseでプロジェクトごとimportすること。

「問題が発生したため〜〜〜〜を終了します」と表示される場合

  JNIの呼び出し先が無くてヌルポイント例外になっている。ndk-buildを行うこと。