Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Configuration.props
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,11 @@
<XABundleToolHash Condition="'$(XABundleToolHash)' == ''">A099CFA1543F55593BC2ED16A70A7C67FE54B1747BB7301F37FDFD6D91028E29</XABundleToolHash>
<XABinutilsVersion Condition="'$(XABinutilsVersion)' == ''">L_18.1.6-8.0.0-1</XABinutilsVersion>
<XABinutilsHash Condition="'$(XABinutilsHash)' == ''">5394EA6C411DA3A08BF0E6A87E1DD1B98BD2562B896C0CACD18E29E2FD4C0660</XABinutilsHash>
<!-- Microsoft OpenJDK: https://learn.microsoft.com/en-us/java/openjdk/download -->
<MicrosoftOpenJDKVersion Condition="'$(MicrosoftOpenJDKVersion)' == ''">21.0.8</MicrosoftOpenJDKVersion>
<MicrosoftOpenJDKFolder Condition="'$(MicrosoftOpenJDKFolder)' == ''">jdk-21</MicrosoftOpenJDKFolder>
<MicrosoftOpenJDKRootDirName Condition="'$(MicrosoftOpenJDKRootDirName)' == ''">jdk-21.0.8+9</MicrosoftOpenJDKRootDirName>
<JavaSdkDirectory Condition=" '$(JavaSdkDirectory)' == '' ">$(AndroidToolchainDirectory)\$(MicrosoftOpenJDKFolder)</JavaSdkDirectory>
<XAPackagesDir Condition=" '$(XAPackagesDir)' == '' And '$(NUGET_PACKAGES)' != ''">$(NUGET_PACKAGES)</XAPackagesDir>
<XAPackagesDir Condition=" '$(XAPackagesDir)' == '' And '$(HostOS)' == 'Windows'">$(userprofile)\.nuget\packages</XAPackagesDir>
<XAPackagesDir Condition=" '$(XAPackagesDir)' == '' And '$(HostOS)' != 'Windows'">$(HOME)/.nuget/packages</XAPackagesDir>
Expand Down
14 changes: 14 additions & 0 deletions Xamarin.Android.sln
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "bundletool", "src\bundletoo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "binutils", "src\binutils\binutils.csproj", "{B2BC20D1-F468-46A9-B9B0-1C80CC4D4F36}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "openjdk", "src\openjdk\openjdk.csproj", "{7A180B05-DE3F-4D89-9F40-03A8E186AE82}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "androidsdk", "src\androidsdk\androidsdk.csproj", "{3E45D81B-4C4A-4E3F-B891-A0D8A3E2F0C1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "jit-times", "tools\jit-times\jit-times.csproj", "{F3CFF31C-037B-450F-B22D-1D6E529B2DCC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSBuildDeviceIntegration", "tests\MSBuildDeviceIntegration\MSBuildDeviceIntegration.csproj", "{16DB2680-399B-4111-AA26-6CDBBFA334D8}"
Expand Down Expand Up @@ -307,6 +311,14 @@ Global
{B2BC20D1-F468-46A9-B9B0-1C80CC4D4F36}.Debug|AnyCPU.Build.0 = Debug|Any CPU
{B2BC20D1-F468-46A9-B9B0-1C80CC4D4F36}.Release|AnyCPU.ActiveCfg = Release|Any CPU
{B2BC20D1-F468-46A9-B9B0-1C80CC4D4F36}.Release|AnyCPU.Build.0 = Release|Any CPU
{7A180B05-DE3F-4D89-9F40-03A8E186AE82}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
{7A180B05-DE3F-4D89-9F40-03A8E186AE82}.Debug|AnyCPU.Build.0 = Debug|Any CPU
{7A180B05-DE3F-4D89-9F40-03A8E186AE82}.Release|AnyCPU.ActiveCfg = Release|Any CPU
{7A180B05-DE3F-4D89-9F40-03A8E186AE82}.Release|AnyCPU.Build.0 = Release|Any CPU
{3E45D81B-4C4A-4E3F-B891-A0D8A3E2F0C1}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
{3E45D81B-4C4A-4E3F-B891-A0D8A3E2F0C1}.Debug|AnyCPU.Build.0 = Debug|Any CPU
{3E45D81B-4C4A-4E3F-B891-A0D8A3E2F0C1}.Release|AnyCPU.ActiveCfg = Release|Any CPU
{3E45D81B-4C4A-4E3F-B891-A0D8A3E2F0C1}.Release|AnyCPU.Build.0 = Release|Any CPU
{F3CFF31C-037B-450F-B22D-1D6E529B2DCC}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
{F3CFF31C-037B-450F-B22D-1D6E529B2DCC}.Debug|AnyCPU.Build.0 = Debug|Any CPU
{F3CFF31C-037B-450F-B22D-1D6E529B2DCC}.Release|AnyCPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -438,6 +450,8 @@ Global
{0C31DE30-F9DF-4312-BFFE-DCAD558CCF08} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{A0AEF446-3368-4591-9DE6-BC3B2B33337D} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{B2BC20D1-F468-46A9-B9B0-1C80CC4D4F36} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{7A180B05-DE3F-4D89-9F40-03A8E186AE82} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{3E45D81B-4C4A-4E3F-B891-A0D8A3E2F0C1} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
{F3CFF31C-037B-450F-B22D-1D6E529B2DCC} = {864062D3-A415-4A6F-9324-5820237BA058}
{16DB2680-399B-4111-AA26-6CDBBFA334D8} = {CAB438D8-B0F5-4AF0-BEBD-9E2ADBD7B483}
{372E8E3E-29D5-4B4D-88A2-4711CD628C4E} = {05C3B1D6-A4CE-4534-A9E4-E9117591ADF7}
Expand Down
2 changes: 1 addition & 1 deletion build-tools/automation/azure-pipelines-nightly.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ stages:
avdApiLevel: $(avdApiLevel)
avdAbi: $(avdAbi)
avdType: $(avdType)
emulatorMSBuildArgs: -p:JavaSdkDirectory=$(JI_JAVA_HOME_DEFAULT)
emulatorMSBuildArgs: -p:JavaSdkDirectory=$(JAVA_HOME)

- template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml
parameters:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,9 @@ steps:
}
$jdkHomePath=$xaPrepareJdkPath
if ("${{ parameters.useAgentJdkPath }}" -eq "true") {
$defaultJdkHomeVarName="JAVA_HOME_$(DefaultJavaSdkMajorVersion)_${agentArch}"
$defaultJdkHomePath=(Get-Item -Path "env:$defaultJdkHomeVarName").Value
$jdkHomeVarName="JAVA_HOME_${jdkMajorVersion}_${agentArch}"
$jdkHomePath=(Get-Item -Path "env:$jdkHomeVarName").Value
}
Write-Host "Setting variable 'JI_JAVA_HOME_DEFAULT' to '$defaultJdkHomePath'"
Write-Host "##vso[task.setvariable variable=JI_JAVA_HOME_DEFAULT]$defaultJdkHomePath"
Write-Host "Setting variable 'JAVA_HOME' and 'JI_JAVA_HOME' to '$jdkHomePath'"
Write-Host "Setting variable 'JAVA_HOME' to '$jdkHomePath'"
Write-Host "##vso[task.setvariable variable=JAVA_HOME]$jdkHomePath"
Write-Host "##vso[task.setvariable variable=JI_JAVA_HOME]$jdkHomePath"
displayName: set JAVA_HOME and JI_JAVA_HOME
displayName: set JAVA_HOME
3 changes: 3 additions & 0 deletions build-tools/scripts/Jar.targets
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)..\..\src\androidsdk\androidsdk.csproj" ReferenceOutputAssembly="False" />
</ItemGroup>
<Target Name="_GetJavacVersions"
DependsOnTargets="AndroidPrepareForBuild">
<PropertyGroup>
Expand Down
3 changes: 3 additions & 0 deletions build-tools/scripts/JavaCallableWrappers.targets
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)..\..\src\androidsdk\androidsdk.csproj" ReferenceOutputAssembly="False" />
</ItemGroup>
<Target Name="GenerateJavaCallableWrappers"
AfterTargets="$(JavaCallableWrapperAfterTargets)"
Inputs="$(JavaCallableWrapperAbsAssembly);@(JavaCallableWrapperSource)"
Expand Down
4 changes: 4 additions & 0 deletions build-tools/scripts/TestApks.targets
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
<UsingTask AssemblyFile="$(PrepTasksAssembly)" TaskName="Xamarin.Android.BuildTools.PrepTasks.ProcessLogcatTiming" TaskFactory="TaskHostFactory" Runtime="NET" />
<UsingTask AssemblyFile="$(PrepTasksAssembly)" TaskName="Xamarin.Android.BuildTools.PrepTasks.ProcessApkSizes" TaskFactory="TaskHostFactory" Runtime="NET" />

<ItemGroup>
<ProjectReference Include="$(MSBuildThisFileDirectory)..\..\src\androidsdk\androidsdk.csproj" ReferenceOutputAssembly="False" />
</ItemGroup>

<PropertyGroup>
<!-- APK tests might run on 32-bit emulators -->
<RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)' == '' and '$(PublishAot)' != 'true' and '$(UseMonoRuntime)' == 'true' ">android-arm64;android-x86;android-x64;</RuntimeIdentifiers>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,6 @@ namespace Xamarin.Android.Prepare
{
partial class Configurables
{
const string AdoptOpenJDKUpdate = "345";
const string AdoptOpenJDKBuild = "b01";

const string JetBrainsOpenJDKOperatingSystem = "linux-x64";
const string MicrosoftOpenJDKOperatingSystem = "linux-x64";
const string AdoptOpenJDKOperatingSystem = "x64_linux";

partial class Defaults
{
public const string NativeLibraryExtension = ".so";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
using System;
using System.Runtime.InteropServices;

namespace Xamarin.Android.Prepare
{
partial class Configurables
{
static string MicrosoftOpenJDKOperatingSystem = RuntimeInformation.OSArchitecture == Architecture.Arm64 ? "macos-aarch64": "macos-x64";

partial class Defaults
{
public const string NativeLibraryExtension = ".dylib";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ namespace Xamarin.Android.Prepare
{
partial class Configurables
{
const string MicrosoftOpenJDKFileExtension = "tar.gz";
const string AdoptOpenJDKArchiveExtension = "tar.gz";

partial class Defaults
{
public const string DefaultCompiler = "cc";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,6 @@ namespace Xamarin.Android.Prepare
{
partial class Configurables
{
const string AdoptOpenJDKUpdate = "345";
const string AdoptOpenJDKBuild = "b01";

const string JetBrainsOpenJDKOperatingSystem = "windows-x64";
const string MicrosoftOpenJDKOperatingSystem = "windows-x64";
const string MicrosoftOpenJDKFileExtension = "zip";
const string AdoptOpenJDKOperatingSystem = "x64_windows";
const string AdoptOpenJDKArchiveExtension = "zip";

partial class Defaults
{
public const string NativeLibraryExtension = ".dll";
Expand Down
15 changes: 0 additions & 15 deletions build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,11 @@ namespace Xamarin.Android.Prepare
partial class Configurables
{
const string MicrosoftOpenJDKVersion = "21.0.8";
const string MicrosoftOpenJDKRelease = "21.0.8";
const string MicrosoftOpenJDKRootDirName = "jdk-21.0.8+9";

static Context ctx => Context.Instance;

public static partial class Urls
{
// https://aka.ms/download-jdk/microsoft-jdk-17.0.11-linux-x64.tar.gz
// https://aka.ms/download-jdk/microsoft-jdk-17.0.11-macOS-x64.tar.gz or https://aka.ms/download-jdk/microsoft-jdk-17.0.11-macos-aarch64.pkg
// https://aka.ms/download-jdk/microsoft-jdk-17.0.11-windows-x64.zip
public static readonly Uri MicrosoftOpenJDK = new Uri ($"https://aka.ms/download-jdk/microsoft-jdk-{MicrosoftOpenJDKVersion}-{MicrosoftOpenJDKOperatingSystem}.{MicrosoftOpenJDKFileExtension}");

/// <summary>
/// Base URL for all Android SDK and NDK downloads. Used in <see cref="AndroidToolchain"/>
/// </summary>
Expand All @@ -42,8 +35,6 @@ public static partial class Defaults

public static readonly Version MicrosoftMinOpenJDKVersion = new Version (17, 0);
public static readonly Version MicrosoftOpenJDKVersion = new Version (Configurables.MicrosoftOpenJDKVersion);
public static readonly Version MicrosoftOpenJDKRelease = new Version (Configurables.MicrosoftOpenJDKRelease);
public static readonly string MicrosoftOpenJDKRootDirName = Configurables.MicrosoftOpenJDKRootDirName;

public const string DotNetTestRuntimeVersion = "3.1.11";

Expand Down Expand Up @@ -207,10 +198,6 @@ public static partial class Paths
public static string MonoAndroidFrameworksRootDir => GetCachedPath (ref monoAndroidFrameworksRootDir, () => Path.Combine (XAInstallPrefix, MonoAndroidFrameworksSubDir));
public static string InstallMSBuildDir => GetCachedPath (ref installMSBuildDir, () => ctx.Properties.GetRequiredValue (KnownProperties.MicrosoftAndroidSdkOutDir));

// OpenJDK
public static string OpenJDKInstallDir => GetCachedPath (ref openJDKInstallDir, () => Path.Combine (ctx.Properties.GetRequiredValue (KnownProperties.AndroidToolchainDirectory), Defaults.JdkFolder));
public static string OpenJDKCacheDir => GetCachedPath (ref openJDKCacheDir, () => ctx.Properties.GetRequiredValue (KnownProperties.AndroidToolchainCacheDirectory));

// .NET 6+
public static string NetcoreAppRuntimeAndroidARM => GetCachedPath (ref netcoreAppRuntimeAndroidARM, () => GetNetcoreAppRuntimePath (ctx, "arm"));
public static string NetcoreAppRuntimeAndroidARM64 => GetCachedPath (ref netcoreAppRuntimeAndroidARM64, () => GetNetcoreAppRuntimePath (ctx, "arm64"));
Expand Down Expand Up @@ -305,8 +292,6 @@ static string GetCachedPath (ref string? variable, Func<string> creator)
static string? installMSBuildDir;
static string? monoAndroidFrameworksRootDir;
static string? externalJavaInteropDir;
static string? openJDKInstallDir;
static string? openJDKCacheDir;
static string? configurationPropsGeneratedPath;
static string? netcoreAppRuntimeAndroidARM;
static string? netcoreAppRuntimeAndroidARM64;
Expand Down
5 changes: 1 addition & 4 deletions build-tools/xaprepare/xaprepare/OperatingSystems/OS.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,7 @@ abstract class OS : AppObject
/// </summary>
protected virtual bool InitOS ()
{
JavaHome = Environment.GetEnvironmentVariable ("JI_JAVA_HOME") ?? String.Empty;
if (string.IsNullOrEmpty (JavaHome)) {
JavaHome = Context.Instance.Properties.GetValue (KnownProperties.JavaSdkDirectory)?.Trim () ?? String.Empty;
}
JavaHome = Context.Instance.Properties.GetValue (KnownProperties.JavaSdkDirectory)?.Trim () ?? String.Empty;
if (String.IsNullOrEmpty (JavaHome)) {
var androidToolchainDirectory = Context.Instance.Properties.GetValue (KnownProperties.AndroidToolchainDirectory)?.Trim () ?? String.Empty;
JavaHome = Path.Combine (androidToolchainDirectory, Configurables.Defaults.JdkFolder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ partial class Scenario_AndroidTestDependencies : ScenarioNoStandardEndSteps
protected virtual AndroidToolchainComponentType AndroidSdkNdkType => AndroidToolchainComponentType.CoreDependency;

public Scenario_AndroidTestDependencies ()
: base ("AndroidTestDependencies", "Install Android SDK, OpenJDK and .NET preview test dependencies.")
: base ("AndroidTestDependencies", "Install Android SDK and .NET preview test dependencies.")
{}

protected Scenario_AndroidTestDependencies (string name, string description)
Expand All @@ -18,7 +18,6 @@ protected Scenario_AndroidTestDependencies (string name, string description)
protected override void AddSteps (Context context)
{
Steps.Add (new Step_InstallDotNetPreview ());
Steps.Add (new Step_InstallMicrosoftOpenJDK (allowJIJavaHomeMatch: true));
Steps.Add (new Step_Android_SDK_NDK (AndroidSdkNdkType));

// disable installation of missing programs...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ partial class Scenario_EmulatorTestDependencies : Scenario_AndroidTestDependenci
protected override AndroidToolchainComponentType AndroidSdkNdkType => AndroidToolchainComponentType.CoreDependency | AndroidToolchainComponentType.EmulatorDependency;

public Scenario_EmulatorTestDependencies ()
: base ("EmulatorTestDependencies", "Install Android SDK (with emulator), OpenJDK, and .NET preview test dependencies.")
: base ("EmulatorTestDependencies", "Install Android SDK (with emulator) and .NET preview test dependencies.")
{}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ protected override void AddSteps (Context context)
throw new ArgumentNullException (nameof (context));

Steps.Add (new Step_InstallDotNetPreview ());
Steps.Add (new Step_InstallMicrosoftOpenJDK ());
Steps.Add (new Step_Android_SDK_NDK ());
Steps.Add (new Step_GenerateFiles (atBuildStart: true));
Steps.Add (new Step_PrepareProps ());
Expand Down
56 changes: 0 additions & 56 deletions build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
Expand Down Expand Up @@ -70,10 +68,6 @@ protected override async Task<bool> Execute (Context context)

toolchain.Components.ForEach (c => Check (context, packageCacheDir, sdkRoot, c, toInstall, 4));
if (toInstall.Count == 0) {
if (!AcceptLicenses (context, sdkRoot)) {
Log.ErrorLine ("Failed to accept Android SDK licenses");
return false;
}
WritePackageXmls (sdkRoot);
return GatherNDKInfo (context);
}
Expand Down Expand Up @@ -114,61 +108,11 @@ protected override async Task<bool> Execute (Context context)
await Unpack (context, tempDir, p);
}

if (!AcceptLicenses (context, sdkRoot)) {
Log.ErrorLine ("Failed to accept Android SDK licenses");
return false;
}

WritePackageXmls (sdkRoot);

return GatherNDKInfo (context);
}

bool AcceptLicenses (Context context, string sdkRoot)
{
string[] sdkManagerPaths = new[]{
Path.Combine (sdkRoot, "cmdline-tools", context.Properties [KnownProperties.CommandLineToolsFolder] ?? String.Empty, "bin", "sdkmanager"),
Path.Combine (sdkRoot, "cmdline-tools", "latest", "bin", "sdkmanager"),
};
string sdkManager = "";
foreach (var sdkManagerPath in sdkManagerPaths) {
sdkManager = context.OS.Which (sdkManagerPath, required: false);
if (!string.IsNullOrEmpty (sdkManager))
break;
}
if (sdkManager.Length == 0)
throw new InvalidOperationException ("sdkmanager not found");
string jdkDir = context.OS.JavaHome;

Log.Todo ("Modify ProcessRunner to allow standard input writing and switch to it here");
// var runner = new ProcessRunner (sdkManager, "--licenses");
// runner.StartInfoCallback = (ProcessStartInfo psi) => {
// if (!String.IsNullOrEmpty (jdkDir))
// psi.EnvironmentVariables.Add ("JAVA_HOME", jdkDir);
// psi.RedirectStandardInput = true;
// };

var psi = new ProcessStartInfo (sdkManager, "--licenses") {
UseShellExecute = false,
RedirectStandardInput = true
};
if (!String.IsNullOrEmpty (jdkDir) && !psi.EnvironmentVariables.ContainsKey ("JAVA_HOME"))
psi.EnvironmentVariables.Add ("JAVA_HOME", jdkDir);

Log.DebugLine ($"Starting {psi.FileName} {psi.Arguments}");
Process? proc = Process.Start (psi);
if (proc != null) {
for (int i = 0; i < 10; i++)
proc.StandardInput.WriteLine ('y');

proc.WaitForExit ();
} else {
Log.DebugLine ("Failed to start process");
}

return true;
}

bool GatherNDKInfo (Context context)
{
if (!CopyRedistributableFiles (context)) {
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Loading