ページへ戻る

− Links

 印刷 

cocos2d-x ver2系のプロジェクトをAndroid Studioに移行する のバックアップの現在との差分(No.13) :: NJF Wiki

xpwiki:cocos2d-x ver2系のプロジェクトをAndroid Studioに移行する のバックアップの現在との差分(No.13)

« Prev[4]  Next »[5]
13: 2018-05-14 (月) 15:54:05 njf[6] ソース[7] バックアップ No.13 を復元して編集[8] 現: 2018-10-08 (月) 04:00:42 njf[6] ソース[9] 編集[10]
Line 1: Line 1:
*はじめに [#z941726c] *はじめに [#z941726c]
-&font(Red){重要:ここで使っている「Experimental Plugin」は2017年10月に出たversion 0.11.0より後ではサポートされなくなりました。よってここに書いた方法も、使えなくなりました。&br;};+&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に移さなくてはいけなくなってきました。
Line 41: Line 41:
 /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の中に次の一行を加えます。
Line 67: Line 67:
*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にインポートすると以下のようなエラーが出ます。
Line 115: Line 120:
       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 {
Line 142: Line 147:
 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.+'
Line 169: Line 174:
最初の「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を使い回せるのでいっせいに変更するのはそちらの方が楽です。またコンパイル時間も短くなります。%% 
 + 
 +%%どちらでも好きな方を選択してください。%%
あとは他の必要なライブラリを取り込んであれば、ひとまずビルド可能となります。 あとは他の必要なライブラリを取り込んであれば、ひとまずビルド可能となります。
Line 186: Line 199:
移行時によく起こるエラーとして以下の物があります。 移行時によく起こるエラーとして以下の物があります。
-**Google Play Servicesのゲームサービスで使うBaseGameUtilsのエラー [#m13b1462]+** Google Play Servicesのゲームサービスで使うBaseGameUtilsのエラー [#m13b1462]
BaseGameUtilsをインポートして使おうとすると以下のエラーが出ます。 BaseGameUtilsをインポートして使おうとすると以下のエラーが出ます。
Line 192: Line 205:
 uses-sdk:minSdkVersion 1 cannot be smaller than version 9 declared in library  uses-sdk:minSdkVersion 1 cannot be smaller than version 9 declared in library
-BaseGameUtilsの中のAndroidManifest.xmlにuses-sdkがないために起こるので、ゲーム本体のAndroidManifest.xmlのuses-sdk句をコピーしてBaseGameUtilsのものに貼り付けると解決します。+%%BaseGameUtilsの中のAndroidManifest.xmlにuses-sdkがないために起こるので、ゲーム本体のAndroidManifest.xmlのuses-sdk句をコピーしてBaseGameUtilsのものに貼り付けると解決します。%%
-**Cocos2dxBitmapクラスのFloatMathでエラー [#n019b611] +現在ではManifestにSDKのバージョンを入れること自体が推奨されていないので、マニフェストからSDKのバージョンを入れてgradleファイルのSDKを上げればOKです。(2018.10.4追記) 
-API level 22よりdeprecatedになったので、FloatMathをMathに置きかえてください。またはAPI 21以下でリリースしてください。+ 
 +** Cocos2dxBitmapクラスのFloatMathでエラー [#n019b611] 
 + 
 +API level 22よりdeprecatedになったので、FloatMathをMathに置きかえてください。%%またはAPI 21以下でリリースしてください。%% 外部ライブラリのなどの都合により、低いAPI levelではリリースしづらくなってきているので、書きかえる方が無難です。(2018.10.4追記)。
**HttpClientのエラー [#k5f1e689] **HttpClientのエラー [#k5f1e689]
Line 214: Line 230:
古いBaseGameUtilsを使っていると、Google Play Serviceを新しくしたときにエラーとなります。BaseGameUtils関連のjavaファイルとManifest、resフォルダなどを新しい物に入れ替えるとうまくいきます。 古い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]
« Prev[4]  Next »[5]