5: 2016-08-23 (火) 10:38:00 njf |
6: 2016-08-23 (火) 14:52:46 njf |
- | &font(Red){※制作中です。}; | |
- | | |
| *はじめに [#z941726c] | | *はじめに [#z941726c] |
| | | |
| メモしたライブラリは後でAndroid Studioでインポートしてから手動で加えます。 | | メモしたライブラリは後でAndroid Studioでインポートしてから手動で加えます。 |
| | | |
- | 今までeclipseで開発していたのだからエラーは無いはず、と思われるかも知れませんが、Android SDKのアップデートなどでディレクトリが変わったり無くなったりすることもあり、以外にエラーが出ていることがあるので注意が必要です。 | + | 今までeclipseで開発していたのだからエラーは無いはず、と思われるかも知れませんが、Android SDKのアップデートなどでディレクトリが変わったり無くなったりすることもあり、意外にエラーが出ていることがあるので注意が必要です。 |
| | | |
| **Android Studioからインポート [#z8ff64d5] | | **Android Studioからインポート [#z8ff64d5] |
| Android Studioのメニュー「File->New->Import Project」を選択し、eclipseのプロジェクトディレクトリを選択します。 | | Android Studioのメニュー「File->New->Import Project」を選択し、eclipseのプロジェクトディレクトリを選択します。 |
| | | |
| + | インポート先のディレクトリも先ほどのディレクトリと同じにして上書きします。そのため、前述のようにかならずバックアップを取っておいて下さい。 |
| + | |
| + | これでbuild_native.shなどがそのまま残るため、これを使ってコンパイルやリソースのコピーができるようになります。 |
| + | ただし、Application.mkやassetsなどのフォルダがインポート前と後で2重に存在しているので、build_native.shが参照しているのが古いeclipseのものであることに注意が必要です。特にApplication.mkとAndroid.mkはAndroid Studioから編集できる「app/src/main/jni」以下の物ではなく、「jni」以下のものを編集するようにしてください。 |
| + | |
| + | このままbuild_native.shを実行すると以下のようなエラーが出ます。 |
| + | |
| + | Android NDK: Check that /YOUR_PATH/libs/cocos2dx/platform/third_party/android/prebuilt/libjpeg/libs/arm64-v8a/libjpeg.a exists or that its path is correct |
| + | /YOUR_PATH/ndk-bundle/build/core/prebuilt-library.mk:45: *** Android NDK: Aborting . Stop. |
| + | |
| + | これは最新のNDKは「arm64-v8a」というアーキテクチャでコンパイルしようとするのですが、cocos2d-x ver2ではそのための設定がないのでエラーになっています。 |
| + | |
| + | 古いアーキテクチャでコンパイルするように指定するために、jni/Application.mkの中に次の一行を加えます。 |
| + | |
| + | APP_ABI := armeabi |
| + | |
| + | 前述のようにAndroid Studioから修正できるApplication.mkとは違うのでファイル間違いに注意してください。かならずエディタなどからこのパスのものを修正してください。 |
| + | |
| + | このAPP_ABIを変えることによっていろいろなアーキテクチャに対応したり、複数のアーキテクチャのコンパイルも同時にできるようになりますが、cocos2dx ver2のころに作った物ならおそらくarmeabiで問題ないと思います。 |
| + | |
| + | これでbuild_native.shは動くのですが、出力されるlibgame.soや、コピーされるassetsのパスをAndroid Studioで利用する場所に変える必要があり、そのためにbuild_native.shの中を書き換えます。 |
| + | |
| + | |
| + | まずbuild_native.shの中の「assets」を「app/src/main/assets」に置換します。appの部分はプロジェクトによって異なることがあります。確認するにはAndroid Studioでassetsフォルダを右クリックして「Copy Path」を選べばクリップボードにパスがコピーされるので、そこから分かります。 |
| + | |
| + | 次に出力されたlobgame.soをAndroid Studioが読み込む場所に移動させるため、最後に次の一行を加えます。 |
| + | |
| + | cp $APP_ANDROID_ROOT/libs/armeabi/libgame.so $APP_ANDROID_ROOT/app/src/main/jniLibs/armeabi/libgame.so |
| + | |
| + | (長いので折り返されていますが、一行です) |
| + | こちらもappの部分はプロジェクトによって変わることがあります。 |
| + | |
| + | これでコンパイルされ、リソースのコピーも行われるようになりました。 |
| + | |
| + | *gradle関連の修正 [#n09f94ff] |
| + | |
| + | |
| + | Android Studioにインポートすると以下のようなエラーが出ます。 |
| + | |
| + | Error:(12, 0) NDK integration is deprecated in the current plugin. |
| + | Consider trying the new experimental plugin |
| + | Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration |
| + | |
| + | これはNDK関連のプラグインが古いので、新しい実験的なのを試してみては、というメッセージです。なので、そのプラグインを使います。 |
| + | |
| + | こちら([[Experimental Plugin User Guide:http://tools.android.com/tech-docs/new-build-system/gradle-experimental]])を参考にしてGradle関係のファイルを更新します。 |
| + | |
| + | まず、./gradle/wrapper/gradle-wrapper.propertiesを変更します。 |
| + | 最後のdistributionUrlを最新の物とします。しかし、これはAndroid Studioにインポートしたときに、エラーメッセージで最新版への更新を促され、それをクリックするとすでに変更されています。まだの場合は最新のものに変えてください。2016年8月現在では2.14.1が最新なので以下のようになります。 |
| + | |
| + | distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip |
| + | |
| + | 次に実験的なツールを使うためにプロジェクト直下のbuild.gradleを変更します。 |
| + | dependencies { |
| + | classpath 'com.android.tools.build:gradle:2.1.3' |
| + | } |
| + | となっているところを |
| + | dependencies { |
| + | classpath "com.android.tools.build:gradle-experimental:0.7.3" |
| + | } |
| + | と変更します。 |
| + | このとき「0.7.3」はgradleのバージョンによってことなり、[[Experimental Plugin User Guide:http://tools.android.com/tech-docs/new-build-system/gradle-experimental]]に以下のような一覧表があるのでそれを見てあわせます。 |
| + | |
| + | |Plugin Version|Gradle Version| |
| + | |0.1.0|2.5| |
| + | |0.2.0|2.5| |
| + | |0.3.0-alpha3|2.6| |
| + | |0.4.0|2.8| |
| + | |0.6.0-alpha1|2.8| |
| + | |0.6.0-alpha5|2.10| |
| + | |0.7.0-alpha1|2.10| |
| + | |0.7.0|2.10| |
| + | |0.7.3|2.14.1| |
| + | |
| + | たとえば「2.14.1」に対しては「0.7.3」なのでそれを指定します。 |
| + | |
| + | さらに/app/build.gradleも「[[Experimental Plugin User Guide:http://tools.android.com/tech-docs/new-build-system/gradle-experimental]]」を参考に修正します。 |
| + | たくさん書いてありますが、このうち実際に必要なのはbuildTypesぐらいなので、例えば以下のようになります。 |
| + | |
| + | apply plugin: "com.android.model.application" |
| + | model { |
| + | android { |
| + | compileSdkVersion 24 |
| + | buildToolsVersion "24.0.0" |
| + | |
| + | defaultConfig { |
| + | applicationId "jp.njf.MyGame" |
| + | minSdkVersion.apiLevel 10 |
| + | targetSdkVersion.apiLevel 22 |
| + | |
| + | ndk { |
| + | moduleName "game_shared" |
| + | } |
| + | } |
| + | |
| + | buildTypes { |
| + | release { |
| + | minifyEnabled false |
| + | proguardFiles.add(file("proguard-rules.pro")) |
| + | } |
| + | } |
| + | } |
| + | } |
| + | (以下dependenciesなど) |
| + | |
| + | 一行目の「apply plugin」の変更を忘れやすいので要注意です。 |
| + | |
| + | また、モジュールのgradleファイルの変更も必要です。 |
| + | 例えば、Google Play Serviceのランキングなどを使う時に必要な「BaseGameUtils」モジュールのgradleファイルは以下のようになります。 |
| + | |
| + | apply plugin: 'com.android.model.library' |
| + | |
| + | buildscript { |
| + | repositories { |
| + | jcenter() |
| + | } |
| + | |
| + | dependencies { |
| + | classpath 'com.android.tools.build:gradle:1.3.1' |
| + | } |
| + | } |
| + | |
| + | dependencies { |
| + | compile 'com.google.android.gms:play-services-plus:9.+' |
| + | compile 'com.google.android.gms:play-services-ads:9.+' |
| + | compile 'com.google.android.gms:play-services-games:9.+' |
| + | compile 'com.android.support:recyclerview-v7:24.+' |
| + | compile 'com.android.support:appcompat-v7:24.2.0' |
| + | } |
| + | model { |
| + | android { |
| + | compileSdkVersion 24 |
| + | buildToolsVersion "24.0.0" |
| + | } |
| + | } |
| + | |
| + | 最初の「apply plugin」が変更され、他に「android」が「model」の中になります。 |
| + | |
| + | *ライブラリなどの調整 [#n16a4238] |
| + | |
| + | ライブラリの構成によっては、Cocos2dxActivityなどが見つからないとエラーになることがあります。この場合、最も簡単な解決はもとのeclipseにあるlibcocos2dxプロジェクトのbinの中にあるlibcocos2dx.jarをコピーしてAndroid Studioのlibsに加え、右クリックで「Add as Library」を選択、ライブラリとして取り込むことです。 |
| + | |
| + | このとき、以下のCocos2dxBitmapでのエラーを避けるため、リリースするAPIのバージョンは21以下にするのがおすすめです。 |
| + | |
| + | 他にはソースをプロジェクト内にコピーしたり、モジュールとして取り込む方法もあります。こちらの方が個々の修正はしやすくなります。 |
| + | |
| + | 一方、jarファイルの方が一つjarを作るプロジェクトを作っておくと、そのjarを使い回せるのでいっせいに変更するのはそちらの方が楽です。またコンパイル時間も短くなります。 |
| + | |
| + | あとは他の必要なライブラリを取り込んであれば、ひとまずビルド可能となります。 |
| + | |
| + | *移行時によくあるエラー [#fd9d1ff2] |
| + | 移行時によく起こるエラーとして以下の物があります。 |
| + | |
| + | ***Cocos2dxBitmapクラスのFloatMathでエラー [#n019b611] |
| + | API level 22よりdeprecatedになったので、FloatMathをMathに置きかえてください。またはAPI 21以下でリリースしてください。 |
| + | |
| + | ***HttpClientのエラー [#k5f1e689] |
| + | |
| + | HttpClientはFroyo以降では使えなくなるので、HttpURLConnectionに移行する必要があります。 |
| + | |
| + | 詳しくは[[Android/HttpClientからHttpURLConnectionへ移行する]]を参照のこと。 |
| + | |
| + | ***dex関連のエラー [#v4444b77] |
| + | |
| + | Google Play Serviceの機能が増えたので、これをそのまま取り込んでしまうと起こることがあります。解決法は次の章を参照のこと。 |
| + | |
| + | *Google Play Serviceについての注意 [#ye37b112] |
| + | Google Play Serviceについては古いバージョンにくらべてメソッド数が多くなったようで、全て取り込むとメソッドの総数が65,535でなければならないという制限にひっかかってMulti-dex対応というのが必要となる事があります。広告の場合は「ads」のみを取り込む、といったように[[こちら:https://developers.google.com/android/guides/setup#split]]を参考に必要な機能に対応するものだけを使うようにした方が良いでしょう。 |
| | | |
| + | ゲームではadmobを使っていれば |
| | | |
| + | compile 'com.google.android.gms:play-services-ads:9.+' |
| | | |
- | ※制作中です。 | + | ゲームサービスを使っている場合、 |
| + | compile 'com.google.android.gms:play-services-games:9.+' |
| + | compile 'com.google.android.gms:play-services-plus:9.+' |
| | | |
- | *必要なライブラリをgradleに反映 [#n09f94ff] | + | 以上の3つぐらいで問題ないでしょう。バージョンは「9.+」としましたが、適宜必要なバージョンに読み替えてください。 |
| | | |
- | *ビルドの設定を変更 [#n16a4238] | + | 他にメソッドが大幅に増えたライブラリがなければ、cocos2dx ver2の移行の時に起こるMulti-dex問題はほとんどの場合これで解決します。 |