Skip to content

Commit 80ee320

Browse files
authored
[GetAndroidDependencies] Add Jdk dependency info (#8651)
Context: dotnet/android-tools@ed102fc Updates `<GetAndroidDependencies/>` to output a new `@(JavaDependency)` item group if `$(AndroidInstallJavaDependencies)` is set to `true`. This group currently contains one item: JavaDependency jdk Version = 17.0.8.1 This output will be used by `<InstallAndroidDependencies/>` to install our recommended version of the Java SDK.
1 parent 6733ab9 commit 80ee320

File tree

4 files changed

+32
-2
lines changed

4 files changed

+32
-2
lines changed

Documentation/guides/building-apps/build-properties.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,13 @@ APK root directory. The format of the path is `lib\ARCH\wrap.sh` where
832832
+ `x86_64`
833833
+ `x86`
834834

835+
## AndroidInstallJavaDependencies
836+
837+
The default value is `true` for command line builds. When set to `true`, enables
838+
installation of the Java SDK when running the `<InstallAndroidDependencies/>` target.
839+
840+
Support for this property was added in .NET 9.
841+
835842
## AndroidJavadocVerbosity
836843

837844
Specifies how "verbose"

src/Xamarin.Android.Build.Tasks/Tasks/CalculateProjectDependencies.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,16 @@ public class CalculateProjectDependencies : AndroidTask
3333

3434
public bool NdkRequired { get; set; }
3535

36+
public string JdkVersion { get; set; }
37+
38+
public bool GetJavaDependencies { get; set; } = false;
39+
3640
[Output]
3741
public ITaskItem [] Dependencies { get; set; }
3842

43+
[Output]
44+
public ITaskItem[] JavaDependencies { get; set; }
45+
3946
ITaskItem CreateAndroidDependency (string include, string version)
4047
{
4148
if (string.IsNullOrEmpty (version))
@@ -49,6 +56,7 @@ ITaskItem CreateAndroidDependency (string include, string version)
4956
public override bool RunTask ()
5057
{
5158
var dependencies = new List<ITaskItem> ();
59+
var javaDependencies = new List<ITaskItem> ();
5260
var targetApiLevel = string.IsNullOrEmpty (AndroidApiLevel) ?
5361
MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion (TargetFrameworkVersion) :
5462
MonoAndroidHelper.SupportedVersions.GetApiLevelFromId (AndroidApiLevel);
@@ -69,7 +77,11 @@ public override bool RunTask ()
6977
if (!string.IsNullOrEmpty (NdkVersion) && NdkRequired) {
7078
dependencies.Add (CreateAndroidDependency ("ndk-bundle", NdkVersion));
7179
}
80+
if (!string.IsNullOrEmpty (JdkVersion) && GetJavaDependencies) {
81+
javaDependencies.Add (CreateAndroidDependency ("jdk", JdkVersion));
82+
}
7283
Dependencies = dependencies.ToArray ();
84+
JavaDependencies = javaDependencies.ToArray ();
7385
return !Log.HasLoggedErrors;
7486
}
7587
}

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public void GetDependencyWhenBuildToolsAreMissingTest ()
153153
}
154154

155155
[Test]
156-
public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool createSdkDirectory)
156+
public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool createSdkDirectory, [Values (true, false)] bool installJavaDeps)
157157
{
158158
var apis = new ApiInfo [] {
159159
};
@@ -168,9 +168,12 @@ public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool creat
168168
IsRelease = true,
169169
TargetSdkVersion = "26",
170170
};
171+
var requestedJdkVersion = "17.0.8.1";
171172
var parameters = new string [] {
172173
$"TargetFrameworkRootPath={referencesPath}",
173174
$"AndroidSdkDirectory={androidSdkPath}",
175+
$"JavaSdkVersion={requestedJdkVersion}",
176+
$"AndroidInstallJavaDependencies={installJavaDeps}",
174177
};
175178

176179
string buildToolsVersion = GetExpectedBuildToolsVersion ();
@@ -183,6 +186,10 @@ public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool creat
183186
StringAssertEx.Contains ($"platforms/android-{apiLevel}", builder.LastBuildOutput, $"platforms/android-{apiLevel} should be a dependency.");
184187
StringAssertEx.Contains ($"build-tools/{buildToolsVersion}", builder.LastBuildOutput, $"build-tools/{buildToolsVersion} should be a dependency.");
185188
StringAssertEx.Contains ("platform-tools", builder.LastBuildOutput, "platform-tools should be a dependency.");
189+
if (installJavaDeps)
190+
StringAssertEx.ContainsRegex ($@"JavaDependency=\s*jdk\s*Version={requestedJdkVersion}", builder.LastBuildOutput, $"jdk {requestedJdkVersion} should be a dependency.");
191+
else
192+
StringAssertEx.DoesNotContainRegex ($@"JavaDependency=\s*jdk\s*Version={requestedJdkVersion}", builder.LastBuildOutput, $"jdk {requestedJdkVersion} should not be a dependency.");
186193
}
187194
}
188195

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2712,10 +2712,11 @@ because xbuild doesn't support framework reference assemblies.
27122712
<Target Name="_BeforeGetAndroidDependencies">
27132713
<PropertyGroup>
27142714
<_AndroidAllowMissingSdkTooling>True</_AndroidAllowMissingSdkTooling>
2715+
<AndroidInstallJavaDependencies Condition=" '$(AndroidInstallJavaDependencies)' == '' ">false</AndroidInstallJavaDependencies>
27152716
</PropertyGroup>
27162717
</Target>
27172718

2718-
<Target Name="GetAndroidDependencies" DependsOnTargets="$(GetAndroidDependenciesDependsOn)" Returns="@(AndroidDependency)">
2719+
<Target Name="GetAndroidDependencies" DependsOnTargets="$(GetAndroidDependenciesDependsOn)" Returns="@(AndroidDependency);@(JavaDependency)">
27192720
<PropertyGroup>
27202721
<_ProjectAndroidManifest>$(ProjectDir)$(AndroidManifest)</_ProjectAndroidManifest>
27212722
<_NdkRequired Condition="'$(EnableLLVM)' == 'True'">true</_NdkRequired>
@@ -2731,8 +2732,11 @@ because xbuild doesn't support framework reference assemblies.
27312732
PlatformToolsVersion="$(AndroidSdkPlatformToolsVersion)"
27322733
NdkVersion="$(AndroidNdkVersion)"
27332734
NdkRequired="$(_NdkRequired)"
2735+
GetJavaDependencies="$(AndroidInstallJavaDependencies)"
2736+
JdkVersion="$(JavaSdkVersion)"
27342737
>
27352738
<Output TaskParameter="Dependencies" ItemName="AndroidDependency" />
2739+
<Output TaskParameter="JavaDependencies" ItemName="JavaDependency" />
27362740
</CalculateProjectDependencies>
27372741
</Target>
27382742

0 commit comments

Comments
 (0)