Skip to content

Commit

Permalink
fix: Bump android tools for linux emulator setup
Browse files Browse the repository at this point in the history
  • Loading branch information
jeromelaban committed Dec 16, 2024
1 parent d37aa06 commit b074ccb
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 77 deletions.
163 changes: 92 additions & 71 deletions UnoCheck/AndroidSdk/AvdManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using System.Runtime.InteropServices;
using IniParser;
using System.Diagnostics;
using NuGet.Common;

namespace DotNetCheck.AndroidSdk
{
Expand Down Expand Up @@ -101,7 +102,7 @@ public override FileInfo FindToolPath(DirectoryInfo androidSdkHome)

public (bool success, string[] output) Delete(string name)
{
return AvdManagerRun("delete", "avd", "-n", name);
return AvdManagerRun(null, "delete", "avd", "-n", name);
}

public (bool success, string[] output) Move(string name, string path = null, string newName = null)
Expand Down Expand Up @@ -131,31 +132,38 @@ public IEnumerable<AvdTarget> ListTargets()
{
var r = new List<AvdTarget>();

var lines = AvdManagerRun("list", "target");
var result = AvdManagerRun(null, "list", "target");

var str = string.Join("\n", lines);

var matches = rxListTargets.Matches(str);
if (matches != null && matches.Count > 0)
if (result.success)
{
foreach (Match m in matches)
var str = string.Join("\n", result.output);

var matches = rxListTargets.Matches(str);
if (matches != null && matches.Count > 0)
{
var a = new AvdTarget
foreach (Match m in matches)
{
Name = m.Groups?["name"]?.Value,
Id = m.Groups?["id"]?.Value,
Type = m.Groups?["type"]?.Value
};

if (int.TryParse(m.Groups?["api"]?.Value, out var api))
a.ApiLevel = api;
if (int.TryParse(m.Groups?["revision"]?.Value, out var rev))
a.Revision = rev;

if (!string.IsNullOrWhiteSpace(a.Id) && a.ApiLevel > 0)
r.Add(a);
var a = new AvdTarget
{
Name = m.Groups?["name"]?.Value,
Id = m.Groups?["id"]?.Value,
Type = m.Groups?["type"]?.Value
};

if (int.TryParse(m.Groups?["api"]?.Value, out var api))
a.ApiLevel = api;
if (int.TryParse(m.Groups?["revision"]?.Value, out var rev))
a.Revision = rev;

if (!string.IsNullOrWhiteSpace(a.Id) && a.ApiLevel > 0)
r.Add(a);
}
}
}
else
{
Util.Log($"Failed to list targets: {string.Join("\n", result.output)}");
}

return r;
}
Expand All @@ -165,41 +173,48 @@ public IEnumerable<Avd> ListAvds()
{
var r = new List<Avd>();

var lines = AvdManagerRun("list", "avd");

var str = string.Join("\n", lines);
var result = AvdManagerRun(null, "list", "avd");

var matches = rxListAvds.Matches(str);
if (matches != null && matches.Count > 0)
if (result.success)
{
foreach (Match m in matches)
{
var path = m.Groups?["path"]?.Value;
var str = string.Join("\n", result.output);

if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
var matches = rxListAvds.Matches(str);
if (matches != null && matches.Count > 0)
{
foreach (Match m in matches)
{
var avd = Avd.From(path);
var path = m.Groups?["path"]?.Value;

if (!string.IsNullOrEmpty(path) && Directory.Exists(path))
{
var avd = Avd.From(path);

var parsedName = m.Groups?["name"]?.Value;
if (string.IsNullOrEmpty(avd.Name) && !string.IsNullOrEmpty(parsedName))
avd.Name = parsedName;
var parsedName = m.Groups?["name"]?.Value;
if (string.IsNullOrEmpty(avd.Name) && !string.IsNullOrEmpty(parsedName))
avd.Name = parsedName;

var parsedDevice = m.Groups?["device"]?.Value;
if (string.IsNullOrEmpty(avd.Device) && !string.IsNullOrEmpty(parsedDevice))
avd.Device = parsedDevice;
var parsedDevice = m.Groups?["device"]?.Value;
if (string.IsNullOrEmpty(avd.Device) && !string.IsNullOrEmpty(parsedDevice))
avd.Device = parsedDevice;

var parsedTarget = m.Groups?["target"]?.Value;
if (string.IsNullOrEmpty(avd.Target) && !string.IsNullOrEmpty(parsedTarget))
avd.Target = parsedTarget;
var parsedTarget = m.Groups?["target"]?.Value;
if (string.IsNullOrEmpty(avd.Target) && !string.IsNullOrEmpty(parsedTarget))
avd.Target = parsedTarget;

var parsedBasedOn = m.Groups?["basedon"]?.Value;
if (string.IsNullOrEmpty(avd.BasedOn) && !string.IsNullOrEmpty(parsedBasedOn))
avd.BasedOn = parsedBasedOn;
var parsedBasedOn = m.Groups?["basedon"]?.Value;
if (string.IsNullOrEmpty(avd.BasedOn) && !string.IsNullOrEmpty(parsedBasedOn))
avd.BasedOn = parsedBasedOn;

r.Add(avd);
r.Add(avd);
}
}
}
}
else
{
Util.Log($"Failed to list avds: {string.Join("\n", result.output)}");
}

return r;
}
Expand Down Expand Up @@ -243,42 +258,48 @@ public IEnumerable<AvdDevice> ListDevices()
{
var r = new List<AvdDevice>();

var lines = AvdManagerRun("list", "device");
var result = AvdManagerRun(null, "list", "device");

var str = string.Join("\n", lines);

var matches = rxListDevices.Matches(str);
if (matches != null && matches.Count > 0)
if (result.success)
{
foreach (Match m in matches)
{
var id = m.Groups?["id"]?.Value;

if (!string.IsNullOrEmpty(id))
var str = string.Join("\n", result.output);

var matches = rxListDevices.Matches(str);
if (matches != null && matches.Count > 0)
{
foreach (Match m in matches)
{
var idMatch = rxDeviceId.Match(id);
var id = m.Groups?["id"]?.Value;

if (idMatch?.Success ?? false)
if (!string.IsNullOrEmpty(id))
{
var a = new AvdDevice
{
Name = m.Groups?["name"]?.Value,
Id = idMatch.Groups?["name"]?.Value,
Oem = m.Groups?["oem"]?.Value
};
var idMatch = rxDeviceId.Match(id);

if (!string.IsNullOrWhiteSpace(a.Name))
r.Add(a);
if (idMatch?.Success ?? false)
{
var a = new AvdDevice
{
Name = m.Groups?["name"]?.Value,
Id = idMatch.Groups?["name"]?.Value,
Oem = m.Groups?["oem"]?.Value
};

if (!string.IsNullOrWhiteSpace(a.Name))
r.Add(a);
}
}
}
}
}
else
{
Util.Log($"Failed to list devices: {string.Join("\n", result.output)}");
}

return r;
}


(bool success, string[] output) AvdManagerRun(string forcedInput = null, params string[] args)
(bool success, string[] output) AvdManagerRun(string forcedInput = null, params string[] args)
{
var adbManager = FindToolPath(AndroidSdkHome);
var java = Java;
Expand Down Expand Up @@ -310,7 +331,7 @@ public IEnumerable<AvdDevice> ListDevices()
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = !string.IsNullOrWhiteSpace(forcedInput);

var output = new List<string>();
var output = new List<string>();

proc.OutputDataReceived += (s, e) =>
{
Expand All @@ -323,16 +344,16 @@ public IEnumerable<AvdDevice> ListDevices()
output.Add(e.Data);
};

Util.Log($"Running {proc.StartInfo.FileName} {proc.StartInfo.Arguments} in {proc.StartInfo.WorkingDirectory}");
Util.Log($"Running {proc.StartInfo.FileName} {proc.StartInfo.Arguments} in {proc.StartInfo.WorkingDirectory} (with input \"{forcedInput ?? "<no input>"}\")");

proc.Start();

if (!string.IsNullOrWhiteSpace(forcedInput))
{
proc.StandardInput.WriteLine(forcedInput);
proc.StandardInput.Flush();
proc.StandardInput.Close();
}
proc.StandardInput.WriteLine(forcedInput);
proc.StandardInput.Flush();
proc.StandardInput.Close();
}

proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
Expand Down
4 changes: 2 additions & 2 deletions manifests/uno.ui-preview-major.manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@
"version": "35.0.2"
},
{
"path": "cmdline-tools;12.0",
"version": "12.0"
"path": "cmdline-tools;13.0",
"version": "13.0"
}
],
"emulators": [
Expand Down
4 changes: 2 additions & 2 deletions manifests/uno.ui-preview.manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@
"version": "35.0.2"
},
{
"path": "cmdline-tools;12.0",
"version": "12.0"
"path": "cmdline-tools;13.0",
"version": "13.0"
}
],
"emulators": [
Expand Down
4 changes: 2 additions & 2 deletions manifests/uno.ui.manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@
"version": "35.0.2"
},
{
"path": "cmdline-tools;12.0",
"version": "12.0"
"path": "cmdline-tools;13.0",
"version": "13.0"
}
],
"emulators": [
Expand Down

0 comments on commit b074ccb

Please sign in to comment.