ビルド、インストール、実機でのデバッグ
Assets/
Scripts/
Settings/
Assets/ の外
プロジェクトの設定
すでにあるものこのレッスンで追加
設定はすべて終わり、Knight は進行状況を保存できるようにもなりました。ここからはボタンを押してファイルを実機に転送し、うまく動かないときにログを読む方法を学びます。
シーンとアセットを入れると、インストールできるパッケージが出てきます。
ビルドして実行
- 1
。まだテスト中なら Development Build にチェックを入れておいてください。
- 2
スマホを接続したまま Build And Run を押します。Unity がビルド・インストール・起動を一度に済ませます。
- 3
保存先は Builds/game-dev.apk にします。Assets/ の中にだけは置かないでください——Unity が自分のビルドを読み込もうとしてしまいます。
- 4
最初のビルドは 10〜20 分かかります。以降設定が同じなら 1〜3 分です。
署名——みんなが忘れる部分
デバッグビルドは一時の鍵で署名されます。一方リリースビルドには自分の keystore が必要で、これがないと更新に署名できません。Google Play は失くした upload key を再設定してくれますが、サポートへの申請に数日かかります——他の多くのストアではそもそも対応してもらえません。
- 1
で新しい keystore を作成します。
- 2
プロジェクトフォルダの外に保存し、2カ所にバックアップを残してください。このファイルは二度と手に入らないものと思って扱ってください。
- 3
.keystore もそのパスワードも git にはコミットしません。今すぐ *.keystore を .gitignore に入れておきましょう。
- 4
ストア用には Development Build のチェックを外し、Build App Bundle (Google Play) にチェックを入れてから Build を押します。
adb で手動インストールする
# install, replacing an existing copy
adb install -r Builds/game-dev.apk
# uninstall when the signature changed
adb uninstall com.yourstudio.yourgame
# launch it without touching the phone
adb shell monkey -p com.yourstudio.yourgame 1
# copy a build to the phone's Downloads folder
adb push Builds/game-dev.apk /sdcard/Download/実機のログを読む
スマホではクラッシュするのにエディタでは正常に動く——そんなとき原因を教えてくれるのは logcat だけです。
# only Unity's messages — this is the one you want
adb logcat -s Unity
# clear the old log first so you only see this run
adb logcat -c && adb logcat -s Unity
# save it to a file to read carefully
adb logcat -s Unity > crash.txt自分が書いた Debug.Log はすべて、実機上で、リアルタイムにここへ表示されます。
NullReferenceException で始まる行を探します。その下のスタックトレースに、正確なスクリプトと行番号が書かれています。
Unity 側のメッセージが全くないクラッシュは、たいていネイティブ側の問題です——メモリ不足か、ARM64 のライブラリが見つからないか。
ケーブルのないテスト担当者向けの画面内ログ
using System.Collections.Generic;
using UnityEngine;
public class ScreenLogger : MonoBehaviour
{
private readonly List<string> lines = new List<string>();
[SerializeField] private int maxLines = 14;
void OnEnable() => Application.logMessageReceived += Handle;
void OnDisable() => Application.logMessageReceived -= Handle;
void Handle(string message, string stack, LogType type)
{
lines.Add($"[{type}] {message}");
if (lines.Count > maxLines) lines.RemoveAt(0);
}
void OnGUI()
{
GUI.skin.label.fontSize = 26;
GUI.Label(new Rect(20, 20, Screen.width - 40, Screen.height - 40),
string.Join("\n", lines));
}
}ストアにアップロードする前に
Development Build のチェックを外します——デバッグ用ビルドは遅く、公開もできません。
低スペックの端末でも最低 1 台はテストしてください。レビューを書いているのは安めのスマホのユーザーです。
Notch のあるスマホとタブレットの両方で確認します——UI のアンカリングのバグはそこで姿を現します。
Play Console の必須条件:AAB であること、target API level が 1 年以内であること、プライバシーポリシーの URL、512×512 のアイコン。