Skip to content

Commit 010332d

Browse files
dellis1972jonpryor
authored andcommitted
[Xamarin.Android.Build.Tasks] Unable to build projects with lint checks enabled against 15.3 (#649)
Fixes: https://bugzilla.xamarin.com/show_bug.cgi?id=57532 The Directory test from commit 9cf367f did not really work. This is because the 'bin' directory existed prior to 25.3.0. But the lint tool only moved in 25.3.0. To fix this we are adding new code to the ResolveSdks Task. This will find the correct location of the `lint` tool. It will also use the `$(LintToolPath)` the user provides. If the tool cannot be found an appropriate error message will be raised.
1 parent edabe8a commit 010332d

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ public class ReadResolvedSdksCache : Task
8282
[Output]
8383
public string AndroidSequencePointsMode { get; set; }
8484

85+
[Output]
86+
public string LintToolPath { get; set; }
87+
8588
public override bool Execute ()
8689
{
8790
MonoAndroidHelper.InitializeAndroidLogger (ErrorHandler, WarningHandler, InfoHandler, DebugHandler);
@@ -121,6 +124,7 @@ public bool RunTask ()
121124
.Select (e => e.Value)
122125
.ToArray ();
123126
AndroidSequencePointsMode = sdk.Element ("AndroidSequencePointsMode")?.Value ?? "None";
127+
LintToolPath = sdk.Element ("LintToolPath")?.Value ?? Path.Combine (AndroidSdkPath, "tools");
124128

125129
Log.LogDebugMessage ("ResolveSdksTask Outputs:");
126130
Log.LogDebugMessage (" AndroidApiLevel: {0}", AndroidApiLevel);
@@ -137,6 +141,7 @@ public bool RunTask ()
137141
Log.LogDebugMessage (" ZipAlignPath: {0}", ZipAlignPath);
138142
Log.LogDebugMessage (" SupportedApiLevel: {0}", SupportedApiLevel);
139143
Log.LogDebugMessage (" AndroidSequencePointsMode: {0}", AndroidSequencePointsMode);
144+
Log.LogDebugMessage (" LintToolPath: {0}", LintToolPath);
140145

141146
MonoAndroidHelper.TargetFrameworkDirectories = ReferenceAssemblyPaths;
142147

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,14 @@ public class ResolveSdks : Task
9999
[Output]
100100
public string AndroidSequencePointsMode { get; set; }
101101

102+
[Output]
103+
public string LintToolPath { get; set; }
104+
102105
static bool IsWindows = Path.DirectorySeparatorChar == '\\';
103106
static readonly string ZipAlign = IsWindows ? "zipalign.exe" : "zipalign";
104107
static readonly string Aapt = IsWindows ? "aapt.exe" : "aapt";
105108
static readonly string Android = IsWindows ? "android.bat" : "android";
109+
static readonly string Lint = IsWindows ? "lint.bat" : "lint";
106110

107111

108112
public override bool Execute ()
@@ -127,6 +131,7 @@ public bool RunTask ()
127131
Log.LogDebugMessage (" SequencePointsMode: {0}", SequencePointsMode);
128132
Log.LogDebugMessage (" MonoAndroidToolsPath: {0}", MonoAndroidToolsPath);
129133
Log.LogDebugMessage (" MonoAndroidBinPath: {0}", MonoAndroidBinPath);
134+
Log.LogDebugMessage (" LintToolPath: {0}", LintToolPath);
130135

131136
MonoAndroidHelper.RefreshMonoDroidSdk (MonoAndroidToolsPath, MonoAndroidBinPath, ReferenceAssemblyPaths);
132137
MonoAndroidHelper.RefreshAndroidSdk (AndroidSdkPath, AndroidNdkPath, JavaSdkPath);
@@ -161,6 +166,25 @@ public bool RunTask ()
161166
string toolsZipAlignPath = Path.Combine (AndroidSdkPath, "tools", ZipAlign);
162167
bool findZipAlign = (string.IsNullOrEmpty (ZipAlignPath) || !Directory.Exists (ZipAlignPath)) && !File.Exists (toolsZipAlignPath);
163168

169+
var lintPaths = new string [] {
170+
LintToolPath ?? string.Empty,
171+
Path.Combine (AndroidSdkPath, "tools"),
172+
Path.Combine (AndroidSdkPath, "tools", "bin"),
173+
};
174+
175+
LintToolPath = null;
176+
foreach ( var path in lintPaths) {
177+
if (File.Exists (Path.Combine (path, Lint))) {
178+
LintToolPath = path;
179+
break;
180+
}
181+
}
182+
if (string.IsNullOrEmpty (LintToolPath)) {
183+
Log.LogCodedError ("XA5205", $"Cannot find {Lint} in the AndroidSdk. Please set via /p:LintToolPath.");
184+
return false;
185+
}
186+
187+
164188
foreach (var dir in AndroidSdk.GetBuildToolsPaths (AndroidSdkBuildToolsVersion)) {
165189
Log.LogDebugMessage ("Trying build-tools path: {0}", dir);
166190
if (dir == null || !Directory.Exists (dir))
@@ -261,6 +285,7 @@ public bool RunTask ()
261285
Log.LogDebugMessage (" ZipAlignPath: {0}", ZipAlignPath);
262286
Log.LogDebugMessage (" SupportedApiLevel: {0}", SupportedApiLevel);
263287
Log.LogDebugMessage (" AndroidSequencePointMode: {0}", AndroidSequencePointsMode);
288+
Log.LogDebugMessage (" LintToolPath: {0}", LintToolPath);
264289

265290
if (!string.IsNullOrEmpty (CacheFile)) {
266291
Directory.CreateDirectory (Path.GetDirectoryName (CacheFile));
@@ -284,7 +309,8 @@ public bool RunTask ()
284309
new XElement ("ZipAlignPath", ZipAlignPath),
285310
new XElement ("MonoAndroidIncludePath", MonoAndroidIncludePath),
286311
new XElement ("SupportedApiLevel", SupportedApiLevel),
287-
new XElement ("AndroidSequencePointsMode", AndroidSequencePointsMode.ToString ())
312+
new XElement ("AndroidSequencePointsMode", AndroidSequencePointsMode.ToString ()),
313+
new XElement ("LintToolPath", LintToolPath)
288314
));
289315
document.Save (CacheFile);
290316
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
590590
ReferenceAssemblyPaths="$(_XATargetFrameworkDirectories)"
591591
TargetFrameworkVersion="$(TargetFrameworkVersion)"
592592
UseLatestAndroidPlatformSdk="$(AndroidUseLatestPlatformSdk)"
593+
LintToolPath="$(LintToolPath)"
593594
ZipAlignPath="$(ZipAlignToolPath)">
594595
<Output TaskParameter="AndroidApiLevel" PropertyName="_AndroidApiLevel" Condition="'$(_AndroidApiLevel)' == ''" />
595596
<Output TaskParameter="AndroidApiLevelName" PropertyName="_AndroidApiLevelName" />
@@ -607,6 +608,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
607608
<Output TaskParameter="ZipAlignPath" PropertyName="ZipAlignToolPath" Condition="'$(ZipAlignToolPath)' == ''" />
608609
<Output TaskParameter="AndroidSdkBuildToolsBinPath" PropertyName="AndroidSdkBuildToolsBinPath" Condition="'$(AndroidSdkBuildToolsBinPath)' == ''" />
609610
<Output TaskParameter="AndroidSequencePointsMode" PropertyName="_SequencePointsMode" Condition="'$(_SequencePointsMode)' == ''" />
611+
<Output TaskParameter="LintToolPath" PropertyName="LintToolPath" Condition="'$(LintToolPath)' == ''" />
610612
</ResolveSdks>
611613
<CreateProperty Value="$(TargetFrameworkIdentifier),Version=$(_TargetFrameworkVersion),Profile=$(TargetFrameworkProfile)">
612614
<Output TaskParameter="Value" PropertyName="TargetFrameworkMoniker"
@@ -752,12 +754,6 @@ because xbuild doesn't support framework reference assemblies.
752754
/>
753755
</CreateProperty>
754756

755-
<CreateProperty Value="$(_AndroidToolsDirectory)bin\" Condition="Exists ('$(_AndroidToolsDirectory)bin\')">
756-
<Output TaskParameter="Value" PropertyName="LintToolPath"
757-
Condition="'$(LintToolPath)' == ''"
758-
/>
759-
</CreateProperty>
760-
761757
<CreateProperty Value="$(_AndroidToolsDirectory)" Condition="Exists ('$(_AndroidToolsDirectory)')">
762758
<Output TaskParameter="Value" PropertyName="LintToolPath"
763759
Condition="'$(LintToolPath)' == ''"

0 commit comments

Comments
 (0)