Skip to content

Commit d7d8500

Browse files
[dsrouter] detect Android SDK with dotnet/android-tools (#5502)
Fixes: #5474 Context: https://developer.android.com/tools/variables `$ANDROID_SDK_ROOT` is deprecated, but it is currently the only way to select an Android SDK path. To fix this, track a new dependency from Maestro via: <Dependency Name="Xamarin.Android.Tools.AndroidSdk" Version="1.0.105-preview.225"> <Uri>https://github.com/dotnet/android</Uri> <Sha>bf304cf475308547a2a1a342bb9f2e6825cc33cd</Sha> </Dependency> This is the same library we use for locating the Android SDK in various locations by Visual Studio and other tooling. We can use this instead of only checking `$ANDROID_SDK_ROOT`. Also, updated various messages to say `$ANDROID_HOME` instead, which the new dependency probes for among other locations. Co-authored-by: Jonathan Peppers <[email protected]>
1 parent f9c63a8 commit d7d8500

File tree

5 files changed

+31
-4
lines changed

5 files changed

+31
-4
lines changed

eng/Version.Details.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
<Uri>https://github.com/microsoft/clrmd</Uri>
1010
<Sha>d724947392626b66e39b525998a8817447d50380</Sha>
1111
</Dependency>
12+
<Dependency Name="Xamarin.Android.Tools.AndroidSdk" Version="1.0.105-preview.225">
13+
<Uri>https://github.com/dotnet/android</Uri>
14+
<Sha>bf304cf475308547a2a1a342bb9f2e6825cc33cd</Sha>
15+
</Dependency>
1216
</ProductDependencies>
1317
<ToolsetDependencies>
1418
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="10.0.0-beta.25351.106">

eng/Versions.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
<cdbsosversion>10.0.26100.1</cdbsosversion>
7373
<NewtonSoftJsonVersion>13.0.1</NewtonSoftJsonVersion>
7474
<MicrosoftSourceBuildIntermediatesourcebuildreferencepackagesPackageVersion>10.0.622304</MicrosoftSourceBuildIntermediatesourcebuildreferencepackagesPackageVersion>
75+
<XamarinAndroidToolsAndroidSdkVersion>1.0.105-preview.225</XamarinAndroidToolsAndroidSdkVersion>
7576
<!-- Roslyn and analyzers -->
7677
<!-- dotnet/roslyn dependencies -->
7778
<!--

src/Tools/dotnet-dsrouter/ADBTcpRouterFactory.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Threading.Tasks;
99
using Microsoft.Diagnostics.NETCore.Client;
1010
using Microsoft.Extensions.Logging;
11+
using Xamarin.Android.Tools;
1112

1213
namespace Microsoft.Diagnostics.Tools.DiagnosticsServerRouter
1314
{
@@ -65,7 +66,27 @@ public static void AdbRemovePortReverse(int localPort, int remotePort, bool owns
6566

6667
public static bool RunAdbCommandInternal(string command, string expectedOutput, int expectedExitCode, bool rethrow, ILogger logger)
6768
{
68-
string sdkRoot = Environment.GetEnvironmentVariable("ANDROID_SDK_ROOT");
69+
void sdklogger(TraceLevel level, string message)
70+
{
71+
switch (level)
72+
{
73+
case TraceLevel.Error:
74+
logger?.LogError(message);
75+
break;
76+
case TraceLevel.Warning:
77+
logger?.LogWarning(message);
78+
break;
79+
case TraceLevel.Info:
80+
logger?.LogInformation(message);
81+
break;
82+
case TraceLevel.Verbose:
83+
logger?.LogDebug(message);
84+
break;
85+
}
86+
};
87+
88+
// AndroidSdkInfo checks $ANDROID_SDK_ROOT, $ANDROID_HOME, and default locations.
89+
string sdkRoot = new AndroidSdkInfo(logger: sdklogger).AndroidSdkPath;
6990
string adbTool = "adb";
7091

7192
if (!string.IsNullOrEmpty(sdkRoot))
@@ -166,7 +187,7 @@ public override void Start()
166187
_ownsPortReverse = false;
167188
Logger.LogError("Failed setting up adb port reverse." +
168189
" This might lead to problems communicating with Android application." +
169-
" Make sure env variable ANDROID_SDK_ROOT is set and points to an Android SDK." +
190+
" Make sure env variable $ANDROID_HOME is set and points to an Android SDK." +
170191
$" Executing with unknown adb status for port {_localPort}.");
171192
base.Start();
172193
return;
@@ -245,7 +266,7 @@ public override void Start()
245266
_ownsPortForward = false;
246267
Logger.LogError("Failed setting up adb port forward." +
247268
" This might lead to problems communicating with Android application." +
248-
" Make sure env variable ANDROID_SDK_ROOT is set and points to an Android SDK." +
269+
" Make sure env variable $ANDROID_HOME is set and points to an Android SDK." +
249270
$" Executing with unknown adb status for port {_localPort}.");
250271
return;
251272
}

src/Tools/dotnet-dsrouter/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ private static Command AndroidRouterCommand()
289289
private static readonly Option<string> ForwardPortOption =
290290
new("--forward-port", "-fp")
291291
{
292-
Description = "Enable port forwarding, values Android|iOS for TcpClient and only Android for TcpServer. Make sure to set ANDROID_SDK_ROOT before using this option on Android."
292+
Description = "Enable port forwarding, values Android|iOS for TcpClient and only Android for TcpServer. For Android, optionally set $ANDROID_HOME to a valid Android SDK path."
293293
};
294294

295295
private static readonly Option<string> BlockedSignalsOption =

src/Tools/dotnet-dsrouter/dotnet-dsrouter.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<PackageReference Include="System.CommandLine" Version="$(SystemCommandLineVersion)" />
2828
<PackageReference Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsLoggingVersion)" />
2929
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingConsoleVersion)" />
30+
<PackageReference Include="Xamarin.Android.Tools.AndroidSdk" Version="$(XamarinAndroidToolsAndroidSdkVersion)" />
3031
</ItemGroup>
3132

3233
</Project>

0 commit comments

Comments
 (0)