Skip to content

Commit

Permalink
[GetAndroidDependencies] Add Jdk dependency info (#8651)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
pjcollins authored Jan 31, 2024
1 parent 6733ab9 commit 80ee320
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 2 deletions.
7 changes: 7 additions & 0 deletions Documentation/guides/building-apps/build-properties.md
Original file line number Diff line number Diff line change
Expand Up @@ -832,6 +832,13 @@ APK root directory. The format of the path is `lib\ARCH\wrap.sh` where
+ `x86_64`
+ `x86`

## AndroidInstallJavaDependencies

The default value is `true` for command line builds. When set to `true`, enables
installation of the Java SDK when running the `<InstallAndroidDependencies/>` target.

Support for this property was added in .NET 9.

## AndroidJavadocVerbosity

Specifies how "verbose"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,16 @@ public class CalculateProjectDependencies : AndroidTask

public bool NdkRequired { get; set; }

public string JdkVersion { get; set; }

public bool GetJavaDependencies { get; set; } = false;

[Output]
public ITaskItem [] Dependencies { get; set; }

[Output]
public ITaskItem[] JavaDependencies { get; set; }

ITaskItem CreateAndroidDependency (string include, string version)
{
if (string.IsNullOrEmpty (version))
Expand All @@ -49,6 +56,7 @@ ITaskItem CreateAndroidDependency (string include, string version)
public override bool RunTask ()
{
var dependencies = new List<ITaskItem> ();
var javaDependencies = new List<ITaskItem> ();
var targetApiLevel = string.IsNullOrEmpty (AndroidApiLevel) ?
MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion (TargetFrameworkVersion) :
MonoAndroidHelper.SupportedVersions.GetApiLevelFromId (AndroidApiLevel);
Expand All @@ -69,7 +77,11 @@ public override bool RunTask ()
if (!string.IsNullOrEmpty (NdkVersion) && NdkRequired) {
dependencies.Add (CreateAndroidDependency ("ndk-bundle", NdkVersion));
}
if (!string.IsNullOrEmpty (JdkVersion) && GetJavaDependencies) {
javaDependencies.Add (CreateAndroidDependency ("jdk", JdkVersion));
}
Dependencies = dependencies.ToArray ();
JavaDependencies = javaDependencies.ToArray ();
return !Log.HasLoggedErrors;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ public void GetDependencyWhenBuildToolsAreMissingTest ()
}

[Test]
public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool createSdkDirectory)
public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool createSdkDirectory, [Values (true, false)] bool installJavaDeps)
{
var apis = new ApiInfo [] {
};
Expand All @@ -168,9 +168,12 @@ public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool creat
IsRelease = true,
TargetSdkVersion = "26",
};
var requestedJdkVersion = "17.0.8.1";
var parameters = new string [] {
$"TargetFrameworkRootPath={referencesPath}",
$"AndroidSdkDirectory={androidSdkPath}",
$"JavaSdkVersion={requestedJdkVersion}",
$"AndroidInstallJavaDependencies={installJavaDeps}",
};

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2712,10 +2712,11 @@ because xbuild doesn't support framework reference assemblies.
<Target Name="_BeforeGetAndroidDependencies">
<PropertyGroup>
<_AndroidAllowMissingSdkTooling>True</_AndroidAllowMissingSdkTooling>
<AndroidInstallJavaDependencies Condition=" '$(AndroidInstallJavaDependencies)' == '' ">false</AndroidInstallJavaDependencies>
</PropertyGroup>
</Target>

<Target Name="GetAndroidDependencies" DependsOnTargets="$(GetAndroidDependenciesDependsOn)" Returns="@(AndroidDependency)">
<Target Name="GetAndroidDependencies" DependsOnTargets="$(GetAndroidDependenciesDependsOn)" Returns="@(AndroidDependency);@(JavaDependency)">
<PropertyGroup>
<_ProjectAndroidManifest>$(ProjectDir)$(AndroidManifest)</_ProjectAndroidManifest>
<_NdkRequired Condition="'$(EnableLLVM)' == 'True'">true</_NdkRequired>
Expand All @@ -2731,8 +2732,11 @@ because xbuild doesn't support framework reference assemblies.
PlatformToolsVersion="$(AndroidSdkPlatformToolsVersion)"
NdkVersion="$(AndroidNdkVersion)"
NdkRequired="$(_NdkRequired)"
GetJavaDependencies="$(AndroidInstallJavaDependencies)"
JdkVersion="$(JavaSdkVersion)"
>
<Output TaskParameter="Dependencies" ItemName="AndroidDependency" />
<Output TaskParameter="JavaDependencies" ItemName="JavaDependency" />
</CalculateProjectDependencies>
</Target>

Expand Down

0 comments on commit 80ee320

Please sign in to comment.