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