using System.Diagnostics;
|
using System.IO;
|
using System.Text;
|
using UnityEditor;
|
using UnityEngine;
|
using Debug = UnityEngine.Debug;
|
|
public class UpLoadBuglySo
|
{
|
private static string[] soFolders = {"arm64-v8a", "armeabi-v7a","unity"};
|
private static string soCmdAnroid =
|
"java -jar buglyqq-upload-symbol.jar -inputSymbol #SOPATH# -appid #ID# -appkey #KEY# -bundleid #BUNDLEID# -version #VERSION# -platform Android";
|
|
private static string soCmdIOS =
|
"java -jar buglyqq-upload-symbol.jar -inputSymbol ./IOS/UnityFramework.framework.dSYM -appid #ID# -appkey #KEY# -bundleid #BUNDLEID# -version #VERSION# -platform IOS";
|
|
/// <summary>
|
/// 打完包后调用此方法 自动上传符号表文件
|
/// </summary>
|
[MenuItem("Tools/自动上传符号表/Android", priority = 2049)]
|
public static void UploadAndroidBuglyso(){
|
DeleteSo();
|
CopyBuglySo();
|
if (EditCommand(out string arg)) {
|
Debug.Log("EditCommand: " + arg);
|
RunCmd(arg, BuglyToolPath());
|
}
|
}
|
[MenuItem("Tools/自动上传符号表/IOS", priority = 2049)]
|
public static void UploadIOSBuglyso()
|
{
|
if (EditCommandIOS(out string arg))
|
{
|
Debug.Log("EditCommand: " + arg);
|
RunCmd(arg, BuglyToolPath());
|
}
|
}
|
private static void CopyBuglySo(){
|
FileTool.CopyFolder(DeBugSOPath(), BuglyToolPath() + "/Android/");
|
FileTool.OpenFolder(BuglyToolPath());
|
}
|
|
|
private static void DeleteSo(){
|
foreach (var folder in soFolders) {
|
FileTool.DeleteFolder(BuglyToolPath() + "/Android/");
|
}
|
}
|
private static bool EditCommand(out string arg){
|
bool exists = false;
|
var versionInfo = StringUtility.Contact(VersionConfig.Get().version, "_", VersionConfig.Get().buildIndex, "_", VersionConfig.Get().buildTime);
|
StringBuilder sb = new StringBuilder();
|
foreach (var folder in soFolders)
|
{
|
exists = true;
|
sb.Append(soCmdAnroid).Append(" & ");
|
if(folder == "unity")
|
{
|
sb.Replace("#SOPATH#", "libunity.sym.so");
|
}
|
else
|
{
|
string soPath = BuglyToolPath() + "/Android/" + folder ;
|
if (FileTool.CheckFolder(soPath))
|
{
|
soPath = soPath + "/libil2cpp.sym.so";
|
sb.Replace("#SOPATH#", soPath);
|
}
|
else
|
{
|
exists = false;
|
break;
|
}
|
}
|
sb.Replace("#ID#", ExceptionCatcher.AppIDAndroid); //这里注意一下要改成自己的id
|
sb.Replace("#KEY#", ExceptionCatcher.AppKeyAndroid); //自己的key
|
sb.Replace("#BUNDLEID#", VersionConfig.Get().appId);
|
sb.Replace("#VERSION#", versionInfo);
|
}
|
|
sb.Append("exit").Replace("/", @"\");
|
arg = sb.ToString();
|
return exists;
|
}
|
private static bool EditCommandIOS(out string arg)
|
{
|
bool exists = true;
|
var versionInfo = StringUtility.Contact(VersionConfig.Get().version, "_", VersionConfig.Get().buildIndex, "_", VersionConfig.Get().buildTime);
|
StringBuilder sb = new StringBuilder();
|
sb.Append(soCmdIOS).Append(" & ");
|
sb.Replace("#ID#", ExceptionCatcher.AppIDIOS); //这里注意一下要改成自己的id
|
sb.Replace("#KEY#", ExceptionCatcher.AppKeyIOS); //自己的key
|
sb.Replace("#BUNDLEID#", VersionConfig.Get().appId);
|
sb.Replace("#VERSION#", versionInfo);
|
sb.Append("exit").Replace("/", @"\");
|
arg = sb.ToString();
|
return exists;
|
}
|
public static string DeBugSOPath(){
|
return Path.GetFullPath(Application.dataPath + "/../Temp/StagingArea/symbols");
|
}
|
|
public static string BuglyToolPath(){
|
return Path.GetFullPath(Application.dataPath + "/../buglytools");
|
}
|
public static void RunCmd(string arg, string workingDirectory,string exe ="cmd.exe"){
|
|
ProcessStartInfo info = new ProcessStartInfo(exe);
|
info.Arguments = "/c " + arg;
|
info.WorkingDirectory = workingDirectory;
|
info.CreateNoWindow = false;
|
info.ErrorDialog = true;
|
info.UseShellExecute = true;
|
|
if (info.UseShellExecute) {
|
info.RedirectStandardOutput = false;
|
info.RedirectStandardError = false;
|
info.RedirectStandardInput = false;
|
}
|
else {
|
info.RedirectStandardOutput = true;
|
info.RedirectStandardError = true;
|
info.RedirectStandardInput = true;
|
info.StandardOutputEncoding = System.Text.UTF8Encoding.UTF8;
|
info.StandardErrorEncoding = System.Text.UTF8Encoding.UTF8;
|
}
|
Debug.Log("RunCmd: "+info.Arguments);
|
|
Process process = Process.Start(info);
|
|
if (!info.UseShellExecute) {
|
Debug.Log(process.StandardOutput);
|
Debug.Log(process.StandardError);
|
}
|
|
process.WaitForExit();
|
process.Close();
|
}
|
}
|