目的
Xcodeを使用してアプリ制作をしていて、android向けにコンパイルする
前提
- Xcodeでの作成
- extensions系(例えばScale9Spriteなど)を利用している
問題
まずは、
cocos2d-x|githubのREADMEに書かれている通りコマンドを実行してみます
cocos run -p android -j 4
そうするとコンパイルエラーになります( extensions系 をつかっていると)
吐かれるエラーログは指定の仕方によりますが…
No such file or directory #include "extensions/cocos-ext.h".
であったり、直接指定している場合は
No such file or directory #include "GUI/CCControlExtension/CCScale9Sprite.h".
こんな感じで出力される
原因
コンパイルルールなんかが記述されている{your_proj_root}/proj.android/jni/Android.mk
にextension系を読み込む記述がないため
対策
デフォルトだとこんな内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
include $(BUILD_SHARED_LIBRARY)
$(call import-module,2d)
$(call import-module,audio/android)
$(call import-module,Box2D)
これに extensions系 を読み込むように記述する
箇所は2箇所
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
# 追加
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
include $(BUILD_SHARED_LIBRARY)
$(call import-module,2d)
$(call import-module,audio/android)
$(call import-module,Box2D)
# 追加
$(call import-module,extensions)
これで extensions も含めてコンパイルしてくれます
補足
extensions系 ってなに?
{your_proj_root}/cocos2d/extensions/
配下に設置されているもの
#include "GUI/...."
的な者達ですかね
おわりに
ココらへんの知識は乏しくて、エラー&トライでやった結果なので
おかしなところとかあれば、コメンとなりリプなりでご指摘頂けると嬉しいです