Help us understand the problem. What is going on with this article?

Mavericksでcocos2d-x 3.0.0finalをAndroid実機で動かすまでのあれこれ

More than 5 years have passed since last update.

iOS+XCodeはすぐ動くがAndroidがクセモノだったのでメモ。
eclipseは使わずコマンドラインで行う場合。

インストール

まず以下をインストールしてパスを通す
Android SDK http://developer.android.com/sdk/
Android NDK https://developer.android.com/tools/sdk/ndk/
apache ant http://ant.apache.org/bindownload.cgi
cocos2d-x 3.0.0 http://www.cocos2d-x.org/download

ここに書いてある
http://www.cocos2d-x.org/wiki/How_to_run_cpp-tests_on_Android

setup

cd cocos2d-x-3.0
./setup.py

ここで各々にパスが通っているか~./.profileを確認
(※サイトのドキュメントは.bash_profileになっているが、出力通りの操作だと.profileにはいる)

# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x
export COCOS_CONSOLE_ROOT=/Users/keidroid/cocos2d-x-3.0/tools/cocos2d-console/bin
export PATH=$COCOS_CONSOLE_ROOT:$PATH

# Add environment variable NDK_ROOT for cocos2d-x
export NDK_ROOT=/Users/keidroid/android-ndk-r9d
export PATH=$NDK_ROOT:$PATH

# Add environment variable ANT_ROOT for cocos2d-x
export PATH=/Users/keidroid/android-sdks/tools:$PATH

export ANDROID_HOME=/Users/keidroid/android-sdks
export ANT_ROOT=/Users/kei/apache-ant-1.9.4/bin
export PATH=$ANT_ROOT:$PATH

# Add environment variable ANDROID_SDK_ROOT for cocos2d-x
export ANDROID_SDK_ROOT=/Users/kei/android-sdks
export PATH=$ANDROID_SDK_ROOT:$PATH
export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH

プロジェクト作成

cocosコマンドでnewする
cocos new {プロジェクト名} -p {パッケージ} -l {言語} -d {ディレクトリ}

cd cocos2d-x-3.0/project
cocos new Hello -p net.keidroid.hello -l cpp -d .

ビルド/実行

cd proj.android
./build_native.py
ant debug install

↓こちでも良いけど

cocos run -p android

んで、多分以下の様なエラー出るので

{path}/proj.android/build.xml:46: sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var

local.propertiesを確認したり、update projectしたり

android update project -p . -t 1
android update project -p ../cocos2d/cocos/2d/platform/android/java -t 1

ファイル追加

HelloWorld確認した後、ファイルを追加するとエラーになる。
Android.mkがsrcファイルを以下のように指定してるせい

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorldScene.cpp

なので、

Classes内にディレクトリを作って整理する Android.mkの自動化
http://ichiokumanyen.hatenablog.jp/entry/2013/10/05/220232

を参考に以下のように変更

CPP_FILES := $(shell find $(LOCAL_PATH)/../../Classes -name *.cpp)
LOCAL_SRC_FILES := hellocpp/main.cpp
LOCAL_SRC_FILES += $(CPP_FILES:$(LOCAL_PATH)/%=%)
LOCAL_C_INCLUDES := $(shell find $(LOCAL_PATH)/../../Classes -type d)

cocos2d extension に対応

LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
$(call import-module,extensions)

Android UXへの対応

..のでAndroidManifest.xmlを編集

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="net.keidroid.hello"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="15" /> ////こことか
    <uses-feature android:glEsVersion="0x00020000" />
    <application android:label="@string/app_name"
                 android:icon="@drawable/icon">
        <activity android:name="org.cocos2dx.cpp.AppActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait" ////こことか
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:configChanges="orientation">
(以下略)

..(´∀`)

でやっと実機で思い通りの動作が可能になりました。

感想

cocos2d-xでの開発時、iOSで走って最後にAndroid対応しようとすると、
XCodeが便利すぎてつまる..
include指定もXCodeのグループしていではなくフォルダ指定になったり。
Android対応ははやめにするのが吉というのを思い知った

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away