(二)Jenkins自动打包之Unity客户端配置

这篇Unity配置也非常重要,很大方面是留下个记录。
首先我们确保Jdk配置正确的时候,就开是通过命令行获取我们的android的密钥和库,Win+R或 Cmd打开命令行
输入以下口令:
keytool -genkey -alias android.keystore -keyalg RSA -validity 36500 -keystore MyGame.keystore

realfram.keystore中的realfram代码名字,可以根据自己的工程进行修改。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190723175010936.png
打开之后系统会让你输入或者设置密钥库口令,这个密码是不显示的 所以不要感觉没有输入上去,其次我们最好把密码设置成一样的,方便使用。
创建完成后他会生成到窗口命令程序的安装目录下,找到他 然后把他放到工程中。如下 这样这一步就完成了
在这里插入图片描述
接下来就是我们BuildAndroid打包代码:

    private static string m_AppName = PlayerSettings.productName;//RealConfig.GetRealFram().m_AppName;
    public static string m_AndroidPath = Application.dataPath + "/../BuildTarget/Android/";
    public static void BuildAndroid()
    { 
        //设置安卓密钥
        PlayerSettings.Android.keystoreName = Application.dataPath.Replace("/Assets","") + "/realfram.keystore";
        PlayerSettings.Android.keyaliasName = "MyGame.keystore";
        PlayerSettings.Android.keyaliasPass = "yiyechengming";
        PlayerSettings.Android.keystorePass = "yiyechengming";
        BuildSeting buildSeting = GetAndroidBuildSetring();
        string suffx = AndroidSeting(buildSeting);
                //删除以前的东西
        DeleteDir(m_WindowsPath);
        //绝对储存路径
        string savePath = m_AndroidPath + m_AppName + "_Android" + suffx + string.Format("_{0:yyyy_MM_dd_HH_mm}.apk", DateTime.Now);
        BuildPipeline.BuildPlayer(FindEnableEditorrScenes(), savePath, EditorUserBuildSettings.activeBuildTarget, BuildOptions.None);
    }
  public static void DeleteDir(string scrPath)
    {
        try
        {
            DirectoryInfo dir = new DirectoryInfo(scrPath);
            FileSystemInfo[] fileInfo = dir.GetFileSystemInfos();
            foreach (FileSystemInfo info in fileInfo)
            {
                if (info is DirectoryInfo)
                {
                    DirectoryInfo subdir = new DirectoryInfo(info.FullName);
                    subdir.Delete(true);
                }
                else
                {
                    File.Delete(info.FullName);
                }
            }
        }
        catch (Exception e)
        {
            Debug.LogError(e);
        }
    }
    /// <summary>
    /// 根据读取的数据 在Unity中设置对应的参数
    /// </summary>
    static string AndroidSeting(BuildSeting seting)
    {
        string suffx = "_";
        if (seting.place!=Place.None)
        {
            //代表了渠道包
            //获取宏
            string symbol = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android);
            //设置宏
            PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android,symbol+";"+seting.place.ToString());
            suffx += seting.place.ToString();
        }
        if (!string.IsNullOrEmpty(seting.Version))
        {
            PlayerSettings.bundleVersion = seting.Version;
            suffx += "_" + seting.Version;
        }
        if (!string.IsNullOrEmpty(seting.Build))
        {
            PlayerSettings.Android.bundleVersionCode= int.Parse(seting.Build);
            suffx += "_" + seting.Build;
        }
        if (!string.IsNullOrEmpty(seting.Name))
        {
            //包名
            PlayerSettings.productName = seting.Name;
            //唯一签名
            //PlayerSettings.applicationIdentifier = "com.TTT." + seting.Name;
        }
        if (seting.MulRedering)
        {
            PlayerSettings.MTRendering = true;
            suffx += "_MTR";
        }
        else
        {
            PlayerSettings.MTRendering = false;
        }
        if (seting.IL2CPP)
        {
            PlayerSettings.SetScriptingBackend(BuildTargetGroup.Android,ScriptingImplementation.IL2CPP);
            suffx += "_IL2CPP";
        }
        else
        {
            PlayerSettings.SetScriptingBackend(BuildTargetGroup.Android, ScriptingImplementation.Mono2x);
        }
        if (seting.Debug)
        {
            EditorUserBuildSettings.development = true;
            EditorUserBuildSettings.connectProfiler = true;
            suffx += "_Debug";
        }
        else
        {
            EditorUserBuildSettings.development = false;
        }
        return suffx;
    }
      static BuildSeting GetAndroidBuildSetring()
    {
        string[] parameters = Environment.GetCommandLineArgs();
        BuildSeting buildSeting = new BuildSeting();
        foreach (string str in parameters)
        {
            //解析Jenkins设置的渠道
            if (str.StartsWith("Place"))
            {
                var tempParm = str.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                if (tempParm.Length == 2)
                {
                    buildSeting.place = (Place)Enum.Parse(typeof(Place),tempParm[1],true) ;
                }
            }
            //解析版本号
            if (str.StartsWith("version"))
            {
                var tempParm = str.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                if (tempParm.Length == 2)
                {
                    buildSeting.Version = tempParm[1].Trim();
                }
            }
            //解析包名
            else if (str.StartsWith("Name"))
            {
                var tempParm = str.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                if (tempParm.Length == 2)
                {
                    buildSeting.Name = tempParm[1].Trim();
                }
            }
            else if (str.StartsWith("Debug"))
            {
                var tempParm = str.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                if (tempParm.Length == 2)
                {
                    bool.TryParse(tempParm[1], out buildSeting.Debug);
                }
            }
            else if (str.StartsWith("Rendering"))
            {
                var tempParm = str.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                if (tempParm.Length == 2)
                {
                    bool.TryParse(tempParm[1], out buildSeting.MulRedering);
                }
            }
            else if (str.StartsWith("IL2CPP"))
            {
                var tempParm = str.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                if (tempParm.Length == 2)
                {
                    bool.TryParse(tempParm[1], out buildSeting.IL2CPP);
                }
            }
        }
        return buildSeting;
    }
    public class BuildSeting
{
    //版本
    public string Version = "";
    //打包次数
    public string Build = "";
    //包名
    public string Name = "";
    //是否测试 版本
    public bool Debug = true;
    //渠道
    public Place place = Place.None;
    //多线程渲染
    public bool MulRedering = true;
    //是否把代码编译成C++
    public bool IL2CPP = false;
}
public enum Place
{
    None,
    XiaoMi,
    HuaWei,
    MeiZu,
    BaiDu,
}

上面代码就是存放在BuildApp脚本里用来让jenkins调用的,设置安卓密钥就是我们第一步通过jdk创建出的密钥库,有了他Jenkins才能打出Android包。其次就是一些参数的配置。
配置完成后我们就可以去Jenkins上打包了,主要Unity一定不要保存在打开状态,这样的话电脑会占用Unity,从而Jenkins就无法进行访问了,Jenkins会在后台进行打包
点击构建:
在这里插入图片描述左边构建目录会显示进程,红色代表失败,蓝色代表成功
在这里插入图片描述
打包完成我们可以我们可以去自己设定
好的储存路径下查
看我们的包。
在这里插入图片描述
包以出,大功告成。
总结:Jenkins配置起来确实麻烦,但也就麻烦在第一次配置,不过他的优点还是很多的,最长用的就
是定时打包,打包完成之后以邮件的形式发送给指定的用户。还是挺不错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铸梦xy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值