版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010476348/article/details/79208897
忙了好一阵接入安卓sdk,也算积累了一些经验,在这里总结一下,如有不足,欢迎大大指出;
项目接了大大小小十多个sdk,我的想法是在android studio打好aar包,和资源文件还有AndroidManifest.xml保存成一个压缩包,用的时候解压缩到项目的Plugins/Android目录下,设置好需要的参数,一键出包或者出多个渠道包
接下来看代码把:
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System;
using System.Collections.Generic;
using UnityEditor.Callbacks;
public class BuildWindow : EditorWindow
{
enum Build_Asset
{
UseSign,
OutPath,
SignPath,
keyaliasName,
}
//以下为各个SDK的压缩包名,改动可能导致打包失败,勿动!!!
private const string XiaoMi = "AndroidXiaoMi.rar";
private const string MeiZu = "AndroidMeiZu.rar";
private const string OPPO = "AndroidOppo.rar";
private const string HuaWei = "AndroidHuaWei.rar";
private const string JinLi = "AndroidJinLi.rar";
private const string VIVO = "AndroidVIVO.rar";
private const string JinLiYouXi = "AndroidJinLiYouXi.rar";
private const string QIHOO360 = "AndroidQIHOO360.rar";
private const string QuickSDK = "AndroidQuickSDK.rar";
private const string M4399 = "AndroidM4399.rar";
private const string PapaWuFan = "AndroidPapa.rar";
private const string Samsung = "AndroidSamsung.rar";
private const string Lehaihai = "AndroidLehaihai.rar";
private const string Nubiya = "AndroidNubiya.rar";
private const string Yingyongbao = "AndroidYingyongbao.rar";
//以下为各个SDK的包名,改动可能导致打包失败,勿动!!!
private const string XiaoMi_Identifier = "com.magicbirds.master.sf.mi";
private const string MeiZu_Identifier = "com.magicbirds.fighter.mz";
private const string OPPO_Identifier = "com.magicbirds.fighters.nearme.gamecenter";
private const string Huawei_Identifier = "com.magicbirds.master.huawei";
private const string JinLi_Identifier = "com.magicbirds.fighters.jinli";
private const string JinLiYouXi_Identifier = "com.magicbirds.fighters.jinli";
private const string VIVO_Identifier = "com.magicbirds.fighter.vivo";
private const string QIHOO360_Identifier = "com.magicbirds.master.sll";
private const string QuickSDK_Identifier = "com.qk.test";
private const string M4399_Identifier = "com.magicbirds.master.m4399";
private const string PapaWuFan_Identifier = "com.magicbirds.master.papa";
private const string Samsung_Identifier = "com.magicbirds.master.samsung";
private const string Lehaihai_Identifier = "com.magicbirds.master.lhh";
private const string Nubiya_Identifier = "com.magicbirds.master.nubia";
private const string Yingyongbao_Identifier = "com.magicbirds.fighters.nearme.gamecenter";
private void AddZipNameAndIdentifier()
{
ZipNameDict.Add(SDK_TYPE.XiaoMi, XiaoMi);
IdentifierDict.Add(SDK_TYPE.XiaoMi, XiaoMi_Identifier);
ZipNameDict.Add(SDK_TYPE.MeiZu, MeiZu);
IdentifierDict.Add(SDK_TYPE.MeiZu, MeiZu_Identifier);
ZipNameDict.Add(SDK_TYPE.Oppo, OPPO);
IdentifierDict.Add(SDK_TYPE.Oppo, OPPO_Identifier);
ZipNameDict.Add(SDK_TYPE.Huawei, HuaWei);
IdentifierDict.Add(SDK_TYPE.Huawei, Huawei_Identifier);
ZipNameDict.Add(SDK_TYPE.JinLiAibei, JinLi);
IdentifierDict.Add(SDK_TYPE.JinLiAibei, JinLi_Identifier);
ZipNameDict.Add(SDK_TYPE.VIVO, VIVO);
IdentifierDict.Add(SDK_TYPE.VIVO, VIVO_Identifier);
ZipNameDict.Add(SDK_TYPE.JinLiYouXi, JinLiYouXi);
IdentifierDict.Add(SDK_TYPE.JinLiYouXi, JinLiYouXi_Identifier);
ZipNameDict.Add(SDK_TYPE.QIHO360, QIHOO360);
IdentifierDict.Add(SDK_TYPE.QIHO360, QIHOO360_Identifier);
ZipNameDict.Add(SDK_TYPE.QuickSDK, QuickSDK);
IdentifierDict.Add(SDK_TYPE.QuickSDK, QuickSDK_Identifier);
ZipNameDict.Add(SDK_TYPE.M4399, M4399);
IdentifierDict.Add(SDK_TYPE.M4399, M4399_Identifier);
ZipNameDict.Add(SDK_TYPE.PapaWuFan, PapaWuFan);
IdentifierDict.Add(SDK_TYPE.PapaWuFan, PapaWuFan_Identifier);
ZipNameDict.Add(SDK_TYPE.SamsungAibei, Samsung);
IdentifierDict.Add(SDK_TYPE.SamsungAibei, Samsung_Identifier);
ZipNameDict.Add(SDK_TYPE.Lehaihai, Lehaihai);
IdentifierDict.Add(SDK_TYPE.Lehaihai, Lehaihai_Identifier);
ZipNameDict.Add(SDK_TYPE.Nubiya, Nubiya);
IdentifierDict.Add(SDK_TYPE.Nubiya, Nubiya_Identifier);
ZipNameDict.Add(SDK_TYPE.Yingyongbao, Yingyongbao);
IdentifierDict.Add(SDK_TYPE.Yingyongbao, Yingyongbao_Identifier);
}
public static BuildWindow instance = null;
public bool IsUnzipFile = false;
private SDK_TYPE SDK_State = SDK_TYPE.None;
private Dictionary<SDK_TYPE, string> ZipNameDict = new Dictionary<SDK_TYPE, string>();
private Dictionary<SDK_TYPE, string> IdentifierDict = new Dictionary<SDK_TYPE, string>();
//显示的行列
private int row = 0;
private const int Line = 4;
private int TypeMax = 0;
public bool UseSign = false;
public string OutPath = "";
public string SignPath = "";
public string keyaliasName = "";
GUIStyle fontStyle;
GUIStyle SVStyle;
private bool BuildAll = false;
[MenuItem("Window/Build Android Player Setting")]
public static void Init()
{
//弹出窗口
EditorWindow.GetWindow(typeof(BuildWindow));
}
private static void InitData()
{
if (instance == null)
{
Debug.LogError("instance is null");
return;
}
instance.UseSign = EditorPrefs.GetBool(Build_Asset.UseSign.ToString(), instance.UseSign);
instance.OutPath = EditorPrefs.GetString(Build_Asset.OutPath.ToString(), instance.OutPath);
instance.SignPath = EditorPrefs.GetString(Build_Asset.SignPath.ToString(), instance.SignPath);
instance.keyaliasName = EditorPrefs.GetString(Build_Asset.keyaliasName.ToString(), instance.keyaliasName);
}
BuildWindow()
{
instance = this;
InitData();
this.titleContent = new GUIContent("打包设置");
fontStyle = new GUIStyle();
fontStyle.normal.background = null; //设置背景填充
fontStyle.normal.textColor = new Color(1, 0, 0); //设置字体颜色
fontStyle.fontSize = 20; //字体大小
fontStyle.alignment = TextAnchor.MiddleCenter;
AddZipNameAndIdentifier();
SetRows();
}
private void SetRows()
{
TypeMax = (int)SDK_TYPE.Max;
row = TypeMax / 3;
}
Vector2 SVpos = new Vector2(0, 0);
void OnGUI()
{
EditorGUILayout.BeginVertical();
////绘制标题
GUILayout.Space(10);
fontStyle.fontSize = 24; //字体大小
fontStyle.alignment = TextAnchor.MiddleCenter;//居中
GUILayout.Label("打包设置", fontStyle);
//绘制文本 应用名字
GUILayout.Space(15);
PlayerSettings.productName = EditorGUILayout.TextField("ProductName", PlayerSettings.productName);
GUILayout.Space(15);
PlayerSettings.bundleVersion = EditorGUILayout.TextField("Version", PlayerSettings.bundleVersion);
GUILayout.Space(15);
PlayerSettings.Android.bundleVersionCode = int.Parse(EditorGUILayout.TextField("BundleVersionCode", PlayerSettings.Android.bundleVersionCode.ToString()));
//绘制包名
GUILayout.Space(20);
fontStyle.fontSize = 14; //字体大小
fontStyle.alignment = TextAnchor.UpperLeft;//居中
fontStyle.normal.textColor = Color.white;
GUILayout.Label("Bundle Identifier: " + PlayerSettings.bundleIdentifier, fontStyle);
GUILayout.Space(20);
fontStyle.fontSize = 14; //字体大小
fontStyle.alignment = TextAnchor.UpperLeft;//居中
GUILayout.Label("Min Sdk Version: " + PlayerSettings.Android.minSdkVersion.ToString(), fontStyle);
GUILayout.Space(20);
GUILayout.Label("Save Path", fontStyle);
EditorGUILayout.BeginHorizontal();
EditorGUILayout.TextField(OutPath, GUILayout.ExpandWidth(false));
if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false)))
{
if (string.IsNullOrEmpty(OutPath))
OutPath = EditorUtility.SaveFolderPanel("Path to Save Images", @"C:\Users\mlxn\Desktop", @"C:\Users\mlxn\Desktop"); //打开保存文件夹面板
else
OutPath = EditorUtility.SaveFolderPanel("Path to Save Images", OutPath, OutPath); //打开保存文件夹面板
EditorPrefs.SetString(Build_Asset.OutPath.ToString(), OutPath);
}
EditorGUILayout.EndHorizontal();
//是否开启签名
UseSign = EditorGUILayout.Toggle("Use Sign", UseSign);
if (UseSign)
{ //开关点开
GUILayout.Label("Sign Path", fontStyle);
EditorGUILayout.BeginHorizontal();
if (string.IsNullOrEmpty(SignPath))
{
EditorGUILayout.TextField(PlayerSettings.Android.keystoreName, GUILayout.ExpandWidth(false));
}
else
{
PlayerSettings.Android.keystoreName = SignPath;
PlayerSettings.Android.keyaliasName = keyaliasName;
EditorGUILayout.TextField(PlayerSettings.Android.keystoreName, GUILayout.ExpandWidth(false));
}
if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false)))
{
SignPath = EditorUtility.OpenFilePanel("Path to Save Images", @"C:\Users\mlxn\Desktop", "keystore"); //打开保存文件夹面板
string[] temp = SignPath.Split('/');
keyaliasName = temp[temp.Length - 1];
PlayerSettings.Android.keystoreName = SignPath;
PlayerSettings.Android.keyaliasName = keyaliasName;
}
EditorPrefs.SetString(Build_Asset.SignPath.ToString(), SignPath);
PlayerSettings.Android.keystorePass = EditorGUILayout.PasswordField("keystorePass:", PlayerSettings.Android.keystorePass);
PlayerSettings.Android.keyaliasPass = EditorGUILayout.PasswordField("keystorePass:", PlayerSettings.Android.keyaliasPass);
EditorGUILayout.EndHorizontal();
}
else
{
PlayerSettings.Android.keystoreName = null;
PlayerSettings.Android.keystorePass = null;
PlayerSettings.Android.keyaliasName = null;
PlayerSettings.Android.keyaliasPass = null;
}
EditorPrefs.SetBool(Build_Asset.UseSign.ToString(), UseSign);
GUILayout.Space(12);
EditorGUILayout.LabelField("请选择要打包的渠道:", fontStyle);//可选格式如粗体
EditorGUILayout.Space();
SVpos = EditorGUILayout.BeginScrollView(SVpos);
for (int i = 0; i < row; i++)
{
EditorGUILayout.BeginHorizontal();
for (int j = i * Line; j < (i + 1) * Line; j++)
{
if (j >= TypeMax) continue;
if (GUILayout.Button(((SDK_TYPE)j).ToString(), GUILayout.MaxWidth(160), GUILayout.MinHeight(60), GUILayout.ExpandWidth(false)))
{
SetSDKZip((SDK_TYPE)j);
}
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.EndScrollView();
GUILayout.Space(12);
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("开始打包(单个)", GUILayout.MaxWidth(160), GUILayout.MinHeight(60), GUILayout.ExpandWidth(false)))
{
OnBuildClick();
}
if (GUILayout.Button("开始打包(All)", GUILayout.MaxWidth(160), GUILayout.MinHeight(60), GUILayout.ExpandWidth(false)))
{
OnBuildAllClick();
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
}
private Queue<SDK_TYPE> BuildList;
private void OnBuildAllClick()
{
if (!CheckIsFinish(true)) return;
BuildList = new Queue<SDK_TYPE>();
int max = (int)SDK_TYPE.Max;
int otherOne = (int)SDK_TYPE.WhiteBag;
int otherTwo = (int)SDK_TYPE.QuickSDK;
for (int i = 0; i < max; i++)
{
if (i != otherOne && i != otherTwo)
BuildList.Enqueue((SDK_TYPE)i);
}
BuildAll = true;
StartBuildAll();
}
private void StartBuildAll()
{
if (BuildList.Count == 0)
{
BuildAll = false;
EditorUtility.DisplayDialog("提示", "all apk build ok!", "确定");
}
else
{
SetSDKZip(BuildList.Dequeue());
}
}
public void StartBuildAllOne()
{
string NowPath = OutPath + "/" + "fighters_" + DateTime.Now.ToString("yyyyMMdd") + SDK_State.ToString() + ".apk";
if (File.Exists(NowPath))
{
File.Delete(NowPath);
BuildPipeline.BuildPlayer(GetBuildScenes(), NowPath, BuildTarget.Android, BuildOptions.None);
}
else
{
BuildPipeline.BuildPlayer(GetBuildScenes(), NowPath, BuildTarget.Android, BuildOptions.None);
}
}
[PostProcessBuild]
public static void OnPostProcessBuild(BuildTarget target, string path)
{
if (path.Contains(instance.SDK_State.ToString()) && instance.BuildAll)
{
instance.StartBuildAll();
}
}
private void OnBuildClick()
{
if (!CheckIsFinish()) return;
string NowPath = OutPath + "/" + "fighters_" + DateTime.Now.ToString("yyyyMMdd") + SDK_State.ToString() + ".apk";
if (File.Exists(NowPath))
{
if (UnityEditor.EditorUtility.DisplayDialog("提示", "将替换路径下的同名文件!", "确定", "取消"))
{
File.Delete(NowPath);
BuildPipeline.BuildPlayer(GetBuildScenes(), NowPath, BuildTarget.Android, BuildOptions.None);
}
else
{
Debug.LogError("操作取消");
}
}
else
{
BuildPipeline.BuildPlayer(GetBuildScenes(), NowPath, BuildTarget.Android, BuildOptions.None);
}
}
private bool CheckIsFinish(bool isbuildAll=false )
{
if (string.IsNullOrEmpty(OutPath))
{
EditorUtility.DisplayDialog("提示", "请选择保存路径!", "确定");
return false;
}
if (UseSign && string.IsNullOrEmpty(SignPath))
{
EditorUtility.DisplayDialog("提示", "请选择签名文件路径!", "确定");
return false;
}
if (UseSign && (string.IsNullOrEmpty(PlayerSettings.Android.keystorePass) || string.IsNullOrEmpty(PlayerSettings.Android.keyaliasPass)))
{
EditorUtility.DisplayDialog("提示", "请输入签名文件密码!", "确定");
return false;
}
if (SDK_State == SDK_TYPE.None && !isbuildAll)
{
EditorUtility.DisplayDialog("提示", "请选择要打的渠道包!", "确定");
return false;
}
if (!ClientMgr.IsOpenChannel && SDK_State != SDK_TYPE.WhiteBag && SDK_State != SDK_TYPE.None)
{
EditorUtility.DisplayDialog("提示", "请将渠道开关打开!", "确定");
return false;
}
if (ClientMgr.IsOpenChannel && SDK_State == SDK_TYPE.WhiteBag)
{
EditorUtility.DisplayDialog("提示", "请关闭渠道开关!", "确定");
return false;
}
if (SDK_State == SDK_TYPE.QuickSDK && (!ClientMgr.IsOpenChannel || !ClientMgr.IsQuickSDK))
{
EditorUtility.DisplayDialog("提示", "请打开渠道开关和QuickSDK开关!", "确定");
return false;
}
if (SDK_State != SDK_TYPE.QuickSDK && ClientMgr.IsQuickSDK)
{
EditorUtility.DisplayDialog("提示", "请关闭QuickSDK开关!", "确定");
return false;
}
return true;
}
static string[] GetBuildScenes()
{
List<string> pathList = new List<string>();
foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
{
if (scene.enabled)
{
pathList.Add(scene.path);
}
}
return pathList.ToArray();
}
void SetSDKZip(SDK_TYPE type)
{
if (BuildAll)
{
SDK_State = type;
SetAssets(type);
}
else
{
if (IsUnzipFile) return;
IsUnzipFile = true;
SDK_State = type;
SetAssets(type);
}
}
private static void SetAssets(SDK_TYPE type)
{
SetSdkVersion(type);
string Name = "";
if (type == SDK_TYPE.WhiteBag)
{
DeleteFolder(PathUtil.PathAndroid);
AssetDatabase.Refresh();
AssetDatabase.SaveAssets();
EditorUtility.DisplayDialog("提示", "删除完成!", "确定");
}
else
{
Name = instance.ZipNameDict.ContainsKey(type) ? instance.ZipNameDict[type] : string.Empty;
PlayerSettings.bundleIdentifier = instance.IdentifierDict.ContainsKey(type) ? instance.IdentifierDict[type] : string.Empty;
RefreshInfo(Name);
//SetAndroidIcon(type);
}
}
private static void SetAndroidIcon(SDK_TYPE type)
{
Texture2D tx =null;
tx = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/ArtWork/app_icon");
Texture2D[] txs = { tx, tx, tx, tx, tx, tx, tx, };
PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Android, txs);
switch (type)
{
case SDK_TYPE.QIHO360:
tx = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/ArtWork/app_icon_360");
Texture2D[] txs360 = { tx, tx, tx, tx, tx, tx, tx, };
PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Android, txs360);
break;
case SDK_TYPE.M4399:
tx = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/ArtWork/app_icon_4399");
Texture2D[] txs4399 = { tx, tx, tx, tx, tx, tx, tx, };
PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Android, txs4399);
break;
case SDK_TYPE.PapaWuFan:
tx = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/ArtWork/app_icon_wufan");
Texture2D[] txsPapa = { tx, tx, tx, tx, tx, tx, tx, };
PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Android, txsPapa);
break;
case SDK_TYPE.Lehaihai:
tx = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/ArtWork/app_icon_lehaihai");
Texture2D[] txsLehaihai = { tx, tx, tx, tx, tx, tx, tx, };
PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Android, txsLehaihai);
break;
}
}
private static void SetSdkVersion(SDK_TYPE type)
{
PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel16;
if (type == SDK_TYPE.QIHO360)
PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel17;
}
private static void RefreshInfo(string Name)
{
DeleteFolder(PathUtil.PathAndroid);
mZip.UnzipFile(Name,instance.BuildAll);
AssetDatabase.Refresh();
AssetDatabase.SaveAssets();
}
private static void DeleteFolder(string dir)
{
foreach (string d in Directory.GetFileSystemEntries(dir))
{
if (File.Exists(d))
{
FileInfo fi = new FileInfo(d);
if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
fi.Attributes = FileAttributes.Normal;
File.Delete(d);
}
else
{
DirectoryInfo d1 = new DirectoryInfo(d);
if (d1.GetFiles().Length != 0)
{
DeleteFolder(d1.FullName);////递归删除子文件夹
}
Directory.Delete(d);
}
}
}
}
public enum SDK_TYPE
{
None = -1,
WhiteBag,
XiaoMi,//3
MeiZu,//21
Oppo,//14
Huawei,//10
JinLiAibei,//12
VIVO,//13
JinLiYouXi,//31
QIHO360,//8
QuickSDK,//9999
M4399,//32
PapaWuFan,//33
SamsungAibei,//34
Lehaihai,//35
Nubiya,//36
Yingyongbao,//37
Max,
}
还有如何解压缩:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Diagnostics;
using System.IO;
public static class mZip
{
//压缩文件
public static void Button1_Click()
{
ProcessStartInfo startinfo = new ProcessStartInfo(); ;
Process process = new Process();
string rarName = "1.rar"; //压缩后文件名
string path = @"C:\images"; //待压缩打包文件夹
string rarPath = @"C:\zip"; //压缩后存放文件夹
string rarexe = @"c:\Program Files\WinRAR\WinRAR.exe"; //WinRAR安装位置
try
{
//压缩命令,相当于在要压缩的文件夹(path)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)
string cmd = string.Format("a {0} {1} -r",
rarName,
path);
startinfo.FileName = rarexe;
startinfo.Arguments = cmd; //设置命令参数
startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隐藏 WinRAR 窗口
startinfo.WorkingDirectory = rarPath;
process.StartInfo = startinfo;
process.Start();
process.WaitForExit(); //无限期等待进程 winrar.exe 退出
if (process.HasExited)
{
UnityEditor.EditorUtility.DisplayDialog("提示", "压缩成功!", "确定");
}
}
catch (Exception ex)
{
UnityEngine.Debug.LogError(ex.Message);
UnityEditor.EditorUtility.DisplayDialog("提示", ex.Message, "确定");
}
finally
{
process.Dispose();
process.Close();
}
}
//解压文件
public static void UnzipFile(string NameRar,bool IsAll=false)
{
if (string.IsNullOrEmpty(NameRar))
{
UnityEngine.Debug.LogError("NameRar为空,请检查是否写了压缩包名");
BuildWindow.instance.IsUnzipFile = false;
return;
}
string path = PathUtil.PathAndroid; //文件解压路径(绝对)
string rarPath = PathUtil.RarPath; //将要解压缩的 .rar 文件的存放目录(绝对路径)
string rarName = NameRar; //将要解压缩的 .rar 文件名(包括后缀)
string rarexe = PathUtil.Rrarexe;// @"c:\Program Files\WinRAR\WinRAR.exe"; //WinRAR安装位置
if (!File.Exists(rarexe))
{
UnityEditor.EditorUtility.DisplayDialog("提示", "未检测到解压缩工具,请确定在"+ rarexe + "安装WinRAR!", "确定");
return;
}
ProcessStartInfo startinfo = new ProcessStartInfo(); ;
Process process = new Process();
try
{
//解压缩命令,相当于在要压缩文件(rarName)上点右键->WinRAR->解压到当前文件夹
string cmd = string.Format("x {0} {1} -y",
rarName,
path);
startinfo.FileName = rarexe;
startinfo.Arguments = cmd; //设置命令参数
startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隐藏 WinRAR 窗口
startinfo.WorkingDirectory = rarPath;
process.StartInfo = startinfo;
process.Start();
process.WaitForExit(); //无限期等待进程 winrar.exe 退出
if (process.HasExited)
{
if (!IsAll)
{
if (UnityEditor.EditorUtility.DisplayDialog("提示", NameRar + "解压缩成功!", "确定"))
{
if (BuildWindow.instance != null)
{
BuildWindow.instance.IsUnzipFile = false;
}
}
}
else
{
if (BuildWindow.instance != null)
{
BuildWindow.instance.StartBuildAllOne();
}
}
}
}
catch (Exception ex)
{
UnityEngine.Debug.LogError(ex.Message);
UnityEditor.EditorUtility.DisplayDialog("提示", ex.Message, "确定");
}
finally
{
process.Dispose();
process.Close();
}
}
}
每次只要手动添加包名和压缩包名字,还有渠道枚举值,就可以啦