cocos2d-xで、パッケージ名を指定してcreate_project.pyを実行して生成されたプロジェクトをEclipseで読み込みプロジェクトビルドさせるとパッケージ名でなぜかエラーがでてしまう

cocos2d-x体験記。仕事関連でcocos2d-xを使うことになりそうなのでAndroidのプロジェクトの作成をしてみることにした。Eclipseで開発できるというのでcocos2d-x関連書籍本家ドキュメントなどに従ってやってみている。プロジェクトは問題なく生成されるのだが、なぜかプロジェクトビルドが終わったあとに「宣言されたパッケージ”jp.co.example.testgame”が、予測されているパッケージ”jp.co.exampleに一致しません”」などとエラーになる。何度最初から作り直してもダメ……いったいどういうことなんだ!?

cocos2d-xでのプロジェクトの生成はOSや環境に関係なくPythonスクリプトで実行し、そのスクリプトが生成したものを直接使うことになる(らしい)。スクリプトはcreate_project.pyというファイルだが、このファイルを以下のように実行してプロジェクトを生成するという、いたって簡単なものだ。
簡単、といっても、当然のことながら環境は整っていなければならないのだが。特にPython(2.7が推奨されているようだが、私は3.3で実行している。特に問題はない)がインストールされていないと、当然のことながらPythonスクリプトは動作しないので要注意である。Mac OS XやLinuxなどのUNIX系OSの場合にはすでにインストールされいてる場合もあるが、Windowsの場合は間違いなく自分でインストール作業を行わない限り事前にインストールされていることはない。

[shell]
create_project.py -project TestGame -package jp.co.expample.testgame -language cpp
[/shell]

このコマンドラインは、どうあがいても他に何を変えようもないシンプルそのものだが、これで実行するとプロジェクトのフォルダもちゃんと生成されるしビルドも最後まで通る(CPPのほうだけ)のだが、TestGame/src/jp.co.example/TestGame.javaはビルドが通らず、さきのパッケージ名のエラーになって終了する。

気になるのは、src/jp.co.exampleというフォルダ名で、testgameが付いていない。
おかしい……。

気になるので、Pythonなんて全然わからないし使いたくもないのだが、create_project.pyの中身を覗いて見ると……。

[python]
# rename package path, like "org.cocos2dx.hello" to "com.company.game". This is a special process for android
if (platform == "android"):
src_pkg = context["src_package_name"].split(‘.’)
dst_pkg = context["dst_package_name"].split(‘.’)
os.rename(proj_path + "src/" + src_pkg[0],
proj_path + "src/" + dst_pkg[0])
os.rename(proj_path + "src/" + dst_pkg[0] + "/" + src_pkg[1],
proj_path + "src/" + dst_pkg[0] + "/" + dst_pkg[1])
os.rename(proj_path + "src/" + dst_pkg[0] + "/" + dst_pkg[1] + "/" + src_pkg[2],
proj_path + "src/" + dst_pkg[0] + "/" + dst_pkg[1] + "/" + dst_pkg[2])
java_package_path = dst_pkg[0] + "/" + dst_pkg[1] + "/" + dst_pkg[2]
[/python]

「org.cocos2dx.hello」というテンプレートのパッケージ名を、そのまま引数で指定されたドメイン名に割り当ててるだけ。
スクリプトも[0]~[2]の3つしかない。
すなわち、jp.co.exampleまでしか対応されておらず、ハナから[3]以降は捨てられる運命にあった、ということなのだった。

なんだよそれ…… orz

Javaのpackage名の命名規則的には別にjp.co.example.foo.bar.bazでもいいはずなのだが、このcocos2d-xのプロジェクト自動生成スクリプトは対応せず3セグメント分のドメイン名で指定しなければならないようだ。

なんともお粗末な……。
Pythonなので改造することもできず、というか、このスクリプトだけ改造すればすむ話でもなさそうだったので(たぶんそんなんで足りるなら本家でやってるだろうしな)、そっと扉(vim)を閉めてあきらめることにしたのであった……。

結論:cocos2d-xでのプロジェクト作成時には、com.example.gametitleという3セグメント分のドメイン名をもとにパッケージ名を生成しよう。

cocos2d-x入門Cocos2d‐x開発のレシピ―iOS/Android対応cocos2d-xによるiPhone/Androidアプリプログラミングガイドゲームプログラマになる前に覚えておきたい技術Unity4入門   最新開発環境による簡単3Dゲーム製作

コメントを残す

メールアドレスが公開されることはありません。