Unityビルドにハマった時に見る備忘録


#最初に
これらは備忘録でざっと書いているので日本語がおかしかったりこの方法で直らない可能性があることをご了承ください

#Unityビルドに失敗する場合
##エラーが100個以上大量に出ている場合
エラーの量で雑に分類します。
エラーメッセージを見る。

Duplicate class com.google.android.gms.ads.identifie … と言われてる場合

例えばこのエラーメッセージの場合 java.lang.RuntimeException: Duplicate class com.google.android.gms.ads.identifier.AdvertisingIdClient found in modules classes.jar (:com.google.android.gms.play-services-ads-identifier-17.0.0:) and classes.jar (:play-services-ads-identifier-17.0.0:)

aarファイルが重複している。この場合下記の

:com.google.android.gms.play-services-ads-identifier-17.0.0
:play-services-ads-identifier-17.0.0:
これらが重複しているのでどちらかを消す。色々あると混在しがち。

> android.defaultConfig.versionCode is set to 0,but it should be a positive integer. と言われてる場合


bundleversionを1に上げる
初歩的ミス、エラー文を読めば解決できる。

###stderr[[:com.facebook.android.audience-network-sdk-6.5.0:] .gradle\caches\transforms-2\files-2.1\c963de5d67d5a7d76aeb83538e1cb427\AndroidManifest.xml:5:5-51 Error: やMissing 'package' key attribute on element package at [:com.facebook.android.audience-network-sdk-6.5.0:] AndroidManifest.xml:5:5-51 のようなことを言われる場合
FacebookSDKがバグっている可能性大、バージョン下げて対応する。FacebookSDKはあらゆるバグの御床で使用するのは本当にオススメしないので他のを使用するのを強く推奨。

BUILD FAILED in よりも前に unexpected element < queries> found in < manifest> エラーが出てこれ以外に特に何も言われていない場合

原因不明、SDKバージョンを過去のものに戻して対応する。
admobは19.4.0(android) 4.3.14(ios)
FacebookaudienceNetworkは6.2.0(android) 4.3.23(ios)
で動作確認。

###言われていない場合
治し方不明。諦めて広告SDK回りのバグを疑い過去のバージョンのSDKを試す。特にAdmobとFacebookの広告SDKでこの現象が起きやすい気がする。

#external dependency managerのForceResolveに失敗する場合
プロジェクトの保存されているフォルダ\Temp\PlayServicesResolverGradle\PlayServicesResolver.scripts.gradle-template.zip
をzipのまま開く。WinRAR等でzipのまま開ける
gradle\wrapper\gradle-wrapper.properties を開く
distributionUrl=https://services.gradle.org/distributions/gradle-5.1.1-bin.zip の5.1.1の部分を6.4.1にして保存する。

#元から入っているgradleがバグっている可能性があるため

C:\Users\ユーザー名.gradle\wrapper\dists\gradle-5.1.1-bin\文字列
内の中身を全部消し、
https://services.gradle.org/distributions/
から5.1.1のgradleをインストールして入れ直す

同じバージョンをDLして…


入れ直し

#キャッシュが何か悪さをしている可能性があるので

ここを開き

Javaをアンインストールして入れ直す。キャッシュ削除でも多分OK

また、JAVA_HOMEのパスが間違っていないか確認する。確認したらPC再起動して成功するか確かめる。
#xcodeでarchiveに失敗する場合(ios向け)
###The target “UnityFramework” contains source code developed with Swift 3.x. This version of Xcode does not support building or migrating Swift 3.x targets. Use Xcode 10.1 to migrate the code to Swift 4. と言われる場合
ビルド前処理として下記スクリプトを追加する

[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
    Debug.Log("TenjinSDK: Starting iOS Build");

    string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
    PBXProject project = new PBXProject();
    // A. ビルド結果のパスからPBXProjectを読み込み
    var targetGuid = project.GetUnityFrameworkTargetGuid();
    project.SetBuildProperty(targetGuid, "SWIFT_VERSION", "5.0");
}

#実機で落ちる場合
大体Admobが原因だが一応AndroidManifestやXcode等を使用してログを見る。
広告SDKを導入している場合ほぼ確実にAdmobSDKに設定漏れがあるので下記があるかを見る。
出力されるログは滅茶苦茶多いのでAdmobやUnityといったワードでフィルタリングすると良い。

******************************************************************************
* The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    *
* should follow the instructions here: https://goo.gl/fQ2neu to add a valid  *
* App ID inside the AndroidManifest. Google Ad Manager publishers should     *
* follow instructions here: https://goo.gl/h17b6x.                           *
******************************************************************************

このようなメッセージがある場合ADMOB_APP_IDを追加する必要がある
Android
https://developers.google.com/admob/android/quick-start#update_your_androidmanifestxml
iOS
https://developers.google.com/admob/ios/quick-start?hl=ja

###MadeWithUnityは出るがアプリその先に進めずアプリがクラッシュする場合
BurstAOT周りでエラーが出ていないか見る。
出ている場合playersettingsで無効にして焼き直す

#Appstoreに上げれない場合
###Unable to authenticate with App Store と言われる場合


MAC本体を再起動する。
#その他実機で問題がある場合
###実機インストールできない、アプリはインストールされていませんと出る場合
前のバージョンが邪魔しているのでアンインストールしてもう一回インストールする。
###エラーも無いのに勝手にアプリが落ちる
テストに使用している端末のスペック不足かアプリが激重、パフォーマンス改善をする必要があるので影の設定を変えたりとかして色々見直す。
チートガードツールや複垢アプリが誤作動していないか確かめる。調査用のを消し忘れてましたもあり得る。
そのプロジェクトで空シーンだけをビルドして動くか確かめる
また、BurstAOT設定周りも見直す。一旦全部無効で動作するかも確認する。