Unity自動(dòng)化打包Android APK

零. 前言

最近在做Unity開發(fā),有個(gè)任務(wù)是通過Jenkins實(shí)現(xiàn)自動(dòng)化打包Unity游戲成Android APK的需求慎恒,所以在完成任務(wù)后任内,梳理成了一個(gè)最簡單的教學(xué)撵渡,也把遇到的坑和大家分享。

若需要Jenkins打包死嗦,指需要通過Jenkins調(diào)用下面的命令即可實(shí)現(xiàn)基礎(chǔ)需求趋距。


一. 原理

打開Unity程序 → 打開指定工程 → 調(diào)用Unity的BuildPipeline類進(jìn)行打包


二. 打包命令

Mac樣例:

/Users/Ben/Application/Unity.app/Contents/MacOS/Unity -projectPath /Users/Ben/UnityBuildAndroid -executeMethod ProjectBuild.BuildForAndroid project-projectName -quit

Windows樣例:

D:\Unity\Editor\Unity -projectPath D:\UnityBuildAndroid -executeMethod ProjectBuild.BuildForAndroid
project-projectName -quit

格式說明:

Unity打包APK
  1. Unity編輯器路徑:非UnityHub路徑,可以在UnityHub → 安裝 → 具體Unity版本 → 右上角更多信息 → 在Finder中顯示(在資源管理器中顯示) 可以找到對(duì)應(yīng)Unity應(yīng)用的路徑
  2. 編譯的工程路徑:需要打包APK的項(xiàng)目路徑根目錄
  3. 執(zhí)行的方法:編譯APK運(yùn)行的腳步
  4. 參數(shù)(project-projectName):樣例中越除,projectName為工程名节腐,用于命名APK。"project-projectName"整個(gè)不寫摘盆,則會(huì)自動(dòng)讀取工程名翼雀。讀者可以根據(jù)自己項(xiàng)目需求,傳遞需要的參數(shù)進(jìn)入孩擂,然后自行解析處理锅纺。
  5. -quit:在運(yùn)行結(jié)束后關(guān)閉UnityHub,建議在前期未完全調(diào)通之前肋殴,不要添加該命令囤锉,否則打包失敗報(bào)錯(cuò)時(shí),無法通過Unity日志窗口查看具體原因护锤。

三. 執(zhí)行步驟

下面以全新Unity空工程來引入自動(dòng)化打包

1.引入打包工具類官地,將下面的代碼拷貝到工程Assets/Editor目錄下

using System.Collections;
using System.IO;
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System;

class ProjectBuild : Editor
{
    //在這里找出你當(dāng)前工程所有的場(chǎng)景文件,假設(shè)你只想把部分的scene文件打包 那么這里可以寫你的條件判斷 總之返回一個(gè)字符串?dāng)?shù)組烙懦。
    static string[] GetBuildScenes()
    {
        List<string> names = new List<string>();
        foreach (EditorBuildSettingsScene e in EditorBuildSettings.scenes)
        {
            if (e == null)
                continue;
            if (e.enabled)
                names.Add(e.path);
        }
        return names.ToArray();
    }

    /// <summary>
    /// 自定義工程名:"project-"作為工程名的前綴參數(shù)
    /// </summary>
    public static string projectName
    {
        get
        {
            foreach (string arg in System.Environment.GetCommandLineArgs())
            {
                if (arg.StartsWith("project"))
                {
                    return arg.Split("-"[0])[1];
                }
            }
            return Application.productName;
        }
    }

    /// <summary>
    /// 打包Android應(yīng)用
    /// </summary>
    static void BuildForAndroid()
    {
        // 簽名文件配置驱入,若不配置,則使用Unity默認(rèn)簽名
        PlayerSettings.Android.keyaliasName = "BenheroGithub";
        PlayerSettings.Android.keyaliasPass = "BenheroGithub";
        PlayerSettings.Android.keystoreName = Application.dataPath.Replace("/Assets", "") + "/BenheroGithub.jks";
        PlayerSettings.Android.keystorePass = "BenheroGithub";

        // APK路徑氯析、名字配置
        string apkName = DateTime.Now.ToString("yyyyMMdd_HHmmss");
        string path = Application.dataPath.Replace("/Assets", "") + "/APK/" + projectName + "_" + apkName + ".apk";
        BuildPipeline.BuildPlayer(GetBuildScenes(), path, BuildTarget.Android, BuildOptions.None);
    }
}

這個(gè)類中3個(gè)方法比較清晰簡單亏较,讀者可以根據(jù)需求進(jìn)行拓展。

2. 引入簽名文件到工程的根目錄下

3. 配置Android應(yīng)用包名

若不配置會(huì)報(bào)錯(cuò):
UnityException: Package Name has not been set up correctly
Please set the Package Name in the Player Settings. The value must follow the convention

解決方法:

  1. File/Build Settings切換Android平臺(tái)
  2. Player Settings → Other Settings → Identification → Package Name輸入APK包名

4. 在命令行窗口執(zhí)行打包命令

5. APK生成在工程根目錄中的APK文件夾下


四.工程案例

本教程中案例掩缓,已上傳到GitHub上雪情,讀者可以下載嘗試運(yùn)行∧憷保或者可用于與自己的配置進(jìn)行校驗(yàn)巡通。

GitHub工程地址:https://github.com/benhero/UnityBuildAndroid

參考教程

雨松MOMO

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舍哄,隨后出現(xiàn)的幾起案子宴凉,更是在濱河造成了極大的恐慌,老刑警劉巖表悬,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弥锄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)籽暇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門窘行,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人图仓,你說我怎么就攤上這事〉疲” “怎么了救崔?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捏顺。 經(jīng)常有香客問我六孵,道長,這世上最難降的妖魔是什么幅骄? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任劫窒,我火速辦了婚禮,結(jié)果婚禮上拆座,老公的妹妹穿的比我還像新娘主巍。我一直安慰自己,他們只是感情好挪凑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布孕索。 她就那樣靜靜地躺著,像睡著了一般躏碳。 火紅的嫁衣襯著肌膚如雪搞旭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天菇绵,我揣著相機(jī)與錄音肄渗,去河邊找鬼。 笑死咬最,一個(gè)胖子當(dāng)著我的面吹牛翎嫡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播永乌,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼钝的,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了铆遭?” 一聲冷哼從身側(cè)響起硝桩,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枚荣,沒想到半個(gè)月后碗脊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年衙伶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祈坠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矢劲,死狀恐怖赦拘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芬沉,我是刑警寧澤躺同,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站丸逸,受9級(jí)特大地震影響蹋艺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜黄刚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一捎谨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憔维,春花似錦涛救、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凶赁,卻和暖如春咧栗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背虱肄。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工致板, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咏窿。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓斟或,卻偏偏與公主長得像,于是被迫代替她去往敵國和親集嵌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萝挤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355