Unity 命令行打包

在写文章之前先说下unity已经自带了可视化打包,我为什么要多此一举进行命令行打包,估计刚接触unity的小伙伴都会有这样的疑惑,当你游戏要发布到Android平台你就会知道,需要接不通平台的sdk,甚至有些平台还需要改包名。而游戏从接完平台sdk,到发布还需要经过无数次的测试,发布后甚至还需若干次升级。你要是每次都手动的将每个平台jar、res等,拷贝到unity Plugins文件下,然后再去改包名,暂且不说这样多次操作是多么的麻烦无聊,关键是你要是哪天不小心手残了,把什么拷贝错了或者包名写错了忘记改了等等,还特么的要重来,你能受得了嘛,好了,我觉得我受不了,那么来吧,写个打包工具吧。

 

  首先在unity的assets文件下建立Editor文件夹,我们把工具脚本写在此处,写在此处的目的是想在unity菜单栏上,创建打包按键。这个大家应该都知道吧。我们写个静态方法叫buildQQ吧,然后在方法上设置菜单[MenuItem("hugeBuild/QQ")],好吧,请原谅我的自恋,居然自称虎哥。效果出来了,截图作为真相。(注:使用头文件using UnityEditor;)

 

        那么下面我们就该在buildQQ方法中先去执行文件拷贝了,我们先把不同平台的jar、res、AndroidManifest.xml,放在Assets/Android/QQ(360、xiaomi)等。当我打包QQ的时候,我们先把Asssets/Plugins/Android目录下的文件删除,然后将Assets/Android/QQ文件拷贝到Asssets/Plugins/Android下。具体C#文件操作我就不多说了,太简单了,网上一搜到处都是。

        等待拷贝完成后,该去解析AndroidManifest.xml中包名了,因为不同平台包名要求会不同。把获取到的包名赋值给PlayerSettings.bundleIdentifier。具体方法我在这里说下吧!代码如下:

using System.Xml;

static string getPackage() {

    string content = System.IO.File.ReadAllText("Assets/Plugins/AndroidManifest.xml");

    XmlDocument xmldoc = new XmlDocument();

    xmldoc.LoadXml(content);

    XmlElement rootElem = xmldoc.DocumentElement; //获取根节点

    return rootElem.Attributes["package"].Value;

}
  1. 搞定后,设置keystore账号和密码。

  2. PlayerSettings.Android.keystoreName = "Assets/xiaohu.keystore";
    
    PlayerSettings.Android.keystorePass = "******";
    
    PlayerSettings.Android.keyaliasName = "huge";
    
    PlayerSettings.Android.keyaliasPass = "******";
    
    

     

         最后调用:打包函数 BuildPipeline.BuildPlayer(lsit.ToArray(), "Sample.apk", BuildTarget.Android, BuildOptions.None);等待完成,但是这里面参数要说明下,第一参数是要打包的场景,第二是打出包的路径和名称,第三是编译的平台,第四是编译的选项,一般选择Node,即可,具体参数详解到官网查看api。下面提供一种方法去获取所有需要打包的场景名称。

 

  1. List lsit = new List();

  2. foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes) {

  3. if (scene.enabled) {

  4. lsit.Add(scene.path);

  5. }

  6. }

        大功告成!

程序员事半功倍工具

你可能感兴趣的:(Unity 命令行打包)