読者です 読者をやめる 読者になる 読者になる

自分用cocos2d-x初期設定プリセットメモ(Android.mk含む)

自メモ)
自分用のスニペット(cococs2d-x3.0用)

rc1以降、正式版でもAndに関してはほぼ改変がないので*1以下のままで行く感じ。
というかAndのtemplate壊れたままだけどこれ問題ないのかな?*2



◎◎console(cocosコマンド)で動かすための .bash_profile の記述のスニペット

  • $HOME/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
export ANDROID_HOME=$HOME/android-sdks
export ANDROID_NDK_HOME=$HOME/android-ndk-r9d
export ANDROID_BUILD_VERSION=19.0.3


export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/tools:$PATH
export PATH=$ANDROID_HOME/build-tools/$ANDROID_BUILD_VERSION:$PATH
export PATH=$ANDROID_NDK_HOME:$PATH

と例えば定義されている場合

export ANDROID_SDK_ROOT=$ANDROID_HOME
export NDK_ROOT=$ANDROID_NDK_HOME
export COCOS2DX_ROOT=$HOME/cocos2d/cocos2d-x-3.0
export COCOS_CONSOLE_ROOT=$COCOS2DX_ROOT/tools/cocos2d-console/bin
export ANT_ROOT=/usr/share/ant/bin //☆☆

export NDK_TOOLCHAIN_VERSION=4.8
export NDK_CCACHE=`which ccache`

export PATH=$COCOS_CONSOLE_ROOT:$PATH



◎◎create projectした後に改変が必要な記述スニペット

CDTの設定自体は下記あたりでOK。

ndk-build NDK_DEBUG=1 NDK_LOG=1 V=1 -j3

詳細は Android NDK – kwLogあたり

MakeFileの書式の話は下記でいいのかな?

  • jni/Application.mk
APP_STL := gnustl_static
#APP_ABI := armeabi armeabi-v7a x86
APP_ABI := armeabi-v7a x86
APP_PLATFORM := android-9

APP_OPTIM := debug
#APP_OPTIM := release

ifeq ($(APP_OPTIM),debug)
  APP_CPPFLAGS := -frtti -DCOCOS2D_DEBUG=1 -std=c++11 -fsigned-char -Wno-literal-suffix
  LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl -ldebug -llog
else
  APP_CPPFLAGS := -frtti -DCOCOS2D_DEBUG=0 -std=c++11 -fsigned-char -Wno-literal-suffix
  LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl -llog
endif

# see http://qiita.com/akerusoft/items/3d5068e8bfe926b03969
# use chipmunk
#APP_CPPFLAGS += -DCC_ENABLE_CHIPMUNK_INTEGRATION=1
# use box2d
#APP_CPPFLAGS += -DCC_ENABLE_BOX2D_INTEGRATION=1


# .bash_profileで指定しなくてもココでtoolchainの指定可能
NDK_TOOLCHAIN_VERSION=4.8
LOCAL_PATH := $(call my-dir)
PROJECT_DIR := $(LOCAL_PATH)/../
COCOS2DX_ROOT := $(LOCAL_PATH)/../../cocos2d

include $(CLEAR_VARS)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

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

#cppファイルの自動検索設定
ifeq ($(HOST_OS),windows)
  CPP_FILES := $(shell dir $(LOCAL_PATH)/../../Classes/*.cpp /b/a-d/s)                   
else
  CPP_FILES := $(shell find $(LOCAL_PATH)/../../Classes -name *.cpp)                   
endif

#cppファイルの自動検索設定(jniフォルダ内)◎◎
ifeq ($(HOST_OS),windows)
  CPP_FILES_JNI := $(shell dir $(LOCAL_PATH)/*.cpp /b/a-d/s)                   
else
  CPP_FILES_JNI := $(shell find $(LOCAL_PATH) -name *.cpp)                   
endif

#LOCAL_SRC_FILES := main.cpp
LOCAL_SRC_FILES := $(CPP_FILES_JNI:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES += $(CPP_FILES:$(LOCAL_PATH)/%=%)


#LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
#☆☆ headerフォルダの自動検索設定
ifeq ($(HOST_OS),windows)
  LOCAL_C_INCLUDES := $(shell dir $(LOCAL_PATH)/../../Classes /b/ad/s)                   
else
  LOCAL_C_INCLUDES := $(shell find $(LOCAL_PATH)/../../Classes -type d)                   
endif

#☆☆ headerフォルダの自動検索設定(JNIフォルダ)◎◎
ifeq ($(HOST_OS),windows)
  LOCAL_C_INCLUDES += $(shell dir $(LOCAL_PATH) /b/ad/s)                   
else
  LOCAL_C_INCLUDES += $(shell find $(LOCAL_PATH) -type d)                   
endif


ifeq ($(APP_OPTIM),debug)
  LOCAL_CFLAGS := -w -g
endif

# use ndk-build(build_native.py resouce copy action)
ifeq ($(HOST_OS),windows)
  $(shell del  $(PROJECT_DIR)/assets/* /S)
  $(shell xcopy $(PROJECT_DIR)/../Resources/* $(PROJECT_DIR)/assets /E /Y)
else
  $(shell rm -fr $(PROJECT_DIR)/assets/*)
  $(shell cp -fr $(PROJECT_DIR)/../Resources/* $(PROJECT_DIR)/assets)
endif

LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dxandroid_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static

# ==== use x-plugin =====
LOCAL_WHOLE_STATIC_LIBRARIES += PluginProtocolStatic 

ifneq (,$(findstring CC_ENABLE_BOX2D_INTEGRATION,$(APP_CPPFLAGS)))
  LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
endif

ifneq (,$(findstring CC_ENABLE_CHIPMUNK_INTEGRATION,$(APP_CPPFLAGS)))
  LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
endif

include $(BUILD_SHARED_LIBRARY)


$(call import-add-path,$(COCOS2DX_ROOT))
$(call import-add-path,$(COCOS2DX_ROOT)/cocos)
$(call import-add-path,$(COCOS2DX_ROOT)/external)
#$(call import-add-path,$(COCOS2DX_ROOT)/cocos/2d/platform/android)

$(call import-module,2d)
$(call import-module,extensions)
$(call import-module,audio/android)

ifneq (,$(findstring CC_ENABLE_BOX2D_INTEGRATION,$(APP_CPPFLAGS)))
  $(call import-module,Box2D)
endif

ifneq (,$(findstring CC_ENABLE_CHIPMUNK_INTEGRATION,$(APP_CPPFLAGS)))
  $(call import-module,chipmunk)
endif


$(call import-module,2d/platform/android)

# ==== use x-plugin =====
#$(call import-module,plugin/publish/protocols/android) 
# ==>publush.sh 要らないんじゃないか疑惑が。。。。<汗
$(call import-module,plugin/protocols/proj.android/jni) 

#echo info☆☆☆
$(info "==>[INFO]OS: $(HOST_OS)")
$(info "==>[INFO]TARGET: $(TARGET_ARCH_ABI)")

☆☆に関して>
XCodeではinclude文を書く時サブディレクトリを書かないのが常識なんだとか。。。(汗


△)#include "gameMain/GameMainViewController.h"
◎)#include "GameMainViewController.h"
従ってheaderに関しても自動検索pathの設定が必須となる感じのよう

◎◎に関して>
JNIフォルダも自動対象にして!と言われたので記述追加

☆☆☆に関して>
ADT 22.6.3 でまた腐ったので
ココの記述があると


unknown ABI
run-as: Package is unknown
とかよくわからんエラーが出たのでその場合はコメントにしてください。
あと1個前で動いてた 4.3がまた動かなくなったのでそれ以外の端末で動かすこと



◎◎cpptestをndk-buildで動かすための記述スニペット

変更点の詳細なドキュメントな記載が殆ど無いので

  1. cpptest
  2. 本体ソース
  3. doxygen-doc

だけが便りの状態orz

おもいっきり変な構成になってるので*3、COCOS2DX_ROOTをフルパスで書いてやらないと駄目。。。
とりあえず追記箇所のみ記載

LOCAL_PATH := $(call my-dir)
PROJECT_DIR := $(LOCAL_PATH)/../
COCOS2DX_ROOT := /Users/◎◎/cocos2d/cocos2d-x-3.0

#〜略〜
include $(BUILD_STATIC_LIBRARY)

$(call import-add-path,$(COCOS2DX_ROOT))
$(call import-add-path,$(COCOS2DX_ROOT)/cocos)
$(call import-add-path,$(COCOS2DX_ROOT)/external)
LOCAL_PATH := $(call my-dir)
PROJECT_DIR := $(LOCAL_PATH)/../
COCOS2DX_ROOT := /Users/◎◎/cocos2d/cocos2d-x-3.0

#〜略〜
include $(BUILD_STATIC_LIBRARY)

# use ndk-build(build_native.py resouce copy action)
ifeq ($(HOST_OS),windows)
  $(shell del  $(PROJECT_DIR)/assets/* /S)
  $(shell xcopy $(PROJECT_DIR)/../Resources/* $(PROJECT_DIR)/assets /E /Y)
else
  $(shell rm -fr $(PROJECT_DIR)/assets/*)
  $(shell cp -fr $(PROJECT_DIR)/../Resources/* $(PROJECT_DIR)/assets)
endif

$(call import-add-path,$(COCOS2DX_ROOT))
$(call import-module,tests/cpp-tests)

因みに Resouces/Image/*.gzとかはADTでファイル名不正とでるのでADTで動かす場合は削除しておくこと。
IOSでは問題ないんだろうけどなんだかなー(汗
あと空白文字と大文字ファイル名とかもAndは基本ダメなんだけど
これがIOS文化なのかねー。うーん><



◎◎CDTを動かすための記述スニペット

cocos2d-xのフォーラムでは.projectが壊れていてこう修正する等の話は既に言及されているが、
betaあたりから .cproject等も配布されてないところを見ると
あえて動かさないように殺してる?ようにも見える状況*4
ただこの状況だとCDTで実行できないので修正を行う

  • .cproject
    • 一般的なプロジェクトから持ってくるか
    • cocos2d-x-3.0alpha1まではtemplateに.cprojectが配布されていたのでそこから持ってくるかしてコピーする

でも


${ProjDirPath}/../../../cocos/2d
${ProjDirPath}/../../../cocos/2d/include
しか通してなかったので、厳密には補完的には不十分*5

  • .project

1)CDTとの連携できるように追記修正

	<buildSpec>
		<buildCommand>
			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
			<triggers>clean,full,incremental,</triggers>
			<arguments>
			</arguments>
		</buildCommand>

を追加

2)外部リンクを有効にする

<linkedResources>
		<link>
			<name>Classes</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/Classes</locationURI>
		</link>
		<link>
			<name>Resources</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/Resources</locationURI>
		</link>
		<link>
			<name>cocos2dx</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/cocos/2d</locationURI>
		</link>
		<link>
			<name>extensions</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/extensions</locationURI>
		</link>
		<link>
			<name>include_android</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/plugin/protocols/platform/android</locationURI>
		</link>
		<link>
			<name>include_protocols</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/plugin/protocols/include</locationURI>
		</link>
		<link>
			<name>scripting</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/cocos2d/cocos/scripting</locationURI>
		</link>
	</linkedResources>
  • COCOS2DXと記述されてるver
	<linkedResources>
		<link>
			<name>Classes</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/Classes</locationURI>
		</link>
		<link>
			<name>Resources</name>
			<type>2</type>
			<locationURI>PARENT-1-PROJECT_LOC/Resources</locationURI>
		</link>
		<link>
			<name>cocos2dx</name>
			<type>2</type>
			<locationURI>COCOS2DX/cocos/2d</locationURI>
		</link>
		<link>
			<name>extensions</name>
			<type>2</type>
			<locationURI>COCOS2DX/extensions</locationURI>
		</link>
		<link>
			<name>include</name>
			<type>2</type>
			<locationURI>COCOS2DX/plugin/protocols/include</locationURI>
		</link>
		<link>
			<name>scripting</name>
			<type>2</type>
			<locationURI>COCOS2DX/cocos/scripting</locationURI>
		</link>
	</linkedResources>
	<variableList>
		<variable>
			<name>COCOS2DX</name>
			<value>file:/Users/◎◎/cocos2d/cocos2d-x-3.0</value>
		</variable>
	</variableList>

*1:内部のクラスや関数名前のリファクタリング等はされているけど。。。

*2:.cprojectが提供されてない等を含めて問題にもされてないみたい。。。IOSだけ動作確認取れればいい感じなのかなー><

*3:rcから入ったcocosコマンドでも動かせない構成<苦笑

*4:起動時にCDTのauto-buildが走るのを嫌った?でもこれだと補完が効かないエディタ扱いと変わらんような<汗

*5:XCodeのプロジェクト.xprojと比べてorz