Cocos2dxDownloader.javaでコンパイルエラーが発生した場合の対応方法

cocos2d-x(cpp)でAndroid向けにビルドをする際、環境によってはlibcocos2dxのCocos2dxDownloader.javaで以下のコンパイルエラーが発生することがあります。

[javac] C:\cocos2d-x\projects\Xxxxxxx\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:9: エラー: パッケージorg.apache.httpは存在しません
[javac] import org.apache.http.Header;
[javac] ^
[javac] C:\cocos2d-x\projects\Xxxxxxx\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:10: エラー: パッケージorg.apache.http.messageは存在しません
[javac] import org.apache.http.message.BasicHeader;
[javac] ^
[javac] C:\cocos2d-x\projects\Xxxxxxx\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:47: エラー: シンボルを見つけられません
[javac] public void onFailure(int i, Header[] headers, byte[] errorResponse, Throwable throwable) {
[javac] ^

~略~

[javac] C:\cocos2d-x\projects\Xxxxxxx\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.java:256: エラー: HttpEntityにアクセスできません
[javac] task.handle = downloader._httpClient.get(Cocos2dxHelper.getActivity(), url, headers, null, task.handler);
[javac] ^
[javac] org.apache.http.HttpEntityのクラス・ファイルが見つかりません
[javac] 注意:一部の入力ファイルは非推奨のAPIを使用またはオーバーライドしています。
[javac] 注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
[javac] 注意:C:\cocos2d-x\projects\Xxxxxxx\cocos2d\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxDownloader.javaの操作は、未チェックまたは安全ではありません。
[javac] 注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
[javac] エラー12個
[javac] 警告3個

今回はこちらの対応方法についてまとめてみます。

スポンサーリンク

エラーの原因

このエラーはビルドターゲットのAPIレベルが23以上の場合に発生します。
Android OSでいうと6.0以降ですね。

cocos2d-xではapacheのクラスであるorg.apache.http.Headerorg.apache.http.message.BasicHeaderをlibcocos2dxプロジェクトで参照しています。
しかしAndroid6.0からはapacheのクラスは必要最低限のものしかandroid.jarに格納されなくなってしまいました。
そのため、libcocos2dxプロジェクトをビルドするのに必要なクラスが不足し、コンパイルエラーが発生しています。

対応方法

対応方法は以下の2パターンです。

  1. libcocos2dxプロジェクトのAPIレベルを下げる
  2. 足りないクラスを追加する

APIレベルを下げるのは今後の開発に影響が出そうなのでおすすめしません。
なので、足りないクラスを追加する方法を書いていこうと思います。

手順

まずはapacheのサイトからHttpClientのBinaryをダウンロードします。

Apache_HttpComponents

ダウンロードしてきたHttpClientを解凍し、必要なライブラリを取得します。
必要になるライブラリはhttpcore-X.X.X.jarhttpclient-X.X.X.jarです。(X.X.Xはバージョンなのでダウンロードした時期で変わります)
Apache_HttpComponents2

上記で取得したhttpcore-X.X.X.jarとhttpclient-X.X.X.jarを以下のフォルダに格納します。
[../プロジェクト/cocos2d/cocos/platform/android/java/libs]

手順は以上です。
あとはこれまで通りcocosコマンドでコンパイルをすれば正常終了するはずです。