From 5ca4f736b45ddb01e89f57bf8cebcab4ea834aac Mon Sep 17 00:00:00 2001 From: MistEO Date: Tue, 31 May 2022 22:09:43 +0800 Subject: [PATCH] =?UTF-8?q?feat.=E6=96=B0=E5=A2=9EC#=E4=BE=A7=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=A3=80=E6=B5=8Badb=E7=AB=AF=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAsstGui/Helper/AsstProxy.cs | 1 + src/MeoAsstGui/Helper/WinAdapter.cs | 29 +++++++++ .../ViewModels/SettingsViewModel.cs | 59 +++++++++++-------- 3 files changed, 64 insertions(+), 25 deletions(-) diff --git a/src/MeoAsstGui/Helper/AsstProxy.cs b/src/MeoAsstGui/Helper/AsstProxy.cs index 5c914db2ad..005cbb00bb 100644 --- a/src/MeoAsstGui/Helper/AsstProxy.cs +++ b/src/MeoAsstGui/Helper/AsstProxy.cs @@ -609,6 +609,7 @@ namespace MeoAsstGui } } settings.TryToSetBlueStacksHyperVAddress(); + bool ret = AsstConnect(_handle, settings.AdbPath, settings.ConnectAddress, settings.ConnectConfig); if (!ret) { diff --git a/src/MeoAsstGui/Helper/WinAdapter.cs b/src/MeoAsstGui/Helper/WinAdapter.cs index d5794940cd..4d52b194f2 100644 --- a/src/MeoAsstGui/Helper/WinAdapter.cs +++ b/src/MeoAsstGui/Helper/WinAdapter.cs @@ -77,5 +77,34 @@ namespace MeoAsstGui } return null; } + + public List GetAdbAddresses(string adbPath) + { + var addresses = new List(); + using (Process process = new System.Diagnostics.Process()) + { + process.StartInfo.FileName = adbPath; + process.StartInfo.Arguments = "devices"; + // 禁用操作系统外壳程序 + process.StartInfo.UseShellExecute = false; + process.StartInfo.CreateNoWindow = true; + process.StartInfo.RedirectStandardOutput = true; + process.Start(); + var output = process.StandardOutput.ReadToEnd(); + var outLines = output.Split(new[] { '\r', '\n' }); + foreach (var line in outLines) + { + if (line.StartsWith("List of devices attached") || + line.Length == 0 || + !line.Contains("device")) + { + continue; + } + var address = line.Split('\t')[0]; + addresses.Add(address); + } + } + return addresses; + } } } diff --git a/src/MeoAsstGui/ViewModels/SettingsViewModel.cs b/src/MeoAsstGui/ViewModels/SettingsViewModel.cs index 55e9500895..44d9ec7233 100644 --- a/src/MeoAsstGui/ViewModels/SettingsViewModel.cs +++ b/src/MeoAsstGui/ViewModels/SettingsViewModel.cs @@ -964,35 +964,20 @@ namespace MeoAsstGui { SetAndNotify(ref _connectConfig, value); ViewStatusStorage.Set("Connect.ConnectConfig", value); - if (ConnectAddress.Length == 0) - { - UpdateAddressByConfig(); - } } } - private readonly Dictionary> ConfigAddressesMapping = new Dictionary> + private readonly Dictionary DefaultAddress = new Dictionary { - { "General", new List {""} }, - { "BlueStacks", new List {"127.0.0.1:5555", "127.0.0.1:5556", "127.0.0.1:5557" } }, - { "MuMuEmulator", new List{"127.0.0.1:7555"} }, - { "LDPlayer", new List{ "127.0.0.1:5555", "emulator-5554" } }, - { "Nox", new List { "127.0.0.1:62001", "127.0.0.1:59865" } }, - { "XYAZ", new List {"127.0.0.1:21503" } }, - { "WSA", new List { "127.0.0.1:58526" } }, + { "General", "" }, + { "BlueStacks", "127.0.0.1:5555" }, + { "MuMuEmulator", "127.0.0.1:7555" }, + { "LDPlayer", "emulator-5554" }, + { "Nox", "127.0.0.1:62001" }, + { "XYAZ", "127.0.0.1:21503" }, + { "WSA","127.0.0.1:58526" }, }; - private void UpdateAddressByConfig() - { - var addresses = ConfigAddressesMapping[ConnectConfig]; - ConnectAddress = addresses.FirstOrDefault(); - //ConnectAddressList.Clear(); - //foreach (var address in addresses) - //{ - // ConnectAddressList.Add(address); - //} - } - public bool RefreshAdbConfig(ref string error) { var adapter = new WinAdapter(); @@ -1018,8 +1003,32 @@ namespace MeoAsstGui } ConnectConfig = emulators.First(); AdbPath = adapter.GetAdbPathByEmulatorName(ConnectConfig) ?? AdbPath; - UpdateAddressByConfig(); - TryToSetBlueStacksHyperVAddress(); + if (ConnectAddress.Length == 0) + { + var addresses = adapter.GetAdbAddresses(AdbPath); + // 傻逼雷电已经关掉了用别的 adb 还能检测出来这个端口 device + if (addresses.Count == 1 && addresses.First() != "emulator-5554") + { + ConnectAddress = addresses.First(); + } + else if (addresses.Count > 1) + { + foreach (var address in addresses) + { + if (address == "emulator-5554" && ConnectConfig != "LDPlayer") + { + continue; + } + ConnectAddress = address; + break; + } + } + + if (ConnectAddress.Length == 0) + { + ConnectAddress = DefaultAddress[ConnectConfig]; + } + } return true; }