Skip to content

Commit dfdbe08

Browse files
[.NET 5] fix warning for $(TFV) of 5.0
In our current .NET 5 builds, you always hit: warning XA1008: The TargetFrameworkVersion (Android API level 21) is lower than the targetSdkVersion (29). Please increase the `$(TargetFrameworkVersion)` or decrease the `android:targetSdkVersion` in the `AndroidManifest.xml` so that the API levels match. It is giving a warning for Google Play, because `$(TargetFrameworkVersion)` is equal to 5.0. To fix this, I modified the `<CheckGoogleSdkRequirements/>` MSBuild task so that `TargetFrameworkVersion` is optional. For .NET 5 builds, we can pass in `$(_AndroidApiLevel)` instead. This way we will still get some important warnings for .NET 5 such as `targetSdkVersion` or `minSdkVersion` that need to be changed in the `AndroidManifest.xml` file. I also fixed up `LastBuildOutput`, we needed the value for .NET 5 MSBuild tests and I removed unnecessary usage of `yield return`.
1 parent ef12d24 commit dfdbe08

File tree

7 files changed

+42
-15
lines changed

7 files changed

+42
-15
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,26 @@ public class CheckGoogleSdkRequirements : AndroidTask
1414
{
1515
public override string TaskPrefix => "CGS";
1616

17-
[Required]
17+
/// <summary>
18+
/// This will be blank for .NET 5 builds
19+
/// </summary>
1820
public string TargetFrameworkVersion { get; set; }
1921

22+
/// <summary>
23+
/// This is used instead of TargetFrameworkVersion for .NET 5 builds
24+
/// </summary>
25+
public int ApiLevel { get; set; }
26+
2027
[Required]
2128
public string ManifestFile { get; set; }
2229

2330
public override bool RunTask ()
2431
{
2532
ManifestDocument manifest = new ManifestDocument (ManifestFile);
2633

27-
var compileSdk = MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion (TargetFrameworkVersion);
34+
var compileSdk = string.IsNullOrEmpty (TargetFrameworkVersion) ?
35+
ApiLevel :
36+
MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion (TargetFrameworkVersion);
2837

2938
if (!int.TryParse (manifest.GetMinimumSdk (), out int minSdk)) {
3039
minSdk = 1;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public void DotNetPublish ([Values (false, true)] bool isRelease)
3737
};
3838
var dotnet = CreateDotNetBuilder (proj);
3939
Assert.IsTrue (dotnet.Publish (), "`dotnet publish` should succeed");
40+
Assert.IsTrue (StringAssertEx.ContainsText (dotnet.LastBuildOutput, " 0 Warning(s)"), "Should have no MSBuild warnings.");
4041
}
4142

4243
[Test]

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,9 @@ public class Builder : IDisposable
3030
public IEnumerable<string> LastBuildOutput {
3131
get {
3232
if (!string.IsNullOrEmpty (buildLogFullPath) && File.Exists (buildLogFullPath)) {
33-
foreach (var line in File.ReadLines (buildLogFullPath, Encoding.UTF8)) {
34-
yield return line;
35-
}
33+
return File.ReadLines (buildLogFullPath, Encoding.UTF8);
3634
}
37-
yield return String.Empty;
35+
return Enumerable.Empty<string> ();
3836
}
3937
}
4038
public TimeSpan LastBuildTime { get; protected set; }

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetCLI.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Diagnostics;
44
using System.IO;
5+
using System.Linq;
56
using System.Text;
67

78
namespace Xamarin.ProjectTools
@@ -82,6 +83,15 @@ public bool Publish (string target = null)
8283
return Execute (arguments.ToArray ());
8384
}
8485

86+
public IEnumerable<string> LastBuildOutput {
87+
get {
88+
if (!string.IsNullOrEmpty (BuildLogFile) && File.Exists (BuildLogFile)) {
89+
return File.ReadLines (BuildLogFile, Encoding.UTF8);
90+
}
91+
return Enumerable.Empty<string> ();
92+
}
93+
}
94+
8595
List<string> GetDefaultCommandLineArgs (string verb, string target = null)
8696
{
8797
string testDir = Path.GetDirectoryName (projectOrSolution);

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
4040
<UsingTask TaskName="Xamarin.Android.Tasks.CalculateAdditionalResourceCacheDirectories" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
4141
<UsingTask TaskName="Xamarin.Android.Tasks.CalculateLayoutCodeBehind" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
4242
<UsingTask TaskName="Xamarin.Android.Tasks.CalculateProjectDependencies" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
43-
<UsingTask TaskName="Xamarin.Android.Tasks.CheckGoogleSdkRequirements" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
4443
<UsingTask TaskName="Xamarin.Android.Tasks.CheckForRemovedItems" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
4544
<UsingTask TaskName="Xamarin.Android.Tasks.CheckForInvalidResourceFileNames" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
4645
<UsingTask TaskName="Xamarin.Android.Tasks.CompileToDalvik" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
@@ -550,14 +549,6 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
550549
/>
551550
</Target>
552551

553-
<Target Name="_CheckGoogleSdkRequirements"
554-
Condition="Exists('$(IntermediateOutputPath)android\AndroidManifest.xml') And '$(AndroidEnableGooglePlayStoreChecks)' == 'true' ">
555-
<CheckGoogleSdkRequirements
556-
TargetFrameworkVersion="$(TargetFrameworkVersion)"
557-
ManifestFile="$(IntermediateOutputPath)android\AndroidManifest.xml"
558-
/>
559-
</Target>
560-
561552
<!--
562553
*******************************************
563554
Application Build

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ projects. .NET 5 projects will not import this file.
145145

146146
<UsingTask TaskName="Xamarin.Android.Tasks.Legacy.ValidateJavaVersion" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
147147
<UsingTask TaskName="Xamarin.Android.Tasks.Legacy.ResolveAndroidTooling" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
148+
<UsingTask TaskName="Xamarin.Android.Tasks.CheckGoogleSdkRequirements" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
148149

149150
<Target Name="_GetReferenceAssemblyPaths">
150151
<GetReferenceAssemblyPaths
@@ -245,4 +246,12 @@ projects. .NET 5 projects will not import this file.
245246
</ItemGroup>
246247
</Target>
247248

249+
<Target Name="_CheckGoogleSdkRequirements"
250+
Condition="Exists('$(IntermediateOutputPath)android\AndroidManifest.xml') And '$(AndroidEnableGooglePlayStoreChecks)' == 'true' ">
251+
<CheckGoogleSdkRequirements
252+
TargetFrameworkVersion="$(TargetFrameworkVersion)"
253+
ManifestFile="$(IntermediateOutputPath)android\AndroidManifest.xml"
254+
/>
255+
</Target>
256+
248257
</Project>

src/Xamarin.Android.Sdk/targets/Xamarin.Android.Sdk.Tooling.targets

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ called for "legacy" projects in Xamarin.Android.Legacy.targets.
1313

1414
<UsingTask TaskName="Xamarin.Android.Tasks.ValidateJavaVersion" AssemblyFile="$(_XamarinAndroidBuildTasksAssembly)" />
1515
<UsingTask TaskName="Xamarin.Android.Tasks.ResolveAndroidTooling" AssemblyFile="$(_XamarinAndroidBuildTasksAssembly)" />
16+
<UsingTask TaskName="Xamarin.Android.Tasks.CheckGoogleSdkRequirements" AssemblyFile="$(_XamarinAndroidBuildTasksAssembly)" />
1617

1718
<Target Name="_ResolveAndroidTooling">
1819
<ValidateJavaVersion
@@ -54,4 +55,12 @@ called for "legacy" projects in Xamarin.Android.Legacy.targets.
5455
</ResolveAndroidTooling>
5556
</Target>
5657

58+
<Target Name="_CheckGoogleSdkRequirements"
59+
Condition="Exists('$(IntermediateOutputPath)android\AndroidManifest.xml') And '$(AndroidEnableGooglePlayStoreChecks)' == 'true' ">
60+
<CheckGoogleSdkRequirements
61+
ApiLevel="$(_AndroidApiLevel)"
62+
ManifestFile="$(IntermediateOutputPath)android\AndroidManifest.xml"
63+
/>
64+
</Target>
65+
5766
</Project>

0 commit comments

Comments
 (0)