1. 程式人生 > >Unity3d 工具打包完 自動上傳到FTP伺服器

Unity3d 工具打包完 自動上傳到FTP伺服器

這個故事是這樣開始的~~

我們遊戲的平臺包有好幾十個~(沒辦法遊戲太牛逼了),然後每個平臺的sdk都需要去不斷的測試的,我們內部開發過一款工具用來自動批處理打包untiy - apk,這樣可以節省很多時間去等待打包的過程。

稍微計算一下 一個apk包(大小250M+)的時間是 10分鐘*40個以上,如果讓人等著打包的話就!~咳咳了

打完了包需要上傳ftp伺服器給到測試部進行測試,而目前我們的工具尚不支援此功能,必須手動去把打出來的包上傳上去,還有有些囧的~

故事講完了,這裡開始乾貨 大概的功能如下圖


遠端路徑 :ftp的檔案儲存

本地路徑:apk儲存路徑

APK 名字:此處省略一萬字

按鈕不解釋

說下原理:通過 呼叫FTP 的bat指令(參考 http://369369.blog.51cto.com/319630/842341) 上傳指定 本地檔案下的指定檔案 (本地路徑+ apk名字) 到 ftp遠端路徑的指定資料夾(遠端路徑)

c# 執行bat的方式 (介面上的東西就不講了,我也是半桶水),這裡要注意的是多個引數的傳遞需要使用空格分開,當點選上傳的時候就呼叫者函式即可,然後默默的等一下就可以完成了

 void Runbat(string path)
        {
            try
            {
                Process pro = new Process();
                FileInfo file = new FileInfo(path);

                pro.StartInfo.WorkingDirectory = file.Directory.FullName;
                pro.StartInfo.FileName = path;
                //引數已空格分開
                pro.StartInfo.Arguments = localPath+" "+ftpPathDir+" "+native2ascii(apk_name.Text);
                pro.StartInfo.CreateNoWindow = false;
                pro.Start();
                pro.WaitForExit();
            }
            catch (Exception e)
            {

            }
        }

這裡貼一下native 和 assic 之間的轉換,雖然最後還是沒用到,因為可以直接是中文,我醉了~
   //實現中文的轉碼操作
        public String native2ascii(String str)
        {
            int code;
            char[] chars = str.ToCharArray();
            StringBuilder sb = new StringBuilder(255);
            for (int i = 0; i < chars.Length; i++)
            {
                char c = chars[i];
                if (c > 255)
                {
                    sb.Append("\\u");
                    code = (c >> 8);
                    string tmp = code.ToString("X");
                    if (tmp.Length == 1) sb.Append("0");
                    sb.Append(tmp);
                    code = (c & 0xFF);
                    tmp = code.ToString("X");
                    if (tmp.Length == 1) sb.Append("0");
                    sb.Append(tmp);
                }
                else
                {
                    sb.Append(c);
                }

            } return (sb.ToString());
        }