【GW企画】7日間でUnity製のカジュアルゲームを作る【6日目】

←【5日目】

「GW10連休を活かしUnityでカジュアルゲームを作ってリリースする企画」の6日目

6日目の計画

・Androidでのbuild
・iOSでのbuild
・Firebassの導入
・AdMobの導入

6日目にやったこと

Androidでのbuild

Androidのビルド環境の構築

▼導入ソフト
・Android Studio
・Android SDK Version4.0以上
・Java SE Development Kit 8u211
▼Android Studioへのパス設定
▼JDK
C:Program FilesJavajdk1.8.0_211
▼SDK
C:UsersUserNameAppDataLocalAndroidSdk
▼NDK
C:Program FilesAndroidandroid-ndk-r13b

※エラー修正の際に以下に修正

▼JDK
C:Program FilesJavajdk1.8.0_211
▼SDK
C:UsersUserNameAppDataLocalAndroidSdk
▼NDK
C:UsersUserNameAppDataLocalAndroidSdkndk-bundle

些細なビルド周りの対応のメモ

・Androidのbuildボタンがでない
→build SettingのAndroidタブでSwitchPlatformを押してなかった

a problem occurred evaluating root project ‘gradleout’のエラーがでる
→Unityのプロジェクトファイルの保存先のディレクトリー名に日本語が混ざっていた
(OneDriveのDocumentフォルダに格納していたのだが表記がドキュメントになっていたため、ローカルディレクトリに移した)

最低ビルドバージョンの引き上げ

最初にビルドした際、200以上のビルドエラーが発生して途方に暮れた。

UnityEditor.BuildPlayerWindow+BuildMethodException: 218 errors
  at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x00242] in C:buildslaveunitybuildEditorMonoBuildPlayerWindowBuildMethods.cs:194
  at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x0007f] in C:buildslaveunitybuildEditorMonoBuildPlayerWindowBuildMethods.cs:97
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

Androidのbuildセッティングを見たところ最小ビルドバージョンが設定されてなかったので、これを6.0まで引き上げした。
ここまででAPKファイルは生成できたものの、まだ20個近いエラーが残っていた。
また生成されたAPKファイルを開こうとしてもエラーで開けなかった。

イニシャライズ系のエラー

Recursive Serialization is not supported. You can't dereference a PPtr while loading. (Constructors of C# classes may not load objects either. See stacktrace.)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

UnityException: Find is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'Fly'.
See "Script Serialization" page in the Unity Manual for further details.
Fly..ctor () (at Assets/20_Script/PlayScene/Fly.cs

GameObjectの宣言コードをpublic classの直下からpublic void Start(){以下に移動させたら直った。

イニシャライズ系のエラーが直った後のエラー

なんかめっちゃ長いエラーが発生した。

CommandInvokationFailure: Gradle build failed.
C:Program FilesUnityEditorDataPlaybackEnginesAndroidPlayer/ToolsOpenJDKWindowsbinjava.exe -classpath "C:Program FilesUnityEditorDataPlaybackEnginesAndroidPlayerToolsgradlelibgradle-launcher-4.6.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleRelease"
stderr[
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':packageRelease'.
> C:UsersUserNameAppDataLocalTemptempdir_8632495236479996908: failed to delete one or more files; see suppressed exceptions for details
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 16s
]
stdout[
:checkReleaseClasspath
:preBuild UP-TO-DATE
:preReleaseBuild
:compileReleaseAidl NO-SOURCE
:compileReleaseRenderscript
:checkReleaseManifest
:generateReleaseBuildConfig
:prepareLintJar
:mainApkListPersistenceRelease
:generateReleaseResValues
:generateReleaseResources
:mergeReleaseResources
:createReleaseCompatibleScreenManifests
:processReleaseManifest
:splitsDiscoveryTaskRelease
:processReleaseResources
:generateReleaseSources
:javaPreCompileRelease
:compileReleaseJavaWithJavac
:compileReleaseNdk NO-SOURCE
:compileReleaseSources
:lintVitalRelease
:mergeReleaseShaders
:compileReleaseShaders
:generateReleaseAssets
:mergeReleaseAssets
:transformClassesWithDexBuilderForRelease
:transformDexArchiveWithExternalLibsDexMergerForRelease
:transformDexArchiveWithDexMergerForRelease
:mergeReleaseJniLibFolders
:transformNativeLibsWithMergeJniLibsForRelease
:checkReleaseLibraries
:processReleaseJavaRes NO-SOURCE
:transformResourcesWithMergeJavaResForRelease
:validateSigningRelease
:packageRelease FAILED
28 actionable tasks: 28 executed
]
exit code: 1
UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at :0)
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at :0)
UnityEditor.Android.Command.Run (System.String command, System.String args, System.String workingdir, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at :0)
UnityEditor.Android.AndroidJavaTools.RunJava (System.String args, System.String workingdir, System.Action`1[T] progress, System.String error) (at :0)
UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingdir, System.String task, System.Action`1[T] progress) (at :0)
Rethrow as GradleInvokationException: Gradle build failed
UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingdir, System.String task, System.Action`1[T] progress) (at :0)
UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at :0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at :0)
Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown.
UnityEditor.Android.PostProcessor.CancelPostProcess.AbortBuild (System.String title, System.String message, System.Exception ex) (at :0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at :0)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (UnityEditor.BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at :0)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at :0)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:281)
UnityEditor.BuildPlayerWindow:BuildPlayerAndRun()

以下の記事を参考にしながら解消方法を探す。

・参考記事)僕たちはいつまでこんな楽しいAndroid Studio設定をし続けるのか? Android Studio 3.x時代の設定不足解消メモ
・参考記事)【Unity2018対応】Androidビルドでエラーが出る場合の対処法
・参考記事)【Unity】Unity2018 でビルドエラー「CommandInvokationFailure: Gradle build failed.」が出る  

Android NDKをサイト配布されていたものをダウンロードして利用していたのだが、Android StudioのSDK マネージャー経由でNDKをダウンロードして、NDKのパスを書き換えたら直った。
バージョン互換性の問題だったのか…。
よく確認せずに導入作業していたツケだ…。

▼JDK
C:Program FilesJavajdk1.8.0_211
▼SDK
C:UsersUserNameAppDataLocalAndroidSdk
▼NDK
C:UsersUserNameAppDataLocalAndroidSdkndk-bundle

“Can not sign the application” エラー

・参考記事:UnityのAndroidビルド時にkeystoreのパスワードを毎回要求しないようにする

build setting内のPublishing settingのCustom KeyStoreのチェックを外したら直った。

Windows上の仮想Android端末にインストール

“Unable to install APK to device.“というエラー

仮想のAndroid端末を立ち上げるのを忘れたままRunさせたらエラーがでた。
AndroidStudioから AVD Managerを開き適当な仮想端末を起動したら直った。

NO_MATCHING_ABISというエラー

[INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

参考記事)Androidのエミュレーターにapkファイルをインストールしたい
参考記事)UnityのAndroid Build&Runができなくなったら考えること。

どうやらAVDマネージャーから立ち上げた仮想端末だとビルドできないっぽかった。
ただARM用の仮想デバイスを立ち上げても重すぎて使い物にならなかった。

build settingを確認したところTarget ArchitecturesのチェックマークがARMv7にしか入ってなかった。x86にチェックを入れたら無事解消し仮想端末でインストール起動できた。

Androidビルド成功後の不具合修正

起動時に起動シーンが指定できていない

File > Build Settingsでビルド設定ダイアログが表示されます。
Scenes in Buildの一番上(ID0)のシーンが最初に読み込まれます。
(ドラッグ&ドロップで並び替え出来ます)

Canvas内のUIに設置してるフォントがズレる

・参考記事)uGUIで設置したUIが端末の解像度によってずれる問題
・参考記事)Unity ビルド時にUIの大きさがおかしいのを適切に変えて直す方法

Canvas ScalerのUI Scale ModeをScale with Screen Sizeに設定し、UIの配置を再調整したら直った。

影が無くなったり描写が汚くなった件の対応

・参考記事)Unityで影が汚く表示される場合の対処
・参考記事)Android Shadows not visible

①Shadow Type内のResolutionをVery High Resolutionに変更

①Shadow Type内のResolutionをVery High Resolutionに変更

②Project Settings内のQualityタブ選択後のShadow Distanceを30~15に変更(最終的には15)

③Project Settings内のQualityタブ選択後のQualityをMedium以上に変更(最上部にあるチェックボックス)

Project Settings内のQualityタブ選択後のShadow Distance

GooglePlayアップロード

以下サイトを参考にGooglePlayのアカウント開設とアップロードを行った。
Buildエラーさえ解消すればあとは手順通りの対応で問題なくアップロードできた。
アップロードして公開モードにしてから1時間以内にGooglePlayで公開された。

6日目の振り返り

エラー解消に丸々一日かかってしまいスケジュールは大遅延。
(調整前にビルドに踏み切ったのは結果的によかった。調整してからビルドだったら公開間に合わない可能性あったし…)
AdMobとFirebaseなどのSDK導入もしてみたかったがiOS考えると時間的に厳しい感じ。
7日目はiOSのビルドをやる。→【GW企画】7日間でUnity製のカジュアルゲームを作る【7日目】

タイトルとURLをコピーしました