Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,18 @@ public class AndroidDependenciesTests : BaseTest
public void InstallAndroidDependenciesTest ()
{
AssertCommercialBuild ();
// We need to grab the latest API level *before* changing env vars
var apiLevel = AndroidSdkResolver.GetMaxInstalledPlatform ();
var old = Environment.GetEnvironmentVariable ("ANDROID_SDK_PATH");
try {
string sdkPath = Path.Combine (Root, "temp", TestName, "android-sdk");
Environment.SetEnvironmentVariable ("ANDROID_SDK_PATH", sdkPath);
if (Directory.Exists (sdkPath))
Directory.Delete (sdkPath, true);
Directory.CreateDirectory (sdkPath);
var proj = new XamarinAndroidApplicationProject ();
var proj = new XamarinAndroidApplicationProject {
TargetSdkVersion = apiLevel.ToString (),
};
using (var b = CreateApkBuilder ()) {
b.CleanupAfterSuccessfulBuild = false;
string defaultTarget = b.Target;
Expand Down Expand Up @@ -78,6 +82,7 @@ public void GetDependencyWhenBuildToolsAreMissingTest ()
var proj = new XamarinAndroidApplicationProject () {
IsRelease = true,
TargetFrameworkVersion = "v8.0",
TargetSdkVersion = "26",
UseLatestPlatformSdk = false,
};
var parameters = new string [] {
Expand All @@ -90,7 +95,7 @@ public void GetDependencyWhenBuildToolsAreMissingTest ()
builder.Target = "GetAndroidDependencies";
Assert.True (builder.Build (proj, parameters: parameters),
string.Format ("First Build should have succeeded"));
int apiLevel = Builder.UseDotNet ? builder.GetMaxInstalledPlatform () : 26;
int apiLevel = Builder.UseDotNet ? AndroidSdkResolver.GetMaxInstalledPlatform () : 26;
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.");
Expand All @@ -112,6 +117,7 @@ public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool creat
var proj = new XamarinAndroidApplicationProject () {
IsRelease = true,
TargetFrameworkVersion = "v8.0",
TargetSdkVersion = "26",
UseLatestPlatformSdk = false,
};
var parameters = new string [] {
Expand All @@ -125,7 +131,7 @@ public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool creat
builder.Target = "GetAndroidDependencies";
Assert.True (builder.Build (proj, parameters: parameters),
string.Format ("First Build should have succeeded"));
int apiLevel = Builder.UseDotNet ? builder.GetMaxInstalledPlatform () : 26;
int apiLevel = Builder.UseDotNet ? AndroidSdkResolver.GetMaxInstalledPlatform () : 26;
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.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1105,6 +1105,8 @@ public void CheckMaxResWarningIsEmittedAsAWarning([Values (false, true)] bool us
var path = Path.Combine ("temp", TestName);
var proj = new XamarinAndroidApplicationProject () {
TargetFrameworkVersion = "v8.0",
TargetSdkVersion = "26",
MinSdkVersion = null,
UseLatestPlatformSdk = false,
IsRelease = true,
OtherBuildItems = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1283,7 +1283,8 @@ public void MultiDexCustomMainDexFileList ([Values ("dx", "d8")] string dexTool,
};
var proj = CreateMultiDexRequiredApplication ();
proj.DexTool = dexTool;
proj.AndroidManifest = proj.AndroidManifest.Replace ("<uses-sdk />", $"<uses-sdk android:minSdkVersion=\"{minSdkVersion}\" />");
proj.MinSdkVersion = minSdkVersion;
proj.TargetSdkVersion = null;
proj.SetProperty ("AndroidEnableMultiDex", "True");
proj.OtherBuildItems.Add (new BuildItem ("MultiDexMainDexList", "mymultidex.keep") { TextContent = () => "MyTest.class", Encoding = Encoding.ASCII });
proj.OtherBuildItems.Add (new BuildItem ("AndroidJavaSource", "MyTest.java") { TextContent = () => "public class MyTest {}", Encoding = Encoding.ASCII });
Expand Down Expand Up @@ -1851,18 +1852,14 @@ public class MainActivity : Activity
}
});
using (var b = CreateApkBuilder ("temp/CheckLintErrorsAndWarnings", cleanupOnDispose: false)) {
int maxApiLevel = b.GetMaxInstalledPlatform ();
int maxApiLevel = AndroidSdkResolver.GetMaxInstalledPlatform ();
string apiLevel;
proj.TargetFrameworkVersion = b.LatestTargetFrameworkVersion (out apiLevel);
if (int.TryParse (apiLevel, out int a) && a < maxApiLevel)
disabledIssues += ",OldTargetApi";
proj.SetProperty ("AndroidLintDisabledIssues", disabledIssues);
proj.AndroidManifest = @"<?xml version=""1.0"" encoding=""utf-8""?>
<manifest xmlns:android=""http://schemas.android.com/apk/res/android"" android:versionCode=""1"" android:versionName=""1.0"" package=""UnamedProject.UnamedProject"">
<uses-sdk android:minSdkVersion=""24"" android:targetSdkVersion=""{APILEVEL}"" />
<application android:label=""${PROJECT_NAME}"">
</application >
</manifest> ".Replace ("{APILEVEL}", apiLevel);
proj.MinSdkVersion = "24";
proj.TargetSdkVersion = apiLevel;
Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
StringAssertEx.DoesNotContain ("XA0102", b.LastBuildOutput, "Output should not contain any XA0102 warnings");
StringAssertEx.DoesNotContain ("XA0103", b.LastBuildOutput, "Output should not contain any XA0103 errors");
Expand Down Expand Up @@ -1908,14 +1905,14 @@ public void CheckLintConfigMerging ()
}

[Test]
[Category ("dotnet")]
/// <summary>
/// Reference https://bugzilla.xamarin.com/show_bug.cgi?id=29568
/// </summary>
public void BuildLibraryWhichUsesResources ([Values (false, true)] bool isRelease)
{
var proj = new XamarinAndroidLibraryProject () { IsRelease = isRelease };
proj.PackageReferences.Add (KnownPackages.AndroidSupportV4_27_0_2_1);
proj.PackageReferences.Add (KnownPackages.SupportV7AppCompat_27_0_2_1);
var proj = new XamarinAndroidLibraryProject { IsRelease = isRelease };
proj.PackageReferences.Add (KnownPackages.AndroidXAppCompat);
proj.AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\values\\Styles.xml") {
TextContent = () => @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
<resources>
Expand Down Expand Up @@ -3181,6 +3178,7 @@ public void IfAndroidJarDoesNotExistThrowXA5207 ()
var proj = new XamarinAndroidApplicationProject () {
IsRelease = true,
TargetFrameworkVersion = "v8.1",
TargetSdkVersion = "27",
UseLatestPlatformSdk = false,
};
using (var builder = CreateApkBuilder (Path.Combine (path, proj.ProjectName), false, false)) {
Expand Down Expand Up @@ -3830,8 +3828,10 @@ public void WarningForMinSdkVersion ()
{
int minSdkVersion = XABuildConfig.NDKMinimumApiAvailable;
int tooLowSdkVersion = minSdkVersion - 1;
var proj = new XamarinAndroidApplicationProject ();
proj.AndroidManifest = proj.AndroidManifest.Replace ("<uses-sdk />", $"<uses-sdk android:minSdkVersion=\"{tooLowSdkVersion}\" />");
var proj = new XamarinAndroidApplicationProject {
MinSdkVersion = tooLowSdkVersion.ToString (),
TargetSdkVersion = null,
};
using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) {
Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
Assert.IsTrue (
Expand Down Expand Up @@ -4010,6 +4010,7 @@ public void AbiDelimiters ([Values ("armeabi-v7a%3bx86", "armeabi-v7a,x86")] str
}

[Test]
[Category ("dotnet")]
public void WorkManager ()
{
var proj = new XamarinFormsAndroidApplicationProject ();
Expand All @@ -4027,7 +4028,8 @@ public MyWorker (Context c, WorkerParameters p) : base (c, p) { }
}
"
});
proj.PackageReferences.Add (KnownPackages.Android_Arch_Work_Runtime);
proj.PackageReferences.Add (
Builder.UseDotNet ? KnownPackages.AndroidXWorkRuntime : KnownPackages.Android_Arch_Work_Runtime);
using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) {
Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1131,6 +1131,7 @@ public void AndroidAssetMissing ()
}

[Test]
[Category ("dotnet")]
[NonParallelizable]
public void AndroidXMigrationBug ()
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Linq;
using NUnit.Framework;
using Xamarin.ProjectTools;
Expand Down Expand Up @@ -427,6 +427,7 @@ public void VersionCodeTests (bool seperateApk, string abis, string versionCode,
{
var proj = new XamarinAndroidApplicationProject () {
IsRelease = true,
MinSdkVersion = null,
};
proj.SetProperty ("Foo", "1");
proj.SetProperty (proj.ReleaseProperties, KnownProperties.AndroidCreatePackagePerAbi, seperateApk);
Expand Down Expand Up @@ -847,9 +848,9 @@ public void Queries_API30 ([Values (true, false)] bool useAapt2)
var proj = new XamarinAndroidApplicationProject {
AndroidUseSharedRuntime = true,
EmbedAssembliesIntoApk = false,
TargetSdkVersion = "30",
};
proj.SetProperty ("AndroidUseAapt2", useAapt2.ToString ());
proj.AndroidManifest = proj.AndroidManifest.Replace ("<uses-sdk />", "<uses-sdk android:targetSdkVersion=\"30\" />");
using (var b = CreateApkBuilder ()) {
Assert.IsTrue (b.Build (proj), "Build should have succeeded");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,7 @@ public void Aapt2Link ([Values (true, false)] bool compilePerFile)
items.Add (new TaskItem (file));
}
}
int platform = 0;
using (var b = new Builder ()) {
platform = b.GetMaxInstalledPlatform ();
}
int platform = AndroidSdkResolver.GetMaxInstalledPlatform ();
var outputFile = Path.Combine (path, "resources.apk");
var task = new Aapt2Link {
BuildEngine = engine,
Expand Down Expand Up @@ -435,10 +432,7 @@ public void Aapt2AndroidResgenExtraArgsAreInvalid ()
var archives = new List<ITaskItem>();
CallAapt2Compile (engine, resPath, archivePath, flatFilePath);
var outputFile = Path.Combine (path, "resources.apk");
int platform = 0;
using (var b = new Builder ()) {
platform = b.GetMaxInstalledPlatform ();
}
int platform = AndroidSdkResolver.GetMaxInstalledPlatform ();
var task = new Aapt2Link {
BuildEngine = engine,
ToolPath = GetPathToAapt2 (),
Expand Down Expand Up @@ -478,12 +472,9 @@ public void Aapt2AndroidResgenExtraArgsAreSplit ()
var archives = new List<ITaskItem>();
CallAapt2Compile (engine, resPath, archivePath, flatFilePath);
var outputFile = Path.Combine (path, "resources.apk");
int platform = 0;
int platform = AndroidSdkResolver.GetMaxInstalledPlatform ();
string emitids = Path.Combine (path, "emitids.txt");
string Rtxt = Path.Combine (path, "R.txt");
using (var b = new Builder ()) {
platform = b.GetMaxInstalledPlatform ();
}
var task = new Aapt2Link {
BuildEngine = engine,
ToolPath = GetPathToAapt2 (),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -486,10 +486,7 @@ public void CompareAapt2AndManagedParserOutput ()
};

Assert.IsTrue (aapt2Compile.Execute (), $"Aapt2 Compile should have succeeded. {string.Join (" ", errors.Select (x => x.Message))}");
int platform = 0;
using (var b = new Builder ()) {
platform = b.GetMaxInstalledPlatform ();
}
int platform = AndroidSdkResolver.GetMaxInstalledPlatform ();
string resPath = Path.Combine (Root, path, "res");
string rTxt = Path.Combine (Root, path, "R.txt");
var aapt2Link = new Aapt2Link {
Expand Down Expand Up @@ -556,10 +553,7 @@ public void CompareAaptAndManagedParserOutputWithCustomIds ()
File.WriteAllText (Path.Combine (Root, path, "foo.map"), @"a\nb");
Directory.CreateDirectory (Path.Combine (Root, path, "java"));
string resPath = Path.Combine (Root, path, "res");
int platform = 0;
using (var b = new Builder ()) {
platform = b.GetMaxInstalledPlatform ();
}
int platform = AndroidSdkResolver.GetMaxInstalledPlatform ();
IBuildEngine engine = new MockBuildEngine (TestContext.Out);
var aapt = new Aapt () {
BuildEngine = engine,
Expand Down Expand Up @@ -644,10 +638,7 @@ public void CheckPerformanceOfManagedParser ()
IBuildEngine engine = new MockBuildEngine (TestContext.Out);
TaskLoggingHelper loggingHelper = new TaskLoggingHelper (engine, nameof (ManagedResourceParser));
string resPath = Path.Combine (Root, path, "res");
int platform = 0;
using (var b = new Builder ()) {
platform = b.GetMaxInstalledPlatform ();
}
int platform = AndroidSdkResolver.GetMaxInstalledPlatform ();
var flagFile = Path.Combine (Root, path, "AndroidResgen.flag");
var lp = new string [] { Path.Combine (Root, path, "lp", "res") };
Stopwatch sw = new Stopwatch ();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ public void LatestTFV_OldTargetSdkVersion ()
var proj = new XamarinAndroidApplicationProject {
UseLatestPlatformSdk = false,
};
proj.AndroidManifest = proj.AndroidManifest.Replace ("<uses-sdk />", "<uses-sdk android:targetSdkVersion=\"19\" />");
proj.TargetSdkVersion = "19";
using (var b = CreateApkBuilder ()) {
proj.TargetFrameworkVersion = b.LatestTargetFrameworkVersion ();
Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,25 @@ static string RunPathsTargets (string target)
return Directory.Exists (path) ? path : null;
}
}

static int? maxInstalled;

public static int GetMaxInstalledPlatform ()
{
if (maxInstalled != null)
return maxInstalled.Value;

string sdkPath = GetAndroidSdkPath ();
foreach (var dir in Directory.EnumerateDirectories (Path.Combine (sdkPath, "platforms"))) {
int version;
string v = Path.GetFileName (dir).Replace ("android-", "");
if (!int.TryParse (v, out version))
continue;
if (version < maxInstalled)
continue;
maxInstalled = version;
}
return maxInstalled ?? 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,14 @@ public static void AddDotNetCompatPackages (this IShortFormProject project)
},
}
};
public static Package XamarinForms_4_5_0_617 = new Package {
public static Package XamarinForms_4_7_0_1142 = new Package {
Id = "Xamarin.Forms",
Version = "4.5.0.617",
Version = "4.7.0.1142",
TargetFramework = "MonoAndroid10.0",
};
public static Package XamarinFormsMaps_4_7_0_1142 = new Package {
Id = "Xamarin.Forms.Maps",
Version = "4.7.0.1142",
TargetFramework = "MonoAndroid10.0",
};
/* additional packages for XForms 4.5 on NET5 */
Expand Down Expand Up @@ -301,12 +306,12 @@ public static void AddDotNetCompatPackages (this IShortFormProject project)
};
public static Package AndroidXAppCompat = new Package {
Id = "Xamarin.AndroidX.AppCompat",
Version = "1.1.0",
Version = "1.1.0.1",
TargetFramework = "MonoAndroid10",
};
public static Package AndroidXBrowser = new Package {
Id = "Xamarin.AndroidX.Browser",
Version = "1.0.0",
Version = "1.2.0.1",
TargetFramework = "MonoAndroid90",
References = {
new BuildItem.Reference ("Xamarin.AndroidX.Browser") {
Expand All @@ -316,7 +321,7 @@ public static void AddDotNetCompatPackages (this IShortFormProject project)
};
public static Package AndroidXMediaRouter = new Package {
Id = "Xamarin.AndroidX.MediaRouter",
Version = "1.1.0",
Version = "1.1.0.1",
TargetFramework = "MonoAndroid90",
References = {
new BuildItem.Reference ("Xamarin.AndroidX.MediaRouter") {
Expand All @@ -326,7 +331,7 @@ public static void AddDotNetCompatPackages (this IShortFormProject project)
};
public static Package AndroidXLegacySupportV4 = new Package {
Id = "Xamarin.AndroidX.Legacy.Support.V4",
Version = "1.0.0",
Version = "1.0.0.1",
TargetFramework = "MonoAndroid90",
References = {
new BuildItem.Reference ("Xamarin.AndroidX.Legacy.Support.V4") {
Expand All @@ -336,7 +341,7 @@ public static void AddDotNetCompatPackages (this IShortFormProject project)
};
public static Package AndroidXLifecycleLiveData = new Package {
Id = "Xamarin.AndroidX.Lifecycle.LiveData",
Version = "2.1.0",
Version = "2.2.0.1",
TargetFramework = "MonoAndroid90",
References = {
new BuildItem.Reference ("Xamarin.AndroidX.Lifecycle.LiveData") {
Expand All @@ -354,9 +359,19 @@ public static void AddDotNetCompatPackages (this IShortFormProject project)
},
}
};
public static Package AndroidXWorkRuntime = new Package {
Id = "Xamarin.AndroidX.Work.Runtime",
Version = "2.3.4.3",
TargetFramework = "MonoAndroid90",
References = {
new BuildItem.Reference("Xamarin.AndroidX.Work.Runtime") {
MetadataValues = "HintPath=..\\packages\\Xamarin.AndroidX.Work.Runtime.2.3.4.3\\lib\\MonoAndroid90\\Xamarin.AndroidX.Work.Runtime.dll"
}
}
};
public static Package XamarinGoogleAndroidMaterial = new Package {
Id = "Xamarin.Google.Android.Material",
Version = "1.0.0",
Version = "1.0.0.1",
TargetFramework = "MonoAndroid90",
References = {
new BuildItem.Reference ("Xamarin.Google.Android.Material") {
Expand Down
Loading