Help us understand the problem. What is going on with this article?

Unity3dBuilder Pluginを使ってJenkinsでUnityのビルドを自動化。Androidのapkを作ってみた

More than 1 year has passed since last update.

はじめに

UnityもJenkinsも初心者な筆者が、浅はかな知識でAndroidのapk出力までを自動化してみたチラ裏メモ。

前提

  • Unityは書籍とか公式ドキュメントをザッと読んでちょっとわかった気になったレベル
  • JenkinsもUnity同様ちょっとわかった気になったレベル
  • Unityの適当なサンプルプロジェクト用意して動かせる状態
  • Jenkins環境はMacのローカルで構築済みでジョブが動かせる状態
  • とりあえずUnityでアプリのビルドを自動化する流れを掴みたい
  • こまけぇこたぁいいんだよ!!

Unity3dBuilder Pluginを使う

Unityの知見が全然無いため「バッチモードで起動」とか言われてもちょっとよくわからなかったので、そのあたりを良い感じにやってくれるプラグイン『Unity3dBuilder Plugin』を使って楽することにした。

Jenkinsにプラグインをインストール

[Jenkinsの管理] - [プラグインの管理] - [利用可能] から「Unity3dBuilder Plugin」をインストールしてJenkinsを再起動

プラグインの設定

[Jenkinsの管理] - [システムの設定] - [Unity3d] の項目にて「名前」とUnityの「インストールディレクトリ」を設定

例)
名前:Unity5
インストールディレクトリ:/Applications/Unity/Unity.app

ビルド用のスクリプトを用意

  1. UnityプロジェクトのAssetsフォルダ配下に「Editor」フォルダを作成
  2. ビルド用のスクリプトを配置
Editor/MyBuilder.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;

public class MyBuilder {
    // ビルド実行でAndroidのapkを作成する例
    [UnityEditor.MenuItem("Tools/Build Project AllScene Android")]
    public static void BuildProjectAllSceneAndroid() {
        EditorUserBuildSettings.SwitchActiveBuildTarget( BuildTarget.Android );
        List<string> allScene = new List<string>();
        foreach( EditorBuildSettingsScene scene in EditorBuildSettings.scenes ){
            if (scene.enabled) {
                allScene.Add (scene.path);
            }
        }   
        PlayerSettings.bundleIdentifier = "com.yourcompany.newgame";
        PlayerSettings.statusBarHidden = true;
        BuildPipeline.BuildPlayer( 
            allScene.ToArray(),
            "newgame.apk",
            BuildTarget.Android,
            BuildOptions.None
        );
    }
}

ジョブの設定

Invoke Unity3d Editor

  1. ジョブの設定 [ビルド] - [ビルド手順の追加] で [Invole Unity3d Editor] を選択
  2. 「Unity3d installation name」にシステム設定で指定したUnityの名前を選択
  3. 「Editor command line arguments」にUnityをバッチモードで起動するコマンドを指定
-quit -batchmode -executeMethod MyBuilder.BuildProjectAllSceneAndroid

ビルド後の処理

  1. ジョブの設定 [ビルド] - [ビルド後の処理追加] で「成果物を保存」を追加
  2. 「保存するファイル」を指定(例:newgame.apk)

ビルドの実行

  1. Jenkinsでビルド実行
  2. ビルドが成功すればJenkinsのジョブ画面に「最新成功ビルドの成果物」としてapkのダウンロードリンクが張られている
  3. apkを実機にインストールするなどして動作確認する

おわり。

追記:iOSのXcodeプロジェクトを自動作成する

iOS向けにXcode用プロジェクトを自動化するスクリプトも書いたので、本件と合わせてGitHubに上げておきました。
UnintyアプリのビルドをJenkinsで自動化するためのスクリプト

関連記事も書いたのでご参考までに。
UnityのiOSビルドで出力されるXcodeプロジェクトの設定自動化。ファイル毎のARC無効設定を追加する - Qiita
UnityのiOSビルドで出力されるXcodeプロジェクトのEnable Bitcodeを自動でNoにする - Qiita

参考

UnityのビルドをJenkins氏に任せて楽したい。 - ともち屋
Jenkinsを使ったUnityのバッチビルド | TRIDENT Mobile & Network Lab. Blog

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away