nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

UbuntuにCocos2d-xをインストールしてAndroidアプリ開発環境の作成

環境

Ubuntu: 11.10
Eclipse: 4.2.1
Android SDK: 20.0.1
Android NDK: r9
Cocos2dx: 2.1rc0-x-2.1.3

はじめに

EclipseAndroid SDKはインストール済みだったので省略。

Android NDKのインストール

AndroidC/C++を扱うツールのインストール。

ダウンロード

http://developer.android.com/tools/sdk/ndk/index.html からダウンロードして展開。

Cocos2dxのインストール

ダウンロード

http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download からダウンロードして展開。
※展開したディレクトリ名を以降では $COCOS2DX_ROOT と記載する

Eclipseの設定

Android NDKの設定

[Window] -> [Preferences] で開いたウィンドウから [C/C++] -> [Build] -> [Environment] を選択。
[Add] ボタンクリックでウィンドウを展開、 [Name] に [NDK_ROOT]、 [Value] にAndroid NDKを展開したディレクトリ名を入力、 [OK] で終了。

Cocos2dxの設定

[Window] -> [Preferences] で開いたウィンドウから [General] -> [Workspace] -> [Linked Resources] を選択。
[New] ボタンをクリックしてウィンドウを展開し、 [Name] 欄に [COCOS2DX] と、 [Location] 欄に $COCOS2DX_ROOT を入力し、 [OK] で終了。

Cocos2dxをライブラリとしてEclipseにインポート

[File] -> [New] -> [Project] で開いたウィンドウから、 [Android] -> [Android Project from Existing Code] を選択。
[Root Directory] 欄に [$COCOS2DX_ROOT/cocos2dx/platform/android/java] と入力。
[Copy project into workspace] にはチェックを入れずに [Finish] で終了。

プロジェクトの作成

雛形の作成

Cocos2dxのツールでプロジェクトの雛形を作成する。

cd $COCOS2DX_ROOT/tools/project-creator
create_project.py -project PROJECT_NAME -package PACKAGE_NAME -language LANG_NAME

PROJECT_NAME は任意のプロジェクト名。
PACKAGE_NAME は任意のパッケージ名。
LANG_NAME はC++なら"cpp"

Androidアプリ開発環境作成

"create_project.py -project Hello -package com.example.hello -language cpp" でプロジェクトを作成すると、
"$COCOS2DX_ROOT/projects/Hello" 以下に雛形ができる。
Androidアプリを開発する場合は、 "$COCOS2DX_ROOT/projects/Hello/proj.android" をEclipseにインポートする。

雛形アプリ実行時エラー対応

作成したプロジェクトをEclipse経由で実機で起動しようとすると "format not a string literal and no format arguments [-Werror=format-security]" というエラーが発生した。
ビルドのオプションが原因っぽいが、オプションの変更の仕方が分からなかったので、ソースを下記のように変更して対応した。

$COCOS2DX_ROOT/CocosDenshion/android/SimpleAudioEngine.cpp
77c77
<       LOGD("%s", deviceModel);
---
>       LOGD(deviceModel);
$COCOS2DX_ROOT/CocosDenshion/android/opensl/OpenSLEngine.cpp
333c333
<               LOGD("%s", errorInfo);
---
>               LOGD(errorInfo);
$COCOS2DX_ROOT/CocosDenshion/android/opensl/SimpleAudioEngineOpenSL.cpp
41c41
<                               LOGD("%s", errorInfo);
---
>                               LOGD(errorInfo);
$COCOS2DX_ROOT/cocos2dx/platform/android/CCCommon.cpp
44c44
<     __android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info", "%s", buf);
---
>     __android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info",  buf);
54c54
<     __android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info", "%s", pszFormat);
---
>     __android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info", pszFormat);