6: 2016-08-23 (火) 14:52:46 njf |
現: 2018-10-08 (月) 03:00:42 njf |
| *はじめに [#z941726c] | | *はじめに [#z941726c] |
| + | |
| + | &font(Red){重要:ここで使っている「Experimental Plugin」は2017年10月に出たversion 0.11.0より後ではサポートされなくなりました。よってこのページの「gradle関連の修正」の章に書いた方法も、使えなくなりました。この章の代わりに[[cocos2d-x/ver2系CMakeを使ってAndroid Studioに移行する]]を参考にしてください。他の章はおそらく2018年現在、まだある程度正しいと思います。}; |
| | | |
| cocos2d-xがver3になってからかなり経ちますが、2から3への移行は大変なため、まだまだ以前作った物をver2で管理しています。さらにeclipseでのAndroid開発の公式サポートが終わり、openSSLなどの更新の催促、広告SDKの更新などもあり、否が応でもeclipseで開発していたcocos2d-x ver2系のAndroidプロジェクトをAndroid Studioに移さなくてはいけなくなってきました。 | | cocos2d-xがver3になってからかなり経ちますが、2から3への移行は大変なため、まだまだ以前作った物をver2で管理しています。さらにeclipseでのAndroid開発の公式サポートが終わり、openSSLなどの更新の催促、広告SDKの更新などもあり、否が応でもeclipseで開発していたcocos2d-x ver2系のAndroidプロジェクトをAndroid Studioに移さなくてはいけなくなってきました。 |
| **eclipseで開いて確認する [#u71714fd] | | **eclipseで開いて確認する [#u71714fd] |
| | | |
- | Android Studioにインポートするには、もとのeclipseのプロジェクトにライブラリ依存性のエラーをなくさなければなりません。ますeclipseで移行するプロジェクトを開き、「Project->Properties」を選択して、左の一覧から「Android」を選択します。右下の「Library」の中にエラーがあるとインポートできないので、そのライブラリはメモして右の「Remove」ボタンで取り除いておきましょう。 | + | Android Studioにインポートするには、もとのeclipseのプロジェクトにライブラリ依存性のエラーをなくさなければなりません。まずeclipseで移行するプロジェクトを開き、「Project->Properties」を選択して、左の一覧から「Android」を選択します。右下の「Library」の中にエラーがあるとインポートできないので、そのライブラリはメモして右の「Remove」ボタンで取り除いておきましょう。 |
| | | |
| メモしたライブラリは後でAndroid Studioでインポートしてから手動で加えます。 | | メモしたライブラリは後でAndroid Studioでインポートしてから手動で加えます。 |
| /YOUR_PATH/ndk-bundle/build/core/prebuilt-library.mk:45: *** Android NDK: Aborting . Stop. | | /YOUR_PATH/ndk-bundle/build/core/prebuilt-library.mk:45: *** Android NDK: Aborting . Stop. |
| | | |
- | これは最新のNDKは「arm64-v8a」というアーキテクチャでコンパイルしようとするのですが、cocos2d-x ver2ではそのための設定がないのでエラーになっています。 | + | これは最新のNDKは「arm64-v8a」というアーキテクチャでコンパイルしようとするのですが、cocos2d-x ver2.2ではそのための設定がないのでエラーになっています。 |
| | | |
| 古いアーキテクチャでコンパイルするように指定するために、jni/Application.mkの中に次の一行を加えます。 | | 古いアーキテクチャでコンパイルするように指定するために、jni/Application.mkの中に次の一行を加えます。 |
| まずbuild_native.shの中の「assets」を「app/src/main/assets」に置換します。appの部分はプロジェクトによって異なることがあります。確認するにはAndroid Studioでassetsフォルダを右クリックして「Copy Path」を選べばクリップボードにパスがコピーされるので、そこから分かります。 | | まずbuild_native.shの中の「assets」を「app/src/main/assets」に置換します。appの部分はプロジェクトによって異なることがあります。確認するにはAndroid Studioでassetsフォルダを右クリックして「Copy Path」を選べばクリップボードにパスがコピーされるので、そこから分かります。 |
| | | |
- | 次に出力されたlobgame.soをAndroid Studioが読み込む場所に移動させるため、最後に次の一行を加えます。 | + | 次に出力されたlibgame.soをAndroid Studioが読み込む場所に移動させるため、最後に次の一行を加えます。 |
| | | |
| cp $APP_ANDROID_ROOT/libs/armeabi/libgame.so $APP_ANDROID_ROOT/app/src/main/jniLibs/armeabi/libgame.so | | cp $APP_ANDROID_ROOT/libs/armeabi/libgame.so $APP_ANDROID_ROOT/app/src/main/jniLibs/armeabi/libgame.so |
| *gradle関連の修正 [#n09f94ff] | | *gradle関連の修正 [#n09f94ff] |
| | | |
| + | &font(Red){重要:ここで使っている「Experimental Plugin」は2017年10月に出たversion 0.11.0より後ではサポートされなくなりました。よってここに書いた方法も、使えなくなりました。CMakeを使うと簡単に移行できるので、以下の記事でそれを解説しています}; |
| + | |
| + | [[cocos2d-x/ver2系CMakeを使ってAndroid Studioに移行する]] |
| + | |
| + | &font(Red){CMakeを使う場合は、上の記事を参考にしてこの章は飛ばしてください。}; |
| | | |
| Android Studioにインポートすると以下のようなエラーが出ます。 | | Android Studioにインポートすると以下のようなエラーが出ます。 |
| compileSdkVersion 24 | | compileSdkVersion 24 |
| buildToolsVersion "24.0.0" | | buildToolsVersion "24.0.0" |
| + | |
| defaultConfig { | | defaultConfig { |
| applicationId "jp.njf.MyGame" | | applicationId "jp.njf.MyGame" |
| minSdkVersion.apiLevel 10 | | minSdkVersion.apiLevel 10 |
| targetSdkVersion.apiLevel 22 | | targetSdkVersion.apiLevel 22 |
| + | |
| ndk { | | ndk { |
| moduleName "game_shared" | | moduleName "game_shared" |
| } | | } |
| } | | } |
| + | |
| buildTypes { | | buildTypes { |
| release { | | release { |
| (以下dependenciesなど) | | (以下dependenciesなど) |
| | | |
- | 一行目の「apply plugin」の変更を忘れやすいので要注意です。 | + | 一行目の「apply plugin」や「minSdkVersion」「targetSdkVersion」の後ろの「apiLevel」の変更を忘れやすいので要注意です。 |
| | | |
| また、モジュールのgradleファイルの変更も必要です。 | | また、モジュールのgradleファイルの変更も必要です。 |
| | | |
| apply plugin: 'com.android.model.library' | | apply plugin: 'com.android.model.library' |
| + | |
| buildscript { | | buildscript { |
| repositories { | | repositories { |
| jcenter() | | jcenter() |
| } | | } |
| + | |
| dependencies { | | dependencies { |
| classpath 'com.android.tools.build:gradle:1.3.1' | | classpath 'com.android.tools.build:gradle:1.3.1' |
| } | | } |
| } | | } |
| + | |
| dependencies { | | dependencies { |
| compile 'com.google.android.gms:play-services-plus:9.+' | | compile 'com.google.android.gms:play-services-plus:9.+' |
| compile 'com.google.android.gms:play-services-games:9.+' | | compile 'com.google.android.gms:play-services-games:9.+' |
| compile 'com.android.support:recyclerview-v7:24.+' | | compile 'com.android.support:recyclerview-v7:24.+' |
- | compile 'com.android.support:appcompat-v7:24.2.0' | + | compile 'com.android.support:appcompat-v7:24.+' |
| } | | } |
| model { | | model { |
| 最初の「apply plugin」が変更され、他に「android」が「model」の中になります。 | | 最初の「apply plugin」が変更され、他に「android」が「model」の中になります。 |
| | | |
- | *ライブラリなどの調整 [#n16a4238] | + | *Manifestファイルからsdkのバージョンを取り除く [#x1bcf36c] |
| | | |
- | ライブラリの構成によっては、Cocos2dxActivityなどが見つからないとエラーになることがあります。この場合、最も簡単な解決はもとのeclipseにあるlibcocos2dxプロジェクトのbinの中にあるlibcocos2dx.jarをコピーしてAndroid Studioのlibsに加え、右クリックで「Add as Library」を選択、ライブラリとして取り込むことです。 | + | いつ頃からか分かりませんが、Manifestファイルからsdkのバージョンについての記述(min,compile,targetとか)を取り除かなければエラーになるようになりました。 |
| + | エラーメッセージをクリックすれば取り除いてくれることもあれば、そうでないものもあります。 |
| + | 手で消した方が早いでしょう。 |
| | | |
- | このとき、以下のCocos2dxBitmapでのエラーを避けるため、リリースするAPIのバージョンは21以下にするのがおすすめです。 | + | * ライブラリなどの調整 [#n16a4238] |
| | | |
- | 他にはソースをプロジェクト内にコピーしたり、モジュールとして取り込む方法もあります。こちらの方が個々の修正はしやすくなります。 | + | インポートの時に参照がうまくいっているとモジュールとして取り込まれますが、ライブラリの構成によっては、Cocos2dxActivityなどが見つからないとエラーになることがあります。%%この場合、最も簡単な解決はもとのeclipseにあるlibcocos2dxプロジェクトのbinの中にあるlibcocos2dx.jarをコピーしてAndroid Studioのlibsに加え、右クリックで「Add as Library」を選択、ライブラリとして取り込むことです。%% |
| | | |
- | 一方、jarファイルの方が一つjarを作るプロジェクトを作っておくと、そのjarを使い回せるのでいっせいに変更するのはそちらの方が楽です。またコンパイル時間も短くなります。 | + | %%このとき、後述のCocos2dxBitmapでのエラーを避けるため、リリースするAPIのバージョンは21以下にするのがおすすめです。%% |
| + | |
| + | 規約の変更や広告SDKなど外部ライブラリの都合などにより、APIレベルを低くしてリリースするのが難しくなってきているので、ソースをプロジェクト内にコピーしたり、モジュールとして取り込むのをおすすめします。 |
| + | |
| + | |
| + | |
| + | %%一方、jarファイルの方が一つjarを作るプロジェクトを作っておくと、そのjarを使い回せるのでいっせいに変更するのはそちらの方が楽です。またコンパイル時間も短くなります。%% |
| + | |
| + | %%どちらでも好きな方を選択してください。%% |
| | | |
| あとは他の必要なライブラリを取り込んであれば、ひとまずビルド可能となります。 | | あとは他の必要なライブラリを取り込んであれば、ひとまずビルド可能となります。 |
| 移行時によく起こるエラーとして以下の物があります。 | | 移行時によく起こるエラーとして以下の物があります。 |
| | | |
- | ***Cocos2dxBitmapクラスのFloatMathでエラー [#n019b611] | + | ** Google Play Servicesのゲームサービスで使うBaseGameUtilsのエラー [#m13b1462] |
- | API level 22よりdeprecatedになったので、FloatMathをMathに置きかえてください。またはAPI 21以下でリリースしてください。 | + | |
| | | |
- | ***HttpClientのエラー [#k5f1e689] | + | BaseGameUtilsをインポートして使おうとすると以下のエラーが出ます。 |
| | | |
- | HttpClientはFroyo以降では使えなくなるので、HttpURLConnectionに移行する必要があります。 | + | uses-sdk:minSdkVersion 1 cannot be smaller than version 9 declared in library |
| + | |
| + | %%BaseGameUtilsの中のAndroidManifest.xmlにuses-sdkがないために起こるので、ゲーム本体のAndroidManifest.xmlのuses-sdk句をコピーしてBaseGameUtilsのものに貼り付けると解決します。%% |
| + | |
| + | 現在ではManifestにSDKのバージョンを入れること自体が推奨されていないので、マニフェストからSDKのバージョンを入れてgradleファイルのSDKを上げればOKです。(2018.10.4追記) |
| + | |
| + | ** Cocos2dxBitmapクラスのFloatMathでエラー [#n019b611] |
| + | |
| + | API level 22よりdeprecatedになったので、FloatMathをMathに置きかえてください。%%またはAPI 21以下でリリースしてください。%% 外部ライブラリのなどの都合により、低いAPI levelではリリースしづらくなってきているので、書きかえる方が無難です。(2018.10.4追記)。 |
| + | |
| + | **HttpClientのエラー [#k5f1e689] |
| + | |
| + | HttpClientはFroyo以降では使えなくなるので、使っていた場合はHttpURLConnectionに移行する必要があります。 |
| | | |
| 詳しくは[[Android/HttpClientからHttpURLConnectionへ移行する]]を参照のこと。 | | 詳しくは[[Android/HttpClientからHttpURLConnectionへ移行する]]を参照のこと。 |
| | | |
- | ***dex関連のエラー [#v4444b77] | + | **dex関連のエラー [#v4444b77] |
| | | |
| Google Play Serviceの機能が増えたので、これをそのまま取り込んでしまうと起こることがあります。解決法は次の章を参照のこと。 | | Google Play Serviceの機能が増えたので、これをそのまま取り込んでしまうと起こることがあります。解決法は次の章を参照のこと。 |
| + | |
| + | **「getdtablesize」に関するエラー [#efcc5178] |
| + | Android NDKのバージョンを下げるとうまくいきます。詳しくは以下を参考にして下さい。 |
| + | [[cocos2d-x/ver2系のプロジェクトで「getdtablesize」に関するエラーが出た場合]] |
| + | |
| + | **BaseGameUtilsのエラーその2 [#vac5d1dd] |
| + | |
| + | 古いBaseGameUtilsを使っていると、Google Play Serviceを新しくしたときにエラーとなります。BaseGameUtils関連のjavaファイルとManifest、resフォルダなどを新しい物に入れ替えるとうまくいきます。 |
| + | |
| + | **android.permission.READ_PHONE_STATEのパーミッションが付け加わる [#ga4337af] |
| + | |
| + | android.permission.READ_PHONE_STATEのパーミッションがあるから、プライバシーポリシー追加しないといけない、とGoogle Playへアップロード時に言われることがあります。 |
| + | |
| + | これは、gradleファイルでminSdkVersionやtargetSdkVersionを指定しないと、デフォルトで1が適用されるため、古いAndroid端末での互換性を保つため勝手にパーミッションが付け加わるためらしいです。 |
| + | |
| + | よって、このエラーが発生したときは、全てのgradleファイルにSDKのバージョンが正しく定義されているかをチェックしてください。ライブラリのどれかで入れ忘れている可能性があります。 |
| | | |
| *Google Play Serviceについての注意 [#ye37b112] | | *Google Play Serviceについての注意 [#ye37b112] |