Ejemplo n.º 1
0
        public void BuildAarBindigLibraryStandalone(string classParser)
        {
            var proj = new XamarinAndroidBindingProject()
            {
                UseLatestPlatformSdk = true,
                IsRelease            = true,
            };

            proj.Jars.Add(new AndroidItem.LibraryProjectZip("Jars\\material-menu-1.1.0.aar")
            {
                WebContent = "https://repo.jfrog.org/artifactory/libs-release-bintray/com/balysv/material-menu/1.1.0/material-menu-1.1.0.aar"
            });
            proj.AndroidClassParser = classParser;
            var b = CreateDllBuilder(Path.Combine("temp", TestName));

            Assert.IsTrue(b.Build(proj), "Build should have succeeded.");
            b.Dispose();
        }
Ejemplo n.º 2
0
        [Category("DotNetIgnore")]          //TODO: @(LibraryProjectProperties) not supported yet in .NET 5+
        public void BugzillaBug11964()
        {
            var proj = new XamarinAndroidBindingProject();

            proj.Sources.Add(new BuildItem("LibraryProjectProperties", "project.properties")
            {
                TextContent = () => ""
            });

            using (var builder = CreateDllBuilder()) {
                builder.ThrowOnBuildFailure = false;
                Assert.IsFalse(builder.Build(proj), "Build should have failed.");
                string error = builder.LastBuildOutput
                               .SkipWhile(x => !x.StartsWith("Build FAILED."))
                               .FirstOrDefault(x => x.Contains("error XA1019:"));
                Assert.IsNotNull(error, "Build should have failed with XA1019.");
            }
        }
Ejemplo n.º 3
0
        public void BuildBasicBindingLibrary(string classParser)
        {
            var targets = new List <string> {
                "_ExtractJavaDocJars",
                "_ExportJarToXml",
                "GenerateBindings",
                "_CreateBindingResourceArchive",
                "BuildDocumentation",
                "_ResolveLibraryProjectImports",
                "CoreCompile",
            };

            var proj = new XamarinAndroidBindingProject()
            {
                IsRelease = true,
            };

            proj.Jars.Add(new AndroidItem.EmbeddedJar("Jars\\svg-android.jar")
            {
                WebContent = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/svg-android/svg-android.jar"
            });
            proj.AndroidClassParser = classParser;
            using (var b = CreateDllBuilder(Path.Combine("temp", TestName))) {
                Assert.IsTrue(b.Build(proj), "Build should have succeeded.");

                //A list of properties we check exist in binding projects
                var properties = new [] {
                    "AndroidSdkBuildToolsVersion",
                    "AndroidSdkPlatformToolsVersion",
                    "AndroidSdkToolsVersion",
                    "AndroidNdkVersion",
                };
                foreach (var property in properties)
                {
                    Assert.IsTrue(StringAssertEx.ContainsText(b.LastBuildOutput, property + " = "), $"$({property}) should be set!");
                }

                Assert.IsTrue(b.Build(proj, doNotCleanupOnUpdate: true, saveProject: false), "second build should succeed");
                foreach (var target in targets)
                {
                    Assert.IsTrue(b.Output.IsTargetSkipped(target), $"`{target}` should be skipped on second build!");
                }
            }
        }
Ejemplo n.º 4
0
        public void BindingCustomJavaApplicationClass()
        {
            var binding = new XamarinAndroidBindingProject()
            {
                IsRelease = true,
            };

            binding.AndroidClassParser = "class-parse";
            binding.Jars.Add(new AndroidItem.EmbeddedJar(() => "$(MonoDroidInstallDirectory)\\lib\\mandroid\\android-support-multidex.jar"));
            using (var bindingBuilder = CreateDllBuilder("temp/BindingCustomJavaApplicationClass/MultiDexBinding")) {
                bindingBuilder.Build(binding);
                var proj = new XamarinAndroidApplicationProject();
                proj.OtherBuildItems.Add(new BuildItem("ProjectReference", "..\\MultiDexBinding\\UnnamedProject.csproj"));
                using (var b = CreateApkBuilder("temp/BindingCustomJavaApplicationClass/App")) {
                    b.Verbosity = Microsoft.Build.Framework.LoggerVerbosity.Diagnostic;
                    Assert.IsTrue(b.Build(proj), "Build should have succeeded.");
                }
            }
        }
Ejemplo n.º 5
0
        public void AnnotationSupport()
        {
            // https://trello.com/c/a36dDVS6/37-support-for-annotations-zip
            var binding = new XamarinAndroidBindingProject()
            {
                IsRelease = true,
            };

            binding.AndroidClassParser = "class-parse";
            binding.Jars.Add(new AndroidItem.LibraryProjectZip("Jars\\mylibrary.aar")
            {
                WebContentFileNameFromAzure = "mylibrary-debug.aar"
            });
            using (var bindingBuilder = CreateDllBuilder()) {
                Assert.IsTrue(bindingBuilder.Build(binding), "binding build failed");
                var cs_file = Path.Combine(Root, bindingBuilder.ProjectDirectory, "obj", "Release", "generated", "src", "Com.Example.Atsushi.Mylibrary.AnnotSample.cs");
                FileAssert.Exists(cs_file);
                StringAssert.Contains("IntDef", File.ReadAllText(cs_file));
            }
        }
Ejemplo n.º 6
0
        public void BuildAarBindingLibraryStandalone(string classParser)
        {
            var proj = new XamarinAndroidBindingProject()
            {
                UseLatestPlatformSdk = true,
                IsRelease            = true,
            };

            proj.Jars.Add(new AndroidItem.AndroidLibrary("Jars\\material-menu-1.1.0.aar")
            {
                WebContent = "https://repo.jfrog.org/artifactory/libs-release-bintray/com/balysv/material-menu/1.1.0/material-menu-1.1.0.aar"
            });
            proj.AndroidClassParser = classParser;
            using (var b = CreateDllBuilder()) {
                Assert.IsTrue(b.Build(proj), "Build should have succeeded.");
                if (Builder.UseDotNet)
                {
                    FileAssert.Exists(Path.Combine(Root, b.ProjectDirectory, proj.OutputPath, "material-menu-1.1.0.aar"));
                }
            }
        }
Ejemplo n.º 7
0
        public void BindngFilterUnsupportedNativeAbiLibraries()
        {
            var binding = new XamarinAndroidBindingProject()
            {
                IsRelease = true,
            };

            binding.AndroidClassParser = "class-parse";
            binding.Jars.Add(new AndroidItem.LibraryProjectZip("Jars\\mylibrary.aar")
            {
                WebContent = "https://www.dropbox.com/s/apphdrh9cjqvtye/card.io-5.3.0.aar?dl=1"
            });
            using (var bindingBuilder = CreateDllBuilder(Path.Combine("temp", "BindngFilterUnsupportedNativeAbiLibraries", "Binding"))) {
                Assert.IsTrue(bindingBuilder.Build(binding), "binding build should have succeeded");
                var proj = new XamarinAndroidApplicationProject();
                proj.OtherBuildItems.Add(new BuildItem("ProjectReference", "..\\Binding\\UnnamedProject.csproj"));
                using (var b = CreateApkBuilder(Path.Combine("temp", "BindngFilterUnsupportedNativeAbiLibraries", "App"))) {
                    Assert.IsTrue(b.Build(proj), "Build should have succeeded.");
                }
            }
        }
Ejemplo n.º 8
0
        public void BindingCustomJavaApplicationClass()
        {
            var binding = new XamarinAndroidBindingProject()
            {
                IsRelease   = true,
                ProjectName = "Binding",
            };

            binding.AndroidClassParser = "class-parse";

            using (var bindingBuilder = CreateDllBuilder("temp/BindingCustomJavaApplicationClass/MultiDexBinding")) {
                string multidexJar = Path.Combine(bindingBuilder.AndroidMSBuildDirectory, "android-support-multidex.jar");
                binding.Jars.Add(new AndroidItem.EmbeddedJar(() => multidexJar));
                bindingBuilder.Build(binding);
                var proj = new XamarinAndroidApplicationProject();
                proj.OtherBuildItems.Add(new BuildItem("ProjectReference", $"..\\MultiDexBinding\\{binding.ProjectName}.csproj"));
                using (var b = CreateApkBuilder("temp/BindingCustomJavaApplicationClass/App")) {
                    Assert.IsTrue(b.Build(proj), "Build should have succeeded.");
                }
            }
        }
Ejemplo n.º 9
0
        public void AnnotationSupport()
        {
            // https://trello.com/c/a36dDVS6/37-support-for-annotations-zip
            var binding = new XamarinAndroidBindingProject()
            {
                IsRelease = true,
            };

            binding.AndroidClassParser = "class-parse";
            binding.Jars.Add(new AndroidItem.LibraryProjectZip("Jars\\mylibrary.aar")
            {
                WebContent = "https://www.dropbox.com/s/53679881kg9rdiq/mylibrary-debug.aar?dl=1"
            });
            var bindingBuilder = CreateDllBuilder("temp/AnnotationSupport");

            Assert.IsTrue(bindingBuilder.Build(binding), "binding build failed");
            var src = File.ReadAllText(Path.Combine(Root, bindingBuilder.ProjectDirectory, "obj", "Release", "generated", "src", "Com.Example.Atsushi.Mylibrary.AnnotSample.cs"));

            Assert.IsTrue(src.Contains("IntDef"), "missing IntDef");
            bindingBuilder.Dispose();
        }
Ejemplo n.º 10
0
        public void JavaSourceJar()
        {
            var binding = new XamarinAndroidBindingProject()
            {
                AndroidClassParser = "class-parse",
            };

            binding.SetProperty("DocumentationFile", "UnnamedProject.xml");
            using (var bindingBuilder = CreateDllBuilder()) {
                binding.Jars.Add(new AndroidItem.EmbeddedJar("javasourcejartest.jar")
                {
                    BinaryContent = () => Convert.FromBase64String(InlineData.JavaClassesJarBase64)
                });
                binding.OtherBuildItems.Add(new BuildItem("JavaSourceJar", "javasourcejartest-sources.jar")
                {
                    BinaryContent = () => Convert.FromBase64String(InlineData.JavaSourcesJarBase64)
                });
                Assert.IsTrue(bindingBuilder.Build(binding), "binding build should have succeeded");
                string xml = bindingBuilder.Output.GetIntermediaryAsText("docs/Com.Xamarin.Android.Test.Msbuildtest/JavaSourceJarTest.xml");
                Assert.IsTrue(xml.Contains("<param name=\"name\"> - name to display.</param>"), "missing doc");
            }
        }
Ejemplo n.º 11
0
        public void CleanBasicBindingLibrary(string classParser)
        {
            var proj = new XamarinAndroidBindingProject()
            {
                IsRelease = true,
            };

            proj.Jars.Add(new AndroidItem.EmbeddedJar("Jars\\svg-android.jar")
            {
                WebContent = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/svg-android/svg-android.jar"
            });
            proj.AndroidClassParser = classParser;
            using (var b = CreateDllBuilder("temp/CleanBasicBindingLibrary")) {
                Assert.IsTrue(b.Build(proj), "Build should have succeeded.");
                Assert.IsTrue(b.Clean(proj), "Clean should have succeeded");
                var fileCount = Directory.GetFiles(Path.Combine(Root, b.ProjectDirectory, proj.IntermediateOutputPath), "*", SearchOption.AllDirectories)
                                .Where(x => !Path.GetFileName(x).StartsWith("TemporaryGeneratedFile")).Count();
                Assert.AreEqual(0, Directory.GetDirectories(Path.Combine(Root, b.ProjectDirectory, proj.IntermediateOutputPath), "*", SearchOption.AllDirectories).Length,
                                "All directories in {0} should have been removed", proj.IntermediateOutputPath);
                Assert.AreEqual(0, fileCount,
                                "All files in {0} should have been removed", proj.IntermediateOutputPath);
            }
        }
Ejemplo n.º 12
0
        public void NullableReferenceTypes(string classParser)
        {
            var proj = new XamarinAndroidBindingProject {
                AndroidClassParser = classParser,
                Jars =
                {
                    new AndroidItem.EmbeddedJar("foo.jar")
                    {
                        BinaryContent = () => ResourceData.JavaSourceJarTestJar,
                    }
                }
            };

            proj.SetProperty("Nullable", "enable");
            using (var b = CreateDllBuilder()) {
                Assert.IsTrue(b.Build(proj), "Build should have succeeded.");

                var cs_file = b.Output.GetIntermediaryPath(
                    Path.Combine("generated", "src", "Com.Xamarin.Android.Test.Msbuildtest.JavaSourceJarTest.cs"));
                FileAssert.Exists(cs_file);
                StringAssert.Contains("string? Greet", File.ReadAllText(cs_file));
            }
        }
Ejemplo n.º 13
0
        public void BindingCustomJavaApplicationClass()
        {
            var binding = new XamarinAndroidBindingProject()
            {
                IsRelease = true,
            };

            binding.AndroidClassParser = "class-parse";
            var multidexJar = Environment.OSVersion.Platform == PlatformID.Win32NT
                                ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "MSBuild", "Xamarin", "Android", "android-support-multidex.jar")
                                : Path.Combine("$(MonoDroidInstallDirectory)", "lib", "xamarin.android", "xbuild", "Xamarin", "Android", "android-support-multidex.jar");

            binding.Jars.Add(new AndroidItem.EmbeddedJar(() => multidexJar));
            using (var bindingBuilder = CreateDllBuilder("temp/BindingCustomJavaApplicationClass/MultiDexBinding")) {
                bindingBuilder.Build(binding);
                var proj = new XamarinAndroidApplicationProject();
                proj.OtherBuildItems.Add(new BuildItem("ProjectReference", "..\\MultiDexBinding\\UnnamedProject.csproj"));
                using (var b = CreateApkBuilder("temp/BindingCustomJavaApplicationClass/App")) {
                    b.Verbosity = Microsoft.Build.Framework.LoggerVerbosity.Diagnostic;
                    Assert.IsTrue(b.Build(proj), "Build should have succeeded.");
                }
            }
        }
Ejemplo n.º 14
0
        public void AarWithRClassesJar()
        {
            var path = Path.Combine("temp", TestName);
            var lib1 = new XamarinAndroidBindingProject {
                ProjectName        = "Library1",
                AndroidClassParser = "class-parse",
                Jars =
                {
                    new AndroidItem.LibraryProjectZip("Library1.aar")
                    {
                        BinaryContent = () => ResourceData.Library1Aar
                    }
                },
            };
            var lib2 = new XamarinAndroidBindingProject {
                ProjectName        = "Library2",
                AndroidClassParser = "class-parse",
                Jars =
                {
                    new AndroidItem.LibraryProjectZip("Library2.aar")
                    {
                        BinaryContent = () => ResourceData.Library2Aar
                    }
                },
            };
            var app = new XamarinAndroidApplicationProject();

            app.AddReference(lib1);
            app.AddReference(lib2);
            using (var lib1Builder = CreateDllBuilder(Path.Combine(path, lib1.ProjectName)))
                using (var lib2Builder = CreateDllBuilder(Path.Combine(path, lib2.ProjectName)))
                    using (var appBuilder = CreateApkBuilder(Path.Combine(path, app.ProjectName))) {
                        Assert.IsTrue(lib1Builder.Build(lib1), "Library1 build should have succeeded.");
                        Assert.IsTrue(lib2Builder.Build(lib2), "Library2 build should have succeeded.");
                        Assert.IsTrue(appBuilder.Build(app), "App build should have succeeded.");
                    }
        }
Ejemplo n.º 15
0
        public void JavaSourceJar()
        {
            var binding = new XamarinAndroidBindingProject()
            {
                AndroidClassParser = "class-parse",
            };

            binding.SetProperty("DocumentationFile", "UnnamedProject.xml");
            using (var bindingBuilder = CreateDllBuilder()) {
                binding.Jars.Add(new AndroidItem.EmbeddedJar("javasourcejartest.jar")
                {
                    BinaryContent = () => ResourceData.JavaSourceJarTestJar,
                });
                binding.OtherBuildItems.Add(new BuildItem("JavaSourceJar", "javasourcejartest-sources.jar")
                {
                    BinaryContent = () => ResourceData.JavaSourceJarTestSourcesJar,
                });
                Assert.IsTrue(bindingBuilder.Build(binding), "binding build should have succeeded");

                var path = Path.Combine(Root, bindingBuilder.ProjectDirectory, binding.OutputPath, "UnnamedProject.xml");
                var xml  = File.ReadAllText(path);
                Assert.IsTrue(xml.Contains("<param name=\"name\">name to display.</param>"), "param `name` documentation not imported!");
            }
        }
Ejemplo n.º 16
0
        public void MergeLibraryManifest()
        {
            byte [] classesJar;
            using (var stream = typeof(XamarinAndroidCommonProject).Assembly.GetManifestResourceStream("Xamarin.ProjectTools.Resources.Base.classes.jar")) {
                classesJar = new byte [stream.Length];
                stream.Read(classesJar, 0, (int)stream.Length);
            }
            byte [] data;
            using (var ms = new MemoryStream()) {
                using (var zip = ZipArchive.Create(ms)) {
                    zip.AddEntry("AndroidManifest.xml", @"<?xml version='1.0'?>
<manifest xmlns:android='http://schemas.android.com/apk/res/android' package='com.xamarin.test'>
    <uses-sdk android:minSdkVersion='16'/>
    <permission android:name='${applicationId}.permission.C2D_MESSAGE' android:protectionLevel='signature' />
    <application>
        <activity android:name='.signin.internal.SignInHubActivity' />
        <provider
            android:authorities='${applicationId}.FacebookInitProvider'
            android:name='.internal.FacebookInitProvider'
            android:exported='false' />
        <meta-data android:name='android.support.VERSION' android:value='25.4.0' />
        <meta-data android:name='android.support.VERSION' android:value='25.4.0' />
    </application>
</manifest>
", encoding: System.Text.Encoding.UTF8);
                    zip.CreateDirectory("res");
                    zip.AddEntry(classesJar, "classes.jar");
                    zip.AddEntry("R.txt", " ", encoding: System.Text.Encoding.UTF8);
                }
                data = ms.ToArray();
            }
            var path = Path.Combine("temp", TestContext.CurrentContext.Test.Name);
            var lib  = new XamarinAndroidBindingProject()
            {
                ProjectName        = "Binding1",
                AndroidClassParser = "class-parse",
                Jars =
                {
                    new AndroidItem.LibraryProjectZip("Jars\\foo.aar")
                    {
                        BinaryContent = () => data,
                    }
                },
            };
            var proj = new XamarinAndroidApplicationProject()
            {
                PackageName = "com.xamarin.manifest",
                References  =
                {
                    new BuildItem.ProjectReference("..\\Binding1\\Binding1.csproj", lib.ProjectGuid)
                },
                PackageReferences =
                {
                    KnownPackages.SupportMediaCompat_25_4_0_1,
                    KnownPackages.SupportFragment_25_4_0_1,
                    KnownPackages.SupportCoreUtils_25_4_0_1,
                    KnownPackages.SupportCoreUI_25_4_0_1,
                    KnownPackages.SupportCompat_25_4_0_1,
                    KnownPackages.AndroidSupportV4_25_4_0_1,
                    KnownPackages.SupportV7AppCompat_25_4_0_1,
                },
            };

            proj.Sources.Add(new BuildItem.Source("TestActivity1.cs")
            {
                TextContent = () => @"using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Support.V4.App;
using Android.Util;
[Activity (Label = ""TestActivity1"")]
[IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ ""com.xamarin.sample"" })]
public class TestActivity1 : FragmentActivity {
}
				"                ,
            });
            proj.Sources.Add(new BuildItem.Source("TestActivity2.cs")
            {
                TextContent = () => @"using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Support.V4.App;
using Android.Util;
[Activity (Label = ""TestActivity2"")]
[IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ ""com.xamarin.sample"" })]
public class TestActivity2 : FragmentActivity {
}
				"                ,
            });
            using (var libbuilder = CreateDllBuilder(Path.Combine(path, "Binding1"))) {
                Assert.IsTrue(libbuilder.Build(lib), "Build should have succeeded.");
                using (var builder = CreateApkBuilder(Path.Combine(path, "App1"))) {
                    Assert.IsTrue(builder.Build(proj), "Build should have succeeded.");
                    var manifest = builder.Output.GetIntermediaryAsText(Root, "android/AndroidManifest.xml");
                    Assert.IsTrue(manifest.Contains("com.xamarin.manifest.permission.C2D_MESSAGE"),
                                  "${applicationId}.permission.C2D_MESSAGE was not replaced with com.xamarin.manifest.permission.C2D_MESSAGE");
                    Assert.IsTrue(manifest.Contains("com.xamarin.test.signin.internal.SignInHubActivity"),
                                  ".signin.internal.SignInHubActivity was not replaced with com.xamarin.test.signin.internal.SignInHubActivity");
                    Assert.IsTrue(manifest.Contains("com.xamarin.manifest.FacebookInitProvider"),
                                  "${applicationId}.FacebookInitProvider was not replaced with com.xamarin.manifest.FacebookInitProvider");
                    Assert.IsTrue(manifest.Contains("com.xamarin.test.internal.FacebookInitProvider"),
                                  ".internal.FacebookInitProvider was not replaced with com.xamarin.test.internal.FacebookInitProvider");
                    Assert.AreEqual(manifest.IndexOf("meta-data", StringComparison.OrdinalIgnoreCase),
                                    manifest.LastIndexOf("meta-data", StringComparison.OrdinalIgnoreCase), "There should be only one meta-data element");

                    var doc = XDocument.Parse(manifest);
                    var ns  = XNamespace.Get("http://schemas.android.com/apk/res/android");

                    var activities = doc.Element("manifest")?.Element("application")?.Elements("activity");
                    var e          = activities.FirstOrDefault(x => x.Attribute(ns.GetName("label"))?.Value == "TestActivity2");
                    Assert.IsNotNull(e, "Manifest should contain an activity for TestActivity2");
                    Assert.IsNotNull(e.Element("intent-filter"), "TestActivity2 should have an intent-filter");
                    Assert.IsNotNull(e.Element("intent-filter").Element("action"), "TestActivity2 should have an intent-filter/action");
                }
            }
        }
Ejemplo n.º 17
0
        public void MergeLibraryManifest()
        {
            byte [] classesJar;
            using (var stream = typeof(XamarinAndroidCommonProject).Assembly.GetManifestResourceStream("Xamarin.ProjectTools.Resources.Base.classes.jar")) {
                classesJar = new byte [stream.Length];
                stream.Read(classesJar, 0, (int)stream.Length);
            }
            byte [] data;
            using (var ms = new MemoryStream()) {
                using (var zip = ZipArchive.Create(ms)) {
                    zip.AddEntry("AndroidManifest.xml", @"<?xml version='1.0'?>
<manifest xmlns:android='http://schemas.android.com/apk/res/android' package='com.xamarin.test'>
    <uses-sdk android:minSdkVersion='14'/>

    <application>
        <activity android:name='.signin.internal.SignInHubActivity' />
        <provider
            android:authorities='${applicationId}.FacebookInitProvider'
            android:name='.internal.FacebookInitProvider'
            android:exported='false' />
    </application>
</manifest>
", encoding: System.Text.Encoding.UTF8);
                    zip.CreateDirectory("res");
                    zip.AddEntry(classesJar, "classes.jar");
                    zip.AddEntry("R.txt", " ", encoding: System.Text.Encoding.UTF8);
                }
                data = ms.ToArray();
            }
            var path = Path.Combine("temp", TestContext.CurrentContext.Test.Name);
            var lib  = new XamarinAndroidBindingProject()
            {
                ProjectName        = "Binding1",
                AndroidClassParser = "class-parse",
                Jars =
                {
                    new AndroidItem.LibraryProjectZip("Jars\\foo.aar")
                    {
                        BinaryContent = () => data,
                    }
                },
            };
            var proj = new XamarinAndroidApplicationProject()
            {
                PackageName = "com.xamarin.manifest",
                References  =
                {
                    new BuildItem.ProjectReference("..\\Binding1\\Binding1.csproj", lib.ProjectGuid)
                },
            };

            using (var libbuilder = CreateDllBuilder(Path.Combine(path, "Binding1"))) {
                Assert.IsTrue(libbuilder.Build(lib), "Build should have succeeded.");
                using (var builder = CreateApkBuilder(Path.Combine(path, "App1"))) {
                    Assert.IsTrue(builder.Build(proj), "Build should have succeeded.");
                    var manifest = builder.Output.GetIntermediaryAsText(Root, "android/AndroidManifest.xml");
                    Assert.IsTrue(manifest.Contains("com.xamarin.test.signin.internal.SignInHubActivity"),
                                  ".signin.internal.SignInHubActivity was not replaced with com.xamarin.test.signin.internal.SignInHubActivity");
                    Assert.IsTrue(manifest.Contains("com.xamarin.manifest.FacebookInitProvider"),
                                  "${applicationId}.FacebookInitProvider was not replaced with com.xamarin.manifest.FacebookInitProvider");
                    Assert.IsTrue(manifest.Contains("com.xamarin.test.internal.FacebookInitProvider"),
                                  ".internal.FacebookInitProvider was not replaced with com.xamarin.test.internal.FacebookInitProvider");
                }
            }
        }
Ejemplo n.º 18
0
        public void BuildBasicBindingLibrary(string classParser)
        {
            var targets = new List <string> {
                "_ExportJarToXml",
                "GenerateBindings",
                "_ResolveLibraryProjectImports",
                "CoreCompile",
            };

            if (Builder.UseDotNet)
            {
                targets.Add("_CreateAar");
            }
            else
            {
                targets.Add("_CreateBindingResourceArchive");
                //TODO: .NET 5+ cannot support javadoc yet, due to missing mdoc
                targets.Add("_ExtractJavaDocJars");
                targets.Add("BuildDocumentation");
            }

            var proj = new XamarinAndroidBindingProject()
            {
                IsRelease = true,
            };

            proj.Jars.Add(new AndroidItem.AndroidLibrary("Jars\\svg-android.jar")
            {
                WebContent = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/svg-android/svg-android.jar"
            });
            proj.AndroidClassParser = classParser;
            using (var b = CreateDllBuilder()) {
                Assert.IsTrue(b.Build(proj), "Build should have succeeded.");

                var assemblyPath = Path.Combine(Root, b.ProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.dll");
                using (var assembly = AssemblyDefinition.ReadAssembly(assemblyPath)) {
                    var typeName = "Com.Larvalabs.Svgandroid.SVG";
                    var type     = assembly.MainModule.GetType(typeName);
                    Assert.IsNotNull(type, $"{assemblyPath} should contain {typeName}");
                }

                //TODO: see https://github.com/dotnet/msbuild/issues/6609
                if (!Builder.UseDotNet)
                {
                    //A list of properties we check exist in binding projects
                    var properties = new [] {
                        "AndroidSdkBuildToolsVersion",
                        "AndroidSdkPlatformToolsVersion",
                        "AndroidSdkToolsVersion",
                        "AndroidNdkVersion",
                    };
                    foreach (var property in properties)
                    {
                        Assert.IsTrue(StringAssertEx.ContainsText(b.LastBuildOutput, property + " = "), $"$({property}) should be set!");
                    }
                }

                Assert.IsTrue(b.Build(proj, doNotCleanupOnUpdate: true, saveProject: false), "second build should succeed");
                foreach (var target in targets)
                {
                    Assert.IsTrue(b.Output.IsTargetSkipped(target), $"`{target}` should be skipped on second build!");
                }
            }
        }
Ejemplo n.º 19
0
        public void BindingCheckHiddenFiles([Values(true, false)] bool useShortFileNames)
        {
            var binding = new XamarinAndroidBindingProject()
            {
                UseLatestPlatformSdk = true,
                IsRelease            = true,
            };

            binding.AndroidClassParser = "class-parse";
            binding.Jars.Add(new AndroidItem.LibraryProjectZip("Jars\\mylibrary.aar")
            {
                WebContentFileNameFromAzure = "mylibrary.aar"
            });
            binding.Jars.Add(new AndroidItem.EmbeddedJar("Jars\\svg-android.jar")
            {
                WebContentFileNameFromAzure = "javaBindingIssue.jar"
            });
            var path = Path.Combine("temp", TestContext.CurrentContext.Test.Name);

            binding.SetProperty(binding.ActiveConfigurationProperties, "UseShortFileNames", useShortFileNames);
            using (var bindingBuilder = CreateDllBuilder(Path.Combine(path, "Binding"))) {
                bindingBuilder.Verbosity = Microsoft.Build.Framework.LoggerVerbosity.Diagnostic;
                Assert.IsTrue(bindingBuilder.Build(binding), "binding build should have succeeded");
                var proj = new XamarinAndroidApplicationProject();
                proj.OtherBuildItems.Add(new BuildItem("ProjectReference", "..\\Binding\\UnnamedProject.csproj"));
                proj.SetProperty(proj.ActiveConfigurationProperties, "UseShortFileNames", useShortFileNames);
                proj.AndroidManifest = $@"<?xml version=""1.0"" encoding=""utf-8""?>
<manifest xmlns:android=""http://schemas.android.com/apk/res/android"" xmlns:tools=""http://schemas.android.com/tools"" android:versionCode=""1"" android:versionName=""1.0"" package=""{proj.PackageName}"">
	<uses-sdk />
	<application android:label=""{proj.ProjectName}"" tools:replace=""android:label"">
	</application>
</manifest>";
                using (var b = CreateApkBuilder(Path.Combine(path, "App"))) {
                    Assert.IsTrue(b.Build(proj), "Build should have succeeded.");
                    var assemblyMap = b.Output.GetIntermediaryPath(Path.Combine("lp", "map.cache"));
                    if (useShortFileNames)
                    {
                        Assert.IsTrue(File.Exists(assemblyMap), $"{assemblyMap} should exist.");
                    }
                    else
                    {
                        Assert.IsFalse(File.Exists(assemblyMap), $"{assemblyMap} should not exist.");
                    }
                    var assemblyIdentityMap = new List <string> ();
                    if (useShortFileNames)
                    {
                        foreach (var s in File.ReadLines(assemblyMap))
                        {
                            assemblyIdentityMap.Add(s);
                        }
                    }
                    var assmeblyIdentity    = useShortFileNames ? assemblyIdentityMap.IndexOf("UnnamedProject").ToString() : "UnnamedProject";
                    var libaryImportsFolder = useShortFileNames ? "lp" : "__library_projects__";
                    var jlibs       = useShortFileNames ? "jl" : "library_project_imports";
                    var dsStorePath = Path.Combine(Root, b.ProjectDirectory, proj.IntermediateOutputPath, libaryImportsFolder,
                                                   assmeblyIdentity, jlibs);
                    Assert.IsTrue(Directory.Exists(dsStorePath), "{0} should exist.", dsStorePath);
                    Assert.IsFalse(File.Exists(Path.Combine(dsStorePath, ".DS_Store")), "{0} should NOT exist.",
                                   Path.Combine(dsStorePath, ".DS_Store"));
                    var _macOSStorePath = Path.Combine(dsStorePath, "_MACOSX");
                    Assert.IsFalse(Directory.Exists(_macOSStorePath), "{0} should NOT exist.", _macOSStorePath);
                    var svgJar = Path.Combine(dsStorePath, "svg-android.jar");
                    Assert.IsTrue(File.Exists(svgJar), $"{svgJar} should exist.");
                }
            }
        }