U
タブ 05モバイルへ書き出す7 レッスン — タップで開く
05 / 07 · 10 分
モバイルへ書き出す

ビルド、インストール、実機でのデバッグ

ここまでのプロジェクト

Assets/

Scripts/

MobileBoot.csSaveSystem.csScreenLogger.cs

Settings/

URP mobile asset

Assets/ の外

signed .apk / .aab

プロジェクトの設定

keystore

すでにあるものこのレッスンで追加

設定はすべて終わり、Knight は進行状況を保存できるようにもなりました。ここからはボタンを押してファイルを実機に転送し、うまく動かないときにログを読む方法を学びます。

アニメーション図

シーンとアセットを入れると、インストールできるパッケージが出てきます。

ビルドして実行

  1. 1

    File▸Build Profiles▸Android。まだテスト中なら Development Build にチェックを入れておいてください。

  2. 2

    スマホを接続したまま Build And Run を押します。Unity がビルド・インストール・起動を一度に済ませます。

  3. 3

    保存先は Builds/game-dev.apk にします。Assets/ の中にだけは置かないでください——Unity が自分のビルドを読み込もうとしてしまいます。

  4. 4

    最初のビルドは 10〜20 分かかります。以降設定が同じなら 1〜3 分です。

署名——みんなが忘れる部分

デバッグビルドは一時の鍵で署名されます。一方リリースビルドには自分の keystore が必要で、これがないと更新に署名できません。Google Play は失くした upload key を再設定してくれますが、サポートへの申請に数日かかります——他の多くのストアではそもそも対応してもらえません。

  1. 1

    Project Settings▸Player▸Publishing Settings▸Keystore Manager▸Create Newで新しい keystore を作成します。

  2. 2

    プロジェクトフォルダの外に保存し、2カ所にバックアップを残してください。このファイルは二度と手に入らないものと思って扱ってください。

  3. 3

    .keystore もそのパスワードも git にはコミットしません。今すぐ *.keystore を .gitignore に入れておきましょう。

  4. 4

    ストア用には Development Build のチェックを外し、Build App Bundle (Google Play) にチェックを入れてから Build を押します。

adb で手動インストールする

terminal
# 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 だけです。

terminal
# 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 のライブラリが見つからないか。

ケーブルのないテスト担当者向けの画面内ログ

ScreenLogger.cs
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 のアイコン。