Unity製アプリのアップデート記録

あまりに更新が面倒だったので、記録としておいておこうかと。

現行 Unityバージョン 5.5.3p3

更新対象 Unityバージョン 2017.2.0p1

Unityの更新が面倒というより、Google Playのライブラリの更新がひどい。しんどい。

更新するライブラリ

NCMB
Google Play Games
Google Analytics V4
Google Mobile Ads

コンバート後
Android版がエラー表示が出てコンパイルできない。

<エラー内容>
ResolutionException: Cannot find candidate artifact for com.google.android.gms:play-services-ads-lite:[11.0.4]

ADSなのでGoogle Mobile AdsのPlayResolverが原因と予測。
Google Mobile Adsを最新版に入れ替えてみる

https://github.com/googleads/googleads-mobile-unity/releases からGoogleMobileAds.unitypackage(3.9.0)
をダウンロードしてとりあえず全部入れ替えてみる。

ダブったライブラリとか削除するよ?のメッセージにもちろん!と答える。
10.0.だったPlayServiceが11.6.0に置き換えられる。

とりあえず見た目、エラーがなくなったのでコンパイル!

バーン!エラー
error CS0117: `UnityEngine.Application’ does not contain a definition for `bundleIdentifier’

bundleIdentifierって使えないぜ!って出てる。
これは僕の問題。
Application.bundleIdentifierってApplication.identifierに最新では変わっているので修正

再度コンパイル!

どんどん進んでいく。これでOK?
楽勝楽勝!

またバーン!エラー!

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzk;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzm;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzn;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzo;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzp;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzq;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzr;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzzs;

Temp/StagingArea/android-libraries/appcompat-v7-24.0.0/libs/./classes.jar…

二重でGoogle Play Serviceを追加してるぜ!エラー。
appcompat-v7-24.0.0が邪魔してるみたい。他にないけど、たぶん、どっかと統合されて混ざってるんだろうということで消しちゃえ!

またまたコンパイル!

バーン!

まだ、解消されてない!
うーん、うーん。
エラーが増えた。。。。
purchasingって項目が増えてるということは。。。多分ここにもGoogle Play Service入ってるし。
一度アプリ内課金もアップしておこう。

ServiceからUnity IAPを更新
再度、UnityIAPをインポート。
うひゃーいっぱい更新された。

とりあえずエラーは出てないからコンパイルをと。
まあ、またエラー出るよね。きっと。

なんか競合してるんだよなあ。

バーン。はいダメでした。
やっぱり、 Google Play Serviceだろなあ。
play-services-clearcut-10.2.1
とかバージョン違って何に使ってるかわからないのあるし。とりあえず削除してみる。

コンパイル!
何回やってるんだろう。。。
おおっ!前より進んだ!
play-services-clearcut-10.2.1が何かに統合されてたんや!たぶん。。。。

おおっ!コンパイル完了!
いやー長かった。超しんどかった。

さてさて、早速インストール。もともと動いてたんやし、コンパイル通ったんやから大丈夫やろう。

クラーーーーーッシュ!

まじかよ。

Android Studioを起動。ログを見る。。
java.lang.NoSuchMethodError: No static method getNoBackupFilesDir(Landroid/content/Context;)Ljava/io/File; in class Lcom/google/android/gms/common/util/zzw;

メソッドが見つからない。Google Serviceで。
堪忍してえなあ。
at com.google.android.gms.iid.zzd.zzeK(Unknown Source:2)

iidというのが原因?
そういえば、play-services-gcm-10.0.1とplay-services-iid-10.0.1とplay-services-analytics-10.0.1
がバージョン更新されてへん。
前の2つはNCMBを入れた時にインポートされたやつやから、通信関連か。
NCMBの新しいの入れて見るか。

NCMB.3.1.0の新しいのをダウンロードしてインポート。
play-services-gcm-11.0.0、play-services-iid-11.0.0

support系は今、25.2.0なのに26.0.2?
まじで?

混在したら動かんいうてたからどっちかに統一せんとあかん。
新しい方がええに決まってるし、
supportは26.0.2にしとこか。
serviceは11.0.6にするから、今はインポートなしで。

インポート!
うわっ。NcmbGcmPluginが2つある。。。
NcmbGcmPlugin.jarとNcmbGcmPlugin.aar

インポートする前に後始末してよ。
NcmbGcmPlugin.jarが古いやつやから削除。

Assets/Scripts/MiniJSON.cs(76,25): error CS0101: The namespace `MiniJSON’ already contains a definition for `Json’

ちょ。MiniJSONだぶってるやん。
それも削除。

いまの11.6.0とかどこで作られてるんやろうとみると

GooglePlayGamesのGPGSDependencies.csで書かれてるっぽいので、そこに11.6.0とついでにsupport-v4は27+にしたろ。
どうせ8.0対応で後からトラブル出るやろし、最新にしといたろ。

おおっ。play-services-analytics-10.0.1以外は全部11.6.0になってる。play-services-analytics-10.0.1は。。。。後回し。
これでコンパイルや!

バーン
adjusted AndroidManifest.xml about android:hardwareAccelerated. Please rebuild the app.

うぉおおおおおー最悪!
NCMB、AndroidManufest.xml上書きしてるやん。
設定全部飛んでる。
というか、プラグインで直接上書きするのっておかしくないですかね?

もちろん、バックアップから復元。

なんとか無事にコンパイル。今度こそは!の期待。

やった!!!
でも通知が送れない。。。。

あ。。。やっぱやりやがった。
NCMBSettings、NCMBManagerの関連付けが消えてる。Missing!
これどうにかならんのですかね。プラグイン入れ替えたらMissing。怖すぎ。

関連付けを再度しなおして、コンパイル!
いくぜ今度こそは!
クラッシュもしてないし大丈夫だ。小僧大丈夫だ。

もう一度期待を込めてインストール!
バッチリや!!!!

さて、ちぇっくちぇっく。
うんうん、普通に動いてる。大丈夫大丈夫。。。。。

クラーーーーーーッシュ!!

Google Play Gamesでログがネイティブでクラッシュ。

やっぱり、お前もか。。。。
そんなに甘くないな。

GooglePlayGamesPlugin-0.9.42.unitypackage
最新版をインポート!
この辺りは勝手にみんな作ってるので、同じ項目を上書きしないように気をつける。
特にPlayResolver。

よしよし。バージョンは最新やな。
これならインポートしてもええはず。

バーン!エラー!
Assets/GooglePlayGames/Editor/GPGSDependencies.cs(95,26): error CS0117: `GooglePlayGames.GameInfo’ does not contain a definition for `RequireGooglePlus’
お前なあ。。。
ええわ。Plusなんか使えへんからコメントアウトしたる。

どや!

ぎゃーーーーーーーなんでsupportが 25.2.0に戻るねん!
GPGSDependencies.csをやっちまったか。。。。
って。。。あれ?

GPGSDependencies.xmlになってる。。。。仕様変わってるやないか!

落ち着け。たぶん、一緒や。
同じように修正してみる。

<androidPackage spec=”com.google.android.gms:play-services-gcm:10+”>
<androidSdkPackageIds>
<androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
</androidSdkPackageIds>
<repositories>
<repository>https://maven.google.com</repository>
</repositories>
</androidPackage>

<androidPackage spec=”com.google.android.gms:play-services-iid:10+”>
<androidSdkPackageIds>
<androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
</androidSdkPackageIds>
<repositories>
<repository>https://maven.google.com</repository>
</repositories>
</androidPackage>
<androidPackage spec=”com.android.support:support-v4:27.0+”>
<androidSdkPackageIds>
<androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
</androidSdkPackageIds>
<repositories>
<repository>https://maven.google.com</repository>
</repositories>
</androidPackage>

を追加。

ばっちり!
これでコンパイルや!

バーン!エラー
Error: Duplicate file(s) in apk: ‘/Temp/StagingArea/android-libraries/gpgs-plugin-support-0.9.42/libs’

ググったら、Unityが悪いって書いてある。。。ちゃう絶対ちゃう。
Assetsの中をみる。

すると。。。
gpgs-plugin-support-0.9.42/libs
libs’

armeabi-v7a/libgpg
x86/libgpg

がダブってやがった。
あきらかに仕様変更して、前のものを放ったらかしにした結果や。
雑、ほんま雑。

古い方?を削除。

コンパイル!

よし、今度はOK。
インストーーーール!

エラーーーーー
Using Google Play games services requires a metadata tag with the name “com.google.android.gms.games.APP_ID”

設定してるわいなんでやねん!

って見るとエラー。。。
System.IO.DirectoryNotFoundException: Could not find a part of the path “/Assets/GooglePlayGames/Plugins/Android/GooglePlayGamesManifest.plugin/AndroidManifest.xml”.
なんでやねん。
と思ってもう一回インポートを試みると。現れた。
Plugin項目。
バグってんの?

インポート再開!
コンパイル!

エラー!
インポートしたのが見つからないってよ。
たぶん、キャッシュってとこかな。再読み込みすればいいべ。ReImportAll。
コンパイル!
成功!

インストールしてみる。もう大丈夫やろ。
Google Play Gamesをクリック!
バッチリ!ランキング表示。

やった!!!!!!

あとは気になる。。。Analytics。。。
最新版をDL。
GoogleAnalyticsV4_bitcodeをインポート!
おっと、あぶない。PlayResolverが古い。
これは除外。

それ以外は大丈夫そうなのでインポート。

play-services-analyticsも無事更新。

でも気をつけろ。インポートし直した時にPrefabが壊れる。

Analyticsを入れたシーンを表示Missing Prefab。。。やっぱり。
差し替えて完了。

もう一度コンパイル。

今度はバッチリ動作OK!

Unityは作るのは楽だけど、こういうネイティブな部分が超しんどい。
ネイティブプラグインはなるべく使いたくないなあ。もしくは自分で作る方が安全かもしれないと思った。

イラスト利用規約

イラストは規約を遵守することでご利用いただけます。
なお、著作権は放棄しておりません。

<利用する際に必要な条件>
下記のクレジットとリンクを制作物に記載すること
・クレジット:(C)声で応援 Illustrated by 羊ラジオ
・リンク先:http://www.gamekozo.com/illust

<利用を許可されるもの>
・無償・有償問わずご利用いただけます。
・アプリやソフトウェアに利用していただけます。
・HPやアイコンとして利用いただけます。
・印刷物に利用いただけます。

<利用を許可しないもの>
・二次配布すること。
・イラストそのものを販売すること、またはそれに類すること。
・自らのイラストと偽ること。
・グロテスク・わいせつな表現・露骨な性描写の内容・写真を含むものやそれに準ずるものに使用すること。
・暴力的な表現および人種、性別、宗教、国籍、身体障害、性的嗜好または年齢による差別を含むものやそれに準ずるものに使用すること。
・公序良俗・法令などに違反する内容を含むものやそれに準ずるものに使用すること。
・政治的志向の強いものに利用すること。

<免責事項>
・イラストをご利用になることにより発生するトラブルなどに関しましては当方は責任を持ちません。
・利用規約は当方の裁量で更新できるものとします。

×