Skip to content

Commit a3267e3

Browse files
authored
[Xamarin.Android.Build.Tests] Fix Lint Warnings (#3356)
We can get into a situation where we dont support a new api level, BUT our tooling installed it in the `platforms` folder of the SDK. This means we get the following warning warning XA0102: Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. [OldTargetApi] What we need to do in the test is ignore this warning, IF we are in that particular situation.
1 parent 9814267 commit a3267e3

File tree

2 files changed

+25
-1
lines changed
  • src/Xamarin.Android.Build.Tasks/Tests

2 files changed

+25
-1
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1545,6 +1545,8 @@ public void CheckLintErrorsAndWarnings ()
15451545
{
15461546
FixLintOnWindows ();
15471547

1548+
string disabledIssues = "StaticFieldLeak,ObsoleteSdkInt,AllowBackup";
1549+
15481550
var proj = new XamarinAndroidApplicationProject () {
15491551
PackageReferences = {
15501552
KnownPackages.AndroidSupportV4_27_0_2_1,
@@ -1553,7 +1555,7 @@ public void CheckLintErrorsAndWarnings ()
15531555
};
15541556
proj.UseLatestPlatformSdk = false;
15551557
proj.SetProperty ("AndroidLintEnabled", true.ToString ());
1556-
proj.SetProperty ("AndroidLintDisabledIssues", "StaticFieldLeak,ObsoleteSdkInt,AllowBackup");
1558+
proj.SetProperty ("AndroidLintDisabledIssues", disabledIssues);
15571559
proj.SetProperty ("AndroidLintEnabledIssues", "");
15581560
proj.SetProperty ("AndroidLintCheckIssues", "");
15591561
proj.MainActivity = proj.DefaultMainActivity.Replace ("public class MainActivity : Activity", @"
@@ -1581,8 +1583,12 @@ public class MainActivity : Activity
15811583
}
15821584
});
15831585
using (var b = CreateApkBuilder ("temp/CheckLintErrorsAndWarnings", cleanupOnDispose: false)) {
1586+
int maxApiLevel = b.GetMaxInstalledPlatform ();
15841587
string apiLevel;
15851588
proj.TargetFrameworkVersion = b.LatestTargetFrameworkVersion (out apiLevel);
1589+
if (int.TryParse (apiLevel, out int a) && a < maxApiLevel)
1590+
disabledIssues += ",OldTargetApi";
1591+
proj.SetProperty ("AndroidLintDisabledIssues", disabledIssues);
15861592
proj.AndroidManifest = @"<?xml version=""1.0"" encoding=""utf-8""?>
15871593
<manifest xmlns:android=""http://schemas.android.com/apk/res/android"" android:versionCode=""1"" android:versionName=""1.0"" package=""UnamedProject.UnamedProject"">
15881594
<uses-sdk android:minSdkVersion=""24"" android:targetSdkVersion=""{APILEVEL}"" />

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,24 @@ public void GetTargetFrameworkVersionRange (out string firstApiLevel, out string
235235
}
236236
}
237237

238+
public int GetMaxInstalledPlatform ()
239+
{
240+
using (var builder = new Builder ()) {
241+
builder.ResolveSdks ();
242+
int result = 0;
243+
foreach (var dir in Directory.EnumerateDirectories (Path.Combine (builder.AndroidSdkDirectory, "platforms"))) {
244+
int version;
245+
string v = Path.GetFileName (dir).Replace ("android-", "");
246+
if (!int.TryParse (v, out version))
247+
continue;
248+
if (version < result)
249+
continue;
250+
result = version;
251+
}
252+
return result;
253+
}
254+
}
255+
238256
static string GetApiLevelFromInfoPath (string androidApiInfo)
239257
{
240258
if (!File.Exists (androidApiInfo))

0 commit comments

Comments
 (0)