shell文件自动打包unity项目

一、创建unity项目

编写一个脚本,通过代码更改打包时所需要的一些设置(默认icon、包名等等)

using UnityEditor;
using UnityEngine;
using System.IO;
using System;
public class ProjectBuild
{
    [MenuItem("Tool/BuildForAndroid(All)")]
static void BuildForAndroid()
{
    //切换到Android平台
    if (Application.platform != RuntimePlatform.Android)
        EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android);

    SetupPlayerSettings("1.0.0");//设置版本号

    string tempPath = Application.dataPath.Replace("Assets", "exe");
    string path = tempPath + "/" + Function.projectName + ".apk";
    //string path = Application.dataPath + "/" + Function.projectName + ".apk";
    BuildPipeline.BuildPlayer(GetBuildScenes(), path, BuildTarget.Android, BuildOptions.None);
}
    private static void SetupPlayerSettings(string sVersion)
    {
        try
        {
            Debug.Log("BuildAndroidProcess.SetupPlayerSettings start:" + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"));

            if (!BuildPlayerHelper.UpdateResourceVersionFile(sVersion))
            {
                throw new Exception("BuildAndroidProcess.SetupPlayerSettings UpdateResourceVersionFile failed!");
            }
// 设置公司名称
            PlayerSettings.companyName = "Test";//填写你自己的
// 设置 Android 构建系统为 Gradle
            EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;
// 设置应用版本号
            PlayerSettings.bundleVersion = sVersion;
// 设置 Android 版本代码(内部版本号)
            PlayerSettings.Android.bundleVersionCode = BuildPlayerHelper.GetVersionCode(sVersion);

            SetIcon();
// 设置默认界面方向为自动旋转
            PlayerSettings.defaultInterfaceOrientation = UIOrientation.AutoRotation;
// 隐藏状态栏
            PlayerSettings.statusBarHidden = true;
// 使用 32 位显示缓冲区
            PlayerSettings.use32BitDisplayBuffer = true;
// 禁用深度和模板缓冲区
            PlayerSettings.Android.disableDepthAndStencilBuffers = true;
// 禁用加载时显示活动指示器
            PlayerSettings.Android.showActivityIndicatorOnLoading = AndroidShowActivityIndicatorOnLoading.DontShow;
// 设置最低支持的 SDK 版本为 Android API Level 24
            PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel24;
// 设置目标 SDK 版本为自动选择
            PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevelAuto;
// 设置首选安装位置为自动
            PlayerSettings.Android.preferredInstallLocation = AndroidPreferredInstallLocation.Auto;
// 强制需要网络权限
            PlayerSettings.Android.forceInternetPermission = true;
// 强制需要 SD 卡权限
            PlayerSettings.Android.forceSDCardPermission = true;
// 剥离未使用的网格组件
            PlayerSettings.stripUnusedMeshComponents = true;

#if UNITY_ANDROID
// 在 Android 平台上禁用托管剥离级别
            PlayerSettings.SetManagedStrippingLevel(BuildTargetGroup.Android, ManagedStrippingLevel.Disabled);
#endif
// 允许自动旋转到左横向模式
            PlayerSettings.allowedAutorotateToLandscapeLeft = true;
// 允许自动旋转到右横向模式
            PlayerSettings.allowedAutorotateToLandscapeRight = true;
            Debug.Log("BuildAndroidProcess.SetupPlayerSettings end:" + DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"));
        }
        catch (System.Exception ex)
        {
            Debug.LogError("BuildAndroidProcess.SetupPlayerSettings exception is: " + ex.Message);
        }
    }
    /// <summary>
    /// 设置默认图片
    /// </summary>
    static void SetIcon()
    {
        //Assets下默认图片的路径
        string iconPath = "Assets/DemoFolder/Icon/Android/default.png";//填写你自己的

        //加载texture
        Texture2D icon = AssetDatabase.LoadAssetAtPath<Texture2D>(iconPath);

        if (icon == null)
        {
            Debug.LogError("Icon not found at path: " + iconPath);
            return;
        }

        // 设置默认平台的图标
        PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Unknown, new Texture2D[] { icon });

        //你也可以为特定的平台设置图标,例如iOS, Android
        //PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.iOS, new Texture2D[] { icon });
        //PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Android, new Texture2D[] { icon });

        // 保存
        AssetDatabase.SaveAssets();

        Debug.Log("Default icon set successfully.");
    }
//在这里找出你当前工程所有的场景文件,假设你只想把部分的scene文件打包 那么这里可以写你的条件判断 总之返回一个字符串数组。
    public 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();
    }
}

二、编写shell文件

在项目目录下创建shell文件方便找到使用

#!/bin/sh
 
#参数判断,确保脚本接收到一个参数
if [ $# != 1 ];then  
    echo "com.myvision.myapp"  # 如果参数数量不正确,输出默认的应用包名
    exit 1
fi  
 
#UNITY程序的路径#
UNITY_PATH=/d/Unity/Hub/Editor/2022.3.17f1c1/Editor/Unity.exe
 
#游戏程序路径#
PROJECT_PATH="你的unity项目路径"
 
#在Unity中构建apk#
$UNITY_PATH -projectPath "$PROJECT_PATH" -executeMethod ProjectBuild.BuildForAndroid -quit
 
echo "Apk生成完毕"
  • #!/bin/sh: 声明脚本使用的解释器,这里是使用 /bin/sh,即 Bourne shell。
  • if [ $# != 1 ]; then: 开始条件判断语句,检查脚本是否接收到一个参数。
  • echo "com.myvision.myapp": 如果没有接收到参数,输出默认的应用包名。
  • exit 1: 退出脚本并返回状态码 1,表示错误。
  • $UNITY_PATH -projectPath "$PROJECT_PATH" -executeMethod ProjectBuild.BuildForAndroid -quit: 使用设置的Unity路径和项目路径,在命令行中执行Unity的 -executeMethod 参数指定的方法 ProjectBuild.BuildForAndroid 来构建Android的APK,并使用 -quit 参数在完成后自动退出Unity编辑器。

如果需要传参数

#!/bin/sh

# 参数判断,确保脚本接收到两个参数
if [ $# != 2 ]; then
    echo "Usage: \$0 <parameter1> <parameter2>"
    exit 1
fi

# Unity程序的安装路径
UNITY_PATH=/d/Unity/Hub/Editor/2022.3.17f1c1/Editor/Unity.exe

# 游戏项目的路径
PROJECT_PATH="你的unity项目路径"

# 参数1和参数2
PARAM1=\$1
PARAM2=\$2

# 使用Unity构建APK,并传递参数
$UNITY_PATH -projectPath "$PROJECT_PATH" -executeMethod ProjectBuild.BuildForAndroid "$PARAM1" "$PARAM2" -quit

echo "Apk生成完毕"

注意事项:!!!

        1.路径格式:在Git Bash或WSL环境中,windows路径需要转换为Unix格式。E:\  转换为 /e/。

        2.引号:路径和参数包含空格时,应该使用引号包裹。

三、使用命令行执行

需要在关闭unity的情况下运行。

使用Git Bash运行脚本

        1.导航到脚本所在目录

cd /项目所在路径/

         2.赋予执行权限

chmod +x build.sh

         3.运行脚本

使用WSL运行脚本

        1.打开WSL(如Ubuntu)

        2.导航到脚本所在目录

cd /mnt/项目所在路径/

        3. 赋予执行权限

chmod +x build.sh

        4.运行脚本

./build.sh 包名
  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值