diff --git a/Documentation/guides/building-apps/build-properties.md b/Documentation/guides/building-apps/build-properties.md index 06e038b28df..a542aa71057 100644 --- a/Documentation/guides/building-apps/build-properties.md +++ b/Documentation/guides/building-apps/build-properties.md @@ -129,14 +129,14 @@ Added in Xamarin.Android 6.1. A path to a directory containing the Android [binutils][binutils] such as `ld`, the native linker, -and `as`, the native assembler. These tools are part of the Android -NDK and are also included in the Xamarin.Android installation. +and `as`, the native assembler. These tools are included in the +Xamarin.Android installation. -The default value is `$(MonoAndroidBinDirectory)\ndk\`. +The default value is `$(MonoAndroidBinDirectory)\binutils\`. Added in Xamarin.Android 10.0. -[binutils]: https://android.googlesource.com/toolchain/binutils/ +[binutils]: https://github.com/xamarin/xamarin-android-binutils/ ## AndroidBoundExceptionType diff --git a/build-tools/installers/create-installers.targets b/build-tools/installers/create-installers.targets index d05347d4e97..a2eb4e4b426 100644 --- a/build-tools/installers/create-installers.targets +++ b/build-tools/installers/create-installers.targets @@ -310,18 +310,18 @@ <_MSBuildFilesWin Include="$(MSBuildSrcDir)\lib64\libZipSharpNative.pdb" /> <_MSBuildFilesWin Include="$(MSBuildSrcDir)\proguard\bin\proguard.bat" /> <_MSBuildFilesWin Include="$(MSBuildSrcDir)\aapt2.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\aarch64-linux-android-as.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\aarch64-linux-android-ld.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\aarch64-linux-android-strip.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\arm-linux-androideabi-as.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\arm-linux-androideabi-ld.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\arm-linux-androideabi-strip.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\i686-linux-android-as.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\i686-linux-android-ld.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\i686-linux-android-strip.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\x86_64-linux-android-as.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\x86_64-linux-android-ld.exe" /> - <_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\x86_64-linux-android-strip.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\aarch64-linux-android-as.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\aarch64-linux-android-ld.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\aarch64-linux-android-strip.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\arm-linux-androideabi-as.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\arm-linux-androideabi-ld.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\arm-linux-androideabi-strip.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\i686-linux-android-as.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\i686-linux-android-ld.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\i686-linux-android-strip.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\x86_64-linux-android-as.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\x86_64-linux-android-ld.exe" /> + <_MSBuildFilesWin Include="$(MSBuildSrcDir)\binutils\x86_64-linux-android-strip.exe" /> <_MSBuildLibHostFilesWin Include="$(MSBuildSrcDir)\lib\host-mxe-Win64\libmono-android.debug.dll" Condition=" '$(HostOS)' != 'Windows' " /> <_MSBuildLibHostFilesWin Include="$(MSBuildSrcDir)\lib\host-mxe-Win64\libmono-android.release.dll" Condition=" '$(HostOS)' != 'Windows' " /> <_MSBuildLibHostFilesWin Include="$(MSBuildSrcDir)\lib\host-mxe-Win64\libMonoPosixHelper.dll" /> @@ -341,18 +341,18 @@ - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\aarch64-linux-android-as" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\aarch64-linux-android-ld" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\aarch64-linux-android-strip" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\arm-linux-androideabi-as" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\arm-linux-androideabi-ld" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\arm-linux-androideabi-strip" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\i686-linux-android-as" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\i686-linux-android-ld" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\i686-linux-android-strip" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\x86_64-linux-android-as" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\x86_64-linux-android-ld" /> - <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\ndk\x86_64-linux-android-strip" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\aarch64-linux-android-as" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\aarch64-linux-android-ld" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\aarch64-linux-android-strip" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\arm-linux-androideabi-as" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\arm-linux-androideabi-ld" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\arm-linux-androideabi-strip" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\i686-linux-android-as" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\i686-linux-android-ld" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\i686-linux-android-strip" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\x86_64-linux-android-as" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\x86_64-linux-android-ld" /> + <_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\binutils\x86_64-linux-android-strip" /> <_MSBuildFilesUnix Include="$(MSBuildSrcDir)\$(HostOS)\illinkanalyzer" Permission="755" /> <_MSBuildFilesUnix Include="$(MSBuildSrcDir)\$(HostOS)\jit-times" Permission="755" /> <_MSBuildFilesUnix Include="$(MSBuildSrcDir)\$(HostOS)\aprofutil" ExcludeFromAndroidNETSdk="true" /> diff --git a/build-tools/xaprepare/xaprepare/Application/BuildInfo.cs b/build-tools/xaprepare/xaprepare/Application/BuildInfo.cs index 69b8aed2e48..67413577b9b 100644 --- a/build-tools/xaprepare/xaprepare/Application/BuildInfo.cs +++ b/build-tools/xaprepare/xaprepare/Application/BuildInfo.cs @@ -18,6 +18,7 @@ partial class BuildInfo : AppObject public string NDKVersionMajor { get; private set; } = String.Empty; public string NDKVersionMinor { get; private set; } = String.Empty; public string NDKVersionMicro { get; private set; } = String.Empty; + public string NDKVersionTag { get; private set; } = String.Empty; public string NDKMinimumApiAvailable { get; private set; } = String.Empty; public string VersionHash { get; private set; } = String.Empty; @@ -59,8 +60,7 @@ public bool GatherNDKInfo (Context context) string rev = parts [1].Trim (); NDKRevision = rev; - Version ver; - if (!Version.TryParse (rev, out ver)) { + if (!Utilities.ParseAndroidPkgRevision (rev, out Version? ver, out string tag)) { Log.ErrorLine ($"Unable to parse NDK revision '{rev}' as a valid version string"); return false; } @@ -68,6 +68,7 @@ public bool GatherNDKInfo (Context context) NDKVersionMajor = ver.Major.ToString (); NDKVersionMinor = ver.Minor.ToString (); NDKVersionMicro = ver.Build.ToString (); + NDKVersionTag = tag; break; } diff --git a/build-tools/xaprepare/xaprepare/Application/MonoJitRuntime.cs b/build-tools/xaprepare/xaprepare/Application/MonoJitRuntime.cs index 31d435f4bc6..4838e62647e 100644 --- a/build-tools/xaprepare/xaprepare/Application/MonoJitRuntime.cs +++ b/build-tools/xaprepare/xaprepare/Application/MonoJitRuntime.cs @@ -24,7 +24,7 @@ public override void Init (Context context) OutputMonoBtlsFilename = Configurables.Defaults.MonoRuntimeOutputMonoBtlsFilename; OutputMonoPosixHelperFilename = Configurables.Defaults.MonoRuntimeOutputMonoPosixHelperFilename; OutputProfilerFilename = Configurables.Defaults.MonoRuntimeOutputProfilerFilename; - Strip = Path.Combine (Configurables.Paths.AndroidToolchainBinDirectory, $"{Configurables.Defaults.AndroidToolchainPrefixes [Name]}-strip"); + Strip = Path.Combine (Configurables.Paths.AndroidToolchainBinDirectory, "llvm-strip"); } } } diff --git a/build-tools/xaprepare/xaprepare/Application/Utilities.cs b/build-tools/xaprepare/xaprepare/Application/Utilities.cs index d3573903d41..75ee6edec7f 100644 --- a/build-tools/xaprepare/xaprepare/Application/Utilities.cs +++ b/build-tools/xaprepare/xaprepare/Application/Utilities.cs @@ -29,6 +29,29 @@ static partial class Utilities public static readonly Encoding UTF8NoBOM = new UTF8Encoding (false); + public static bool ParseAndroidPkgRevision (string? v, out Version? version, out string? tag) + { + string? ver = v?.Trim (); + version = null; + tag = null; + if (String.IsNullOrEmpty (ver)) + return false; + + if (ver!.IndexOf ('.') < 0) + ver = $"{ver}.0"; + + int tagIdx = ver.IndexOf ('-'); + if (tagIdx >= 0) { + tag = ver.Substring (tagIdx + 1); + ver = ver.Substring (0, tagIdx - 1); + } + + if (Version.TryParse (ver, out version)) + return true; + + return false; + } + public static bool AbiChoiceChanged (Context context) { string cacheFile = Configurables.Paths.MonoRuntimesEnabledAbisCachePath; diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs index 8a0e0b5356c..1e5e2545f1b 100644 --- a/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs +++ b/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs @@ -5,8 +5,8 @@ namespace Xamarin.Android.Prepare { class BuildAndroidPlatforms { - public const string AndroidNdkVersion = "22b"; - public const string AndroidNdkPkgRevision = "22.1.7171670"; + public const string AndroidNdkVersion = "23"; + public const string AndroidNdkPkgRevision = "23.0.7599858"; public static readonly List AllPlatforms = new List { new AndroidPlatform (apiName: "", apiLevel: 1, platformID: "1"), diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs index 148d4372e04..10081f48e40 100644 --- a/build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs +++ b/build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs @@ -398,8 +398,8 @@ public static partial class Paths public static string AndroidToolchainRootDirectory => GetCachedPath (ref androidToolchainRootDirectory, () => Path.Combine (AndroidNdkDirectory, "toolchains", "llvm", "prebuilt", NdkToolchainOSTag)); public static string AndroidToolchainBinDirectory => GetCachedPath (ref androidToolchainBinDirectory, () => Path.Combine (AndroidToolchainRootDirectory, "bin")); public static string AndroidToolchainSysrootLibDirectory => GetCachedPath (ref androidToolchainSysrootLibDirectory, () => Path.Combine (AndroidToolchainRootDirectory, "sysroot", "usr", "lib")); - public static string WindowsBinutilsInstallDir => GetCachedPath (ref windowsBinutilsInstallDir, () => Path.Combine (InstallMSBuildDir, "ndk")); - public static string HostBinutilsInstallDir => GetCachedPath (ref hostBinutilsInstallDir, () => Path.Combine (InstallMSBuildDir, ctx.Properties.GetRequiredValue (KnownProperties.HostOS), "ndk")); + public static string WindowsBinutilsInstallDir => GetCachedPath (ref windowsBinutilsInstallDir, () => Path.Combine (InstallMSBuildDir, "binutils")); + public static string HostBinutilsInstallDir => GetCachedPath (ref hostBinutilsInstallDir, () => Path.Combine (InstallMSBuildDir, ctx.Properties.GetRequiredValue (KnownProperties.HostOS), "binutils")); public static string BinutilsCacheDir => ctx.Properties.GetRequiredValue (KnownProperties.AndroidToolchainCacheDirectory); public static string AndroidBuildToolsCacheDir => ctx.Properties.GetRequiredValue (KnownProperties.AndroidToolchainCacheDirectory); diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs index a65fc65373b..b904ebef583 100644 --- a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs +++ b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs @@ -69,7 +69,7 @@ public AndroidToolchain () new AndroidToolchainComponent ("docs-24_r01", destDir: "docs", pkgRevision: "1", dependencyType: AndroidToolchainComponentType.BuildDependency), new AndroidToolchainComponent ("android_m2repository_r47", destDir: Path.Combine ("extras", "android", "m2repository"), pkgRevision: "47.0.0", dependencyType: AndroidToolchainComponentType.BuildDependency), new AndroidToolchainComponent ($"x86_64-29_r07-{osTag}", destDir: Path.Combine ("system-images", "android-29", "default", "x86_64"), relativeUrl: new Uri ("sys-img/android/", UriKind.Relative), pkgRevision: "7", dependencyType: AndroidToolchainComponentType.EmulatorDependency), - new AndroidToolchainComponent ($"android-ndk-r{AndroidNdkVersion}-{osTag}-x86_64", destDir: AndroidNdkDirectory, pkgRevision: AndroidPkgRevision), + new AndroidToolchainComponent ($"android-ndk-r{AndroidNdkVersion}-{osTag}", destDir: AndroidNdkDirectory, pkgRevision: AndroidPkgRevision), new AndroidToolchainComponent ($"{XABuildToolsPackagePrefix}build-tools_r{XABuildToolsVersion}-{altOsTag}", destDir: Path.Combine ("build-tools", XABuildToolsFolder), isMultiVersion: true), new AndroidToolchainComponent ($"commandlinetools-{cltOsTag}-{CommandLineToolsVersion}", destDir: Path.Combine ("cmdline-tools", CommandLineToolsFolder), isMultiVersion: true), diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs b/build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs index 3f54716ab0e..51b54e9e2b3 100644 --- a/build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs +++ b/build-tools/xaprepare/xaprepare/Steps/Step_Android_SDK_NDK.cs @@ -307,37 +307,21 @@ bool IsInstalled (AndroidToolchainComponent component, string path, out bool mis return false; } - if (!ParseVersion (pkgRevision, out Version? pkgVer) || pkgVer == null) { + if (!Utilities.ParseAndroidPkgRevision (pkgRevision, out Version? pkgVer, out string pkgTag) || pkgVer == null) { Log.DebugLine ($"Failed to parse a valid version from Pkg.Revision ({pkgRevision}) for component '{component.Name}'. Component will be reinstalled."); return false; } - if (!ParseVersion (component.PkgRevision, out Version? expectedPkgVer) || expectedPkgVer == null) + if (!Utilities.ParseAndroidPkgRevision (component.PkgRevision, out Version? expectedPkgVer, out string expectedTag) || expectedPkgVer == null) throw new InvalidOperationException ($"Invalid expected package version for component '{component.Name}': {component.PkgRevision}"); - bool equal = pkgVer == expectedPkgVer; + bool equal = (pkgVer == expectedPkgVer) && (pkgTag == expectedTag); if (!equal) - Log.DebugLine ($"Installed version of '{component.Name}' ({pkgVer}) is different than the required one ({expectedPkgVer})"); + Log.DebugLine ($"Installed version of '{component.Name}' ({pkgRevision}) is different than the required one ({component.PkgRevision})"); return equal; } - bool ParseVersion (string? v, out Version? version) - { - string? ver = v?.Trim (); - version = null; - if (String.IsNullOrEmpty (ver)) - return false; - - if (ver!.IndexOf ('.') < 0) - ver = $"{ver}.0"; - - if (Version.TryParse (ver, out version)) - return true; - - return false; - } - bool IsNdk (AndroidToolchainComponent component) { return component.Name.StartsWith ("android-ndk", StringComparison.OrdinalIgnoreCase); diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GetAotArguments.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GetAotArguments.cs index 9e15a17aac1..01149da32da 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GetAotArguments.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GetAotArguments.cs @@ -312,14 +312,20 @@ string GetLdFlags(NdkTools ndk, AndroidTargetArch arch, int level, string toolPr } string toolchainLibDir; - if (ndk.UsesClang) - toolchainLibDir = GetNdkToolchainLibraryDir (ndk, toolchainPath, arch); - else + if (ndk.UsesClang) { + if (ndk.NoBinutils) { + toolchainLibDir = String.Empty; + } else { + toolchainLibDir = GetNdkToolchainLibraryDir (ndk, toolchainPath, arch); + } + } else toolchainLibDir = GetNdkToolchainLibraryDir (ndk, toolchainPath); var libs = new List (); if (ndk.UsesClang) { - libs.Add ($"-L{toolchainLibDir.TrimEnd ('\\')}"); + if (!String.IsNullOrEmpty (toolchainLibDir)) { + libs.Add ($"-L{toolchainLibDir.TrimEnd ('\\')}"); + } libs.Add ($"-L{androidLibPath.TrimEnd ('\\')}"); if (arch == AndroidTargetArch.Arm) { @@ -329,7 +335,9 @@ string GetLdFlags(NdkTools ndk, AndroidTargetArch arch, int level, string toolPr } } - libs.Add (Path.Combine (toolchainLibDir, "libgcc.a")); + if (!String.IsNullOrEmpty (toolchainLibDir)) { + libs.Add (Path.Combine (toolchainLibDir, "libgcc.a")); + } libs.Add (Path.Combine (androidLibPath, "libc.so")); libs.Add (Path.Combine (androidLibPath, "libm.so")); diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveSdksTask.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveSdksTask.cs index d3096519471..261f9f9f175 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveSdksTask.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveSdksTask.cs @@ -1,23 +1,23 @@ -// +// // ResolveSdksTask.cs -// +// // Author: // Michael Hutchinson // Jonathan Pryor -// +// // Copyright (c) 2010 Novell, Inc. // Copyright (c) 2013 Xamarin Inc. -// +// // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// +// // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -85,7 +85,7 @@ public override bool RunTask () } MonoAndroidBinPath = MonoAndroidHelper.GetOSBinPath () + Path.DirectorySeparatorChar; MonoAndroidLibPath = MonoAndroidHelper.GetOSLibPath () + Path.DirectorySeparatorChar; - AndroidBinUtilsPath = MonoAndroidBinPath + "ndk" + Path.DirectorySeparatorChar; + AndroidBinUtilsPath = MonoAndroidBinPath + "binutils" + Path.DirectorySeparatorChar; var minVersion = Version.Parse (MinimumSupportedJavaVersion); var maxVersion = Version.Parse (LatestSupportedJavaVersion); @@ -139,4 +139,3 @@ public override bool RunTask () } } } - diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs index 980d0918fca..4138dcb4846 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs @@ -5,9 +5,11 @@ using System.Diagnostics; using System.IO; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Xml.Linq; +using Xamarin.Android.Build; using Xamarin.Android.Tasks; using Xamarin.ProjectTools; using Microsoft.Android.Build.Tasks; @@ -22,6 +24,8 @@ public class BaseTest [SetUpFixture] public class SetUp { + const string BinutilsSubdir = "binutils"; + public static string DeviceAbi { get; private set; @@ -75,6 +79,67 @@ public void BeforeAllTests () } catch (Exception ex) { Console.Error.WriteLine ("Failed to determine whether there is Android target emulator or not: " + ex); } + + CreateBinutilsSymlink (); + } + + void CreateBinutilsSymlink () + { + string hostNdkDir = GetHostBinutilsDir (); + string xabtDir = Path.GetDirectoryName (typeof (BuildApk).Assembly.Location); + string symlinkDir = Path.Combine (xabtDir, hostNdkDir); + + // If directory exists then it's either a valid symlink or a real dir, don't touch anything in such instance + if (Directory.Exists (symlinkDir)) { + if (!SymbolicLink.IsPathSymlink (symlinkDir)) { + Console.Error.WriteLine ($"Warning: a directory exists where a symbolic link was expected, {symlinkDir}"); + } + return; + } + + // If a file exists and is a symlink, then it's probably a dangling link - recreate it + if (File.Exists (symlinkDir)) { + if (!SymbolicLink.IsPathSymlink (symlinkDir)) { + throw new InvalidOperationException ($"File named '{symlinkDir}' exists where a symbolic link to a directory should be."); + } + + File.Delete (symlinkDir); + } + + // We first try the in-tree location... + string binutilsDirFullPath = Path.Combine (XABuildPaths.PrefixDirectory, "lib", "xamarin.android", "xbuild", "Xamarin", "Android", hostNdkDir); + if (!Directory.Exists (binutilsDirFullPath)) { + // ...since it failed, we'll try to find the system location + binutilsDirFullPath = Path.Combine (TestEnvironment.MonoAndroidToolsDirectory, hostNdkDir); + if (!Directory.Exists (binutilsDirFullPath)) { + throw new InvalidOperationException ($"Host NDK directory does not exist, {binutilsDirFullPath}"); + } + } + + if (!SymbolicLink.Create (symlinkDir, binutilsDirFullPath)) { + throw new InvalidOperationException ($"Failed to create a symbolic link from '{symlinkDir}' to '{binutilsDirFullPath}'"); + } + + if (!Directory.Exists (symlinkDir)) { + throw new InvalidOperationException ($"Symbolic link '{symlinkDir}' created but it doesn't appear to point to '{binutilsDirFullPath}"); + } + } + + string GetHostBinutilsDir () + { + if (RuntimeInformation.IsOSPlatform (OSPlatform.Windows)) { + return BinutilsSubdir; + } + + if (RuntimeInformation.IsOSPlatform (OSPlatform.Linux)) { + return Path.Combine ("Linux", BinutilsSubdir); + } + + if (RuntimeInformation.IsOSPlatform (OSPlatform.OSX)) { + return Path.Combine ("Darwin", BinutilsSubdir); + } + + throw new InvalidOperationException ($"Unsupported OS"); } int GetSdkVersion () diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleLegacy.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleLegacy.apkdesc index aef4ce023bd..eee08fac943 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleLegacy.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleLegacy.apkdesc @@ -4,75 +4,75 @@ "AndroidManifest.xml": { "Size": 2584 }, - "res/drawable-mdpi-v4/icon.png": { - "Size": 2200 - }, - "res/drawable-hdpi-v4/icon.png": { - "Size": 4762 - }, - "res/drawable-xhdpi-v4/icon.png": { - "Size": 7462 - }, - "res/drawable-xxhdpi-v4/icon.png": { - "Size": 13092 - }, - "res/drawable-xxxhdpi-v4/icon.png": { - "Size": 20118 - }, - "res/layout/main.xml": { - "Size": 544 - }, - "resources.arsc": { - "Size": 1724 - }, - "classes.dex": { - "Size": 316700 - }, - "assemblies/UnnamedProject.dll": { - "Size": 2851 - }, "assemblies/Java.Interop.dll": { - "Size": 67719 + "Size": 67758 }, "assemblies/Mono.Android.dll": { - "Size": 246165 + "Size": 246233 }, "assemblies/mscorlib.dll": { - "Size": 769192 + "Size": 769324 }, "assemblies/System.Core.dll": { - "Size": 28168 + "Size": 28186 }, "assemblies/System.dll": { - "Size": 9163 + "Size": 9171 }, - "lib/arm64-v8a/libxamarin-app.so": { - "Size": 19696 - }, - "lib/arm64-v8a/libmonodroid.so": { - "Size": 268792 + "assemblies/UnnamedProject.dll": { + "Size": 2862 }, - "lib/arm64-v8a/libxa-internal-api.so": { - "Size": 65312 + "classes.dex": { + "Size": 316760 }, "lib/arm64-v8a/libmono-btls-shared.so": { "Size": 1613872 }, - "lib/arm64-v8a/libmonosgen-2.0.so": { - "Size": 4050176 - }, "lib/arm64-v8a/libmono-native.so": { "Size": 707024 }, - "META-INF/ANDROIDD.SF": { - "Size": 2225 + "lib/arm64-v8a/libmonodroid.so": { + "Size": 281352 + }, + "lib/arm64-v8a/libmonosgen-2.0.so": { + "Size": 4037584 + }, + "lib/arm64-v8a/libxa-internal-api.so": { + "Size": 65624 + }, + "lib/arm64-v8a/libxamarin-app.so": { + "Size": 19696 }, "META-INF/ANDROIDD.RSA": { "Size": 1213 }, + "META-INF/ANDROIDD.SF": { + "Size": 2225 + }, "META-INF/MANIFEST.MF": { "Size": 2098 + }, + "res/drawable-hdpi-v4/icon.png": { + "Size": 4762 + }, + "res/drawable-mdpi-v4/icon.png": { + "Size": 2200 + }, + "res/drawable-xhdpi-v4/icon.png": { + "Size": 7462 + }, + "res/drawable-xxhdpi-v4/icon.png": { + "Size": 13092 + }, + "res/drawable-xxxhdpi-v4/icon.png": { + "Size": 20118 + }, + "res/layout/main.xml": { + "Size": 544 + }, + "resources.arsc": { + "Size": 1724 } }, - "PackageSize": 3962580 + "PackageSize": 3970772 } \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsLegacy.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsLegacy.apkdesc index 98a085a8248..b1a25a74093 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsLegacy.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsLegacy.apkdesc @@ -4,6 +4,264 @@ "AndroidManifest.xml": { "Size": 3120 }, + "assemblies/FormsViewGroup.dll": { + "Size": 7200 + }, + "assemblies/Java.Interop.dll": { + "Size": 68710 + }, + "assemblies/Mono.Android.dll": { + "Size": 557342 + }, + "assemblies/Mono.Security.dll": { + "Size": 68422 + }, + "assemblies/mscorlib.dll": { + "Size": 915407 + }, + "assemblies/System.Core.dll": { + "Size": 164038 + }, + "assemblies/System.dll": { + "Size": 388853 + }, + "assemblies/System.Drawing.Common.dll": { + "Size": 12354 + }, + "assemblies/System.Net.Http.dll": { + "Size": 110631 + }, + "assemblies/System.Numerics.dll": { + "Size": 15680 + }, + "assemblies/System.Runtime.Serialization.dll": { + "Size": 186652 + }, + "assemblies/System.ServiceModel.Internals.dll": { + "Size": 26578 + }, + "assemblies/System.Xml.dll": { + "Size": 395644 + }, + "assemblies/UnnamedProject.dll": { + "Size": 116876 + }, + "assemblies/Xamarin.AndroidX.Activity.dll": { + "Size": 7686 + }, + "assemblies/Xamarin.AndroidX.AppCompat.AppCompatResources.dll": { + "Size": 6635 + }, + "assemblies/Xamarin.AndroidX.AppCompat.dll": { + "Size": 125318 + }, + "assemblies/Xamarin.AndroidX.CardView.dll": { + "Size": 7354 + }, + "assemblies/Xamarin.AndroidX.CoordinatorLayout.dll": { + "Size": 18259 + }, + "assemblies/Xamarin.AndroidX.Core.dll": { + "Size": 131919 + }, + "assemblies/Xamarin.AndroidX.DrawerLayout.dll": { + "Size": 15417 + }, + "assemblies/Xamarin.AndroidX.Fragment.dll": { + "Size": 43119 + }, + "assemblies/Xamarin.AndroidX.Legacy.Support.Core.UI.dll": { + "Size": 6704 + }, + "assemblies/Xamarin.AndroidX.Lifecycle.Common.dll": { + "Size": 7050 + }, + "assemblies/Xamarin.AndroidX.Lifecycle.LiveData.Core.dll": { + "Size": 7178 + }, + "assemblies/Xamarin.AndroidX.Lifecycle.ViewModel.dll": { + "Size": 4860 + }, + "assemblies/Xamarin.AndroidX.Loader.dll": { + "Size": 13574 + }, + "assemblies/Xamarin.AndroidX.RecyclerView.dll": { + "Size": 102317 + }, + "assemblies/Xamarin.AndroidX.SavedState.dll": { + "Size": 6262 + }, + "assemblies/Xamarin.AndroidX.SwipeRefreshLayout.dll": { + "Size": 11261 + }, + "assemblies/Xamarin.AndroidX.ViewPager.dll": { + "Size": 19409 + }, + "assemblies/Xamarin.Forms.Core.dll": { + "Size": 524723 + }, + "assemblies/Xamarin.Forms.Platform.Android.dll": { + "Size": 384855 + }, + "assemblies/Xamarin.Forms.Platform.dll": { + "Size": 56878 + }, + "assemblies/Xamarin.Forms.Xaml.dll": { + "Size": 55786 + }, + "assemblies/Xamarin.Google.Android.Material.dll": { + "Size": 43488 + }, + "classes.dex": { + "Size": 3455168 + }, + "lib/arm64-v8a/libmono-btls-shared.so": { + "Size": 1613872 + }, + "lib/arm64-v8a/libmono-native.so": { + "Size": 707024 + }, + "lib/arm64-v8a/libmonodroid.so": { + "Size": 281352 + }, + "lib/arm64-v8a/libmonosgen-2.0.so": { + "Size": 4037584 + }, + "lib/arm64-v8a/libxa-internal-api.so": { + "Size": 65624 + }, + "lib/arm64-v8a/libxamarin-app.so": { + "Size": 140560 + }, + "META-INF/android.support.design_material.version": { + "Size": 12 + }, + "META-INF/ANDROIDD.RSA": { + "Size": 1213 + }, + "META-INF/ANDROIDD.SF": { + "Size": 75858 + }, + "META-INF/androidx.activity_activity.version": { + "Size": 6 + }, + "META-INF/androidx.appcompat_appcompat-resources.version": { + "Size": 6 + }, + "META-INF/androidx.appcompat_appcompat.version": { + "Size": 6 + }, + "META-INF/androidx.arch.core_core-runtime.version": { + "Size": 6 + }, + "META-INF/androidx.asynclayoutinflater_asynclayoutinflater.version": { + "Size": 6 + }, + "META-INF/androidx.browser_browser.version": { + "Size": 6 + }, + "META-INF/androidx.cardview_cardview.version": { + "Size": 6 + }, + "META-INF/androidx.coordinatorlayout_coordinatorlayout.version": { + "Size": 6 + }, + "META-INF/androidx.core_core.version": { + "Size": 6 + }, + "META-INF/androidx.cursoradapter_cursoradapter.version": { + "Size": 6 + }, + "META-INF/androidx.customview_customview.version": { + "Size": 6 + }, + "META-INF/androidx.documentfile_documentfile.version": { + "Size": 6 + }, + "META-INF/androidx.drawerlayout_drawerlayout.version": { + "Size": 6 + }, + "META-INF/androidx.fragment_fragment.version": { + "Size": 6 + }, + "META-INF/androidx.interpolator_interpolator.version": { + "Size": 6 + }, + "META-INF/androidx.legacy_legacy-support-core-ui.version": { + "Size": 6 + }, + "META-INF/androidx.legacy_legacy-support-core-utils.version": { + "Size": 6 + }, + "META-INF/androidx.legacy_legacy-support-v4.version": { + "Size": 6 + }, + "META-INF/androidx.lifecycle_lifecycle-livedata-core.version": { + "Size": 6 + }, + "META-INF/androidx.lifecycle_lifecycle-livedata.version": { + "Size": 6 + }, + "META-INF/androidx.lifecycle_lifecycle-runtime.version": { + "Size": 6 + }, + "META-INF/androidx.lifecycle_lifecycle-viewmodel.version": { + "Size": 6 + }, + "META-INF/androidx.loader_loader.version": { + "Size": 6 + }, + "META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version": { + "Size": 6 + }, + "META-INF/androidx.media_media.version": { + "Size": 6 + }, + "META-INF/androidx.print_print.version": { + "Size": 6 + }, + "META-INF/androidx.recyclerview_recyclerview.version": { + "Size": 6 + }, + "META-INF/androidx.savedstate_savedstate.version": { + "Size": 6 + }, + "META-INF/androidx.slidingpanelayout_slidingpanelayout.version": { + "Size": 6 + }, + "META-INF/androidx.swiperefreshlayout_swiperefreshlayout.version": { + "Size": 6 + }, + "META-INF/androidx.transition_transition.version": { + "Size": 6 + }, + "META-INF/androidx.vectordrawable_vectordrawable-animated.version": { + "Size": 6 + }, + "META-INF/androidx.vectordrawable_vectordrawable.version": { + "Size": 6 + }, + "META-INF/androidx.versionedparcelable_versionedparcelable.version": { + "Size": 6 + }, + "META-INF/androidx.viewpager_viewpager.version": { + "Size": 6 + }, + "META-INF/com.google.android.material_material.version": { + "Size": 10 + }, + "META-INF/MANIFEST.MF": { + "Size": 75731 + }, + "META-INF/proguard/androidx-annotations.pro": { + "Size": 339 + }, + "res/anim-v21/design_bottom_sheet_slide_in.xml": { + "Size": 616 + }, + "res/anim-v21/design_bottom_sheet_slide_out.xml": { + "Size": 616 + }, "res/anim/abc_fade_in.xml": { "Size": 388 }, @@ -100,11 +358,8 @@ "res/anim/exittoright.xml": { "Size": 468 }, - "res/anim-v21/design_bottom_sheet_slide_in.xml": { - "Size": 616 - }, - "res/anim-v21/design_bottom_sheet_slide_out.xml": { - "Size": 616 + "res/animator-v21/design_appbar_state_list_animator.xml": { + "Size": 1216 }, "res/animator/design_fab_hide_motion_spec.xml": { "Size": 796 @@ -133,29 +388,59 @@ "res/animator/mtrl_fab_transformation_sheet_expand_spec.xml": { "Size": 1888 }, - "res/animator-v21/design_appbar_state_list_animator.xml": { - "Size": 1216 + "res/color-v21/abc_btn_colored_borderless_text_material.xml": { + "Size": 464 }, - "res/color/abc_background_cache_hint_selector_material_dark.xml": { - "Size": 468 + "res/color-v23/abc_btn_colored_borderless_text_material.xml": { + "Size": 500 }, - "res/color/abc_background_cache_hint_selector_material_light.xml": { - "Size": 468 + "res/color-v23/abc_btn_colored_text_material.xml": { + "Size": 500 }, - "res/color/abc_btn_colored_borderless_text_material.xml": { - "Size": 604 + "res/color-v23/abc_color_highlight_material.xml": { + "Size": 544 }, - "res/color/abc_btn_colored_text_material.xml": { - "Size": 604 + "res/color-v23/abc_tint_btn_checkable.xml": { + "Size": 624 }, - "res/color/abc_hint_foreground_material_dark.xml": { - "Size": 564 + "res/color-v23/abc_tint_default.xml": { + "Size": 1120 }, - "res/color/abc_hint_foreground_material_light.xml": { - "Size": 564 + "res/color-v23/abc_tint_edittext.xml": { + "Size": 668 }, - "res/color/abc_primary_text_disable_only_material_dark.xml": { - "Size": 464 + "res/color-v23/abc_tint_seek_thumb.xml": { + "Size": 500 + }, + "res/color-v23/abc_tint_spinner.xml": { + "Size": 668 + }, + "res/color-v23/abc_tint_switch_track.xml": { + "Size": 664 + }, + "res/color-v23/design_tint_password_toggle.xml": { + "Size": 376 + }, + "res/color/abc_background_cache_hint_selector_material_dark.xml": { + "Size": 468 + }, + "res/color/abc_background_cache_hint_selector_material_light.xml": { + "Size": 468 + }, + "res/color/abc_btn_colored_borderless_text_material.xml": { + "Size": 604 + }, + "res/color/abc_btn_colored_text_material.xml": { + "Size": 604 + }, + "res/color/abc_hint_foreground_material_dark.xml": { + "Size": 564 + }, + "res/color/abc_hint_foreground_material_light.xml": { + "Size": 564 + }, + "res/color/abc_primary_text_disable_only_material_dark.xml": { + "Size": 464 }, "res/color/abc_primary_text_disable_only_material_light.xml": { "Size": 464 @@ -238,10 +523,10 @@ "res/color/mtrl_tabs_colored_ripple_color.xml": { "Size": 948 }, - "res/color/mtrl_tabs_icon_color_selector.xml": { + "res/color/mtrl_tabs_icon_color_selector_colored.xml": { "Size": 464 }, - "res/color/mtrl_tabs_icon_color_selector_colored.xml": { + "res/color/mtrl_tabs_icon_color_selector.xml": { "Size": 464 }, "res/color/mtrl_tabs_legacy_text_color_selector.xml": { @@ -259,284 +544,221 @@ "res/color/switch_thumb_material_light.xml": { "Size": 464 }, - "res/color-v21/abc_btn_colored_borderless_text_material.xml": { - "Size": 464 + "res/drawable-anydpi-v21/design_ic_visibility_off.xml": { + "Size": 1144 }, - "res/color-v23/abc_btn_colored_borderless_text_material.xml": { - "Size": 500 + "res/drawable-anydpi-v21/design_ic_visibility.xml": { + "Size": 540 }, - "res/color-v23/abc_btn_colored_text_material.xml": { - "Size": 500 + "res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png": { + "Size": 272 }, - "res/color-v23/abc_color_highlight_material.xml": { - "Size": 544 + "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png": { + "Size": 227 }, - "res/color-v23/abc_tint_btn_checkable.xml": { - "Size": 624 + "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png": { + "Size": 404 }, - "res/color-v23/abc_tint_default.xml": { - "Size": 1120 + "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png": { + "Size": 464 }, - "res/color-v23/abc_tint_edittext.xml": { - "Size": 668 + "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png": { + "Size": 563 }, - "res/color-v23/abc_tint_seek_thumb.xml": { - "Size": 500 + "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png": { + "Size": 1096 }, - "res/color-v23/abc_tint_spinner.xml": { - "Size": 668 + "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png": { + "Size": 1243 }, - "res/color-v23/abc_tint_switch_track.xml": { - "Size": 664 + "res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png": { + "Size": 226 }, - "res/color-v23/design_tint_password_toggle.xml": { - "Size": 376 + "res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png": { + "Size": 171 }, - "res/drawable/abc_btn_borderless_material.xml": { - "Size": 588 + "res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png": { + "Size": 202 }, - "res/drawable/abc_btn_check_material.xml": { - "Size": 464 + "res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png": { + "Size": 404 }, - "res/drawable/abc_btn_check_material_anim.xml": { - "Size": 816 + "res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png": { + "Size": 226 }, - "res/drawable/abc_btn_colored_material.xml": { - "Size": 344 + "res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png": { + "Size": 215 }, - "res/drawable/abc_btn_default_mtrl_shape.xml": { - "Size": 932 + "res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png": { + "Size": 389 }, - "res/drawable/abc_btn_radio_material.xml": { - "Size": 464 + "res/drawable-hdpi-v4/abc_ic_star_black_16dp.png": { + "Size": 263 }, - "res/drawable/abc_btn_radio_material_anim.xml": { - "Size": 816 + "res/drawable-hdpi-v4/abc_ic_star_black_36dp.png": { + "Size": 522 }, - "res/drawable/abc_cab_background_internal_bg.xml": { - "Size": 372 + "res/drawable-hdpi-v4/abc_ic_star_black_48dp.png": { + "Size": 668 }, - "res/drawable/abc_cab_background_top_material.xml": { - "Size": 336 + "res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png": { + "Size": 197 }, - "res/drawable/abc_dialog_material_background.xml": { - "Size": 716 + "res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png": { + "Size": 328 }, - "res/drawable/abc_edit_text_material.xml": { - "Size": 868 + "res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png": { + "Size": 431 }, - "res/drawable/abc_ic_ab_back_material.xml": { - "Size": 692 + "res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png": { + "Size": 167 }, - "res/drawable/abc_ic_arrow_drop_right_black_24dp.xml": { - "Size": 1000 + "res/drawable-hdpi-v4/abc_list_focused_holo.9.png": { + "Size": 244 }, - "res/drawable/abc_ic_clear_material.xml": { - "Size": 684 + "res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png": { + "Size": 212 }, - "res/drawable/abc_ic_go_search_api_material.xml": { - "Size": 640 + "res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png": { + "Size": 208 }, - "res/drawable/abc_ic_menu_overflow_material.xml": { - "Size": 792 + "res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png": { + "Size": 208 }, - "res/drawable/abc_ic_search_api_material.xml": { - "Size": 812 + "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png": { + "Size": 228 }, - "res/drawable/abc_ic_voice_search_api_material.xml": { - "Size": 828 + "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png": { + "Size": 229 }, - "res/drawable/abc_item_background_holo_dark.xml": { - "Size": 1012 + "res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png": { + "Size": 738 }, - "res/drawable/abc_item_background_holo_light.xml": { - "Size": 1012 + "res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png": { + "Size": 1098 }, - "res/drawable/abc_list_divider_material.xml": { - "Size": 480 + "res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png": { + "Size": 201 }, - "res/drawable/abc_list_selector_background_transition_holo_dark.xml": { - "Size": 424 + "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png": { + "Size": 196 }, - "res/drawable/abc_list_selector_background_transition_holo_light.xml": { - "Size": 424 + "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png": { + "Size": 272 }, - "res/drawable/abc_list_selector_holo_dark.xml": { - "Size": 1064 + "res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png": { + "Size": 205 }, - "res/drawable/abc_list_selector_holo_light.xml": { - "Size": 1064 + "res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png": { + "Size": 196 }, - "res/drawable/abc_ratingbar_indicator_material.xml": { - "Size": 664 + "res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png": { + "Size": 345 }, - "res/drawable-v21/abc_ratingbar_indicator_material.xml": { - "Size": 704 + "res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png": { + "Size": 484 }, - "res/drawable/abc_ratingbar_material.xml": { - "Size": 664 + "res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png": { + "Size": 190 }, - "res/drawable-v21/abc_ratingbar_material.xml": { - "Size": 704 + "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png": { + "Size": 278 }, - "res/drawable/abc_ratingbar_small_material.xml": { - "Size": 664 + "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png": { + "Size": 278 }, - "res/drawable-v21/abc_ratingbar_small_material.xml": { - "Size": 704 + "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png": { + "Size": 398 }, - "res/drawable/abc_seekbar_thumb_material.xml": { - "Size": 1100 + "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.png": { + "Size": 396 }, - "res/drawable/abc_seekbar_tick_mark_material.xml": { - "Size": 516 + "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png": { + "Size": 263 }, - "res/drawable/abc_seekbar_track_material.xml": { - "Size": 1408 + "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png": { + "Size": 262 }, - "res/drawable/abc_spinner_textfield_background_material.xml": { - "Size": 1160 + "res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png": { + "Size": 186 }, - "res/drawable/abc_switch_thumb_material.xml": { - "Size": 464 + "res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png": { + "Size": 192 }, - "res/drawable/abc_tab_indicator_material.xml": { - "Size": 468 + "res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png": { + "Size": 178 }, - "res/drawable/abc_text_cursor_material.xml": { - "Size": 516 + "res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { + "Size": 178 }, - "res/drawable/abc_textfield_search_material.xml": { - "Size": 756 + "res/drawable-hdpi-v4/design_ic_visibility_off.png": { + "Size": 507 }, - "res/drawable/abc_vector_test.xml": { - "Size": 612 + "res/drawable-hdpi-v4/design_ic_visibility.png": { + "Size": 470 }, - "res/drawable/btn_checkbox_checked_mtrl.xml": { - "Size": 2688 + "res/drawable-hdpi-v4/icon.png": { + "Size": 4762 }, - "res/drawable/btn_checkbox_checked_to_unchecked_mtrl_animation.xml": { - "Size": 688 + "res/drawable-hdpi-v4/notification_bg_low_normal.9.png": { + "Size": 212 }, - "res/drawable/btn_checkbox_unchecked_mtrl.xml": { - "Size": 2660 + "res/drawable-hdpi-v4/notification_bg_low_pressed.9.png": { + "Size": 225 }, - "res/drawable/btn_checkbox_unchecked_to_checked_mtrl_animation.xml": { - "Size": 688 + "res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png": { + "Size": 225 }, - "res/drawable/btn_radio_off_mtrl.xml": { - "Size": 1728 - }, - "res/drawable/btn_radio_off_to_on_mtrl_animation.xml": { - "Size": 680 - }, - "res/drawable/btn_radio_on_mtrl.xml": { - "Size": 1656 - }, - "res/drawable/btn_radio_on_to_off_mtrl_animation.xml": { - "Size": 680 - }, - "res/drawable/design_bottom_navigation_item_background.xml": { - "Size": 784 - }, - "res/drawable/design_fab_background.xml": { - "Size": 372 - }, - "res/drawable/design_password_eye.xml": { - "Size": 464 - }, - "res/drawable/design_snackbar_background.xml": { - "Size": 484 - }, - "res/drawable/ic_mtrl_chip_checked_black.xml": { - "Size": 600 - }, - "res/drawable/ic_mtrl_chip_checked_circle.xml": { - "Size": 940 - }, - "res/drawable/ic_mtrl_chip_close_circle.xml": { - "Size": 808 - }, - "res/drawable/mtrl_snackbar_background.xml": { - "Size": 484 - }, - "res/drawable/mtrl_tabs_default_indicator.xml": { - "Size": 628 - }, - "res/drawable/navigation_empty_icon.xml": { - "Size": 516 - }, - "res/drawable/notification_bg.xml": { - "Size": 532 - }, - "res/drawable/notification_bg_low.xml": { - "Size": 532 - }, - "res/drawable/notification_icon_background.xml": { - "Size": 372 - }, - "res/drawable/notification_tile_bg.xml": { - "Size": 304 - }, - "res/drawable/tooltip_frame_dark.xml": { - "Size": 484 - }, - "res/drawable/tooltip_frame_light.xml": { - "Size": 484 - }, - "res/drawable-watch-v20/abc_dialog_material_background.xml": { - "Size": 372 - }, - "res/drawable-v21/$avd_hide_password__0.xml": { - "Size": 1176 + "res/drawable-hdpi-v4/notification_bg_normal.9.png": { + "Size": 212 }, - "res/drawable-v21/$avd_hide_password__1.xml": { - "Size": 592 + "res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png": { + "Size": 107 }, - "res/drawable-v21/$avd_hide_password__2.xml": { - "Size": 556 + "res/drawable-ldrtl-hdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { + "Size": 199 }, - "res/drawable-v21/$avd_show_password__0.xml": { - "Size": 1136 + "res/drawable-ldrtl-hdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { + "Size": 400 }, - "res/drawable-v21/$avd_show_password__1.xml": { - "Size": 592 + "res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { + "Size": 345 }, - "res/drawable-v21/$avd_show_password__2.xml": { - "Size": 556 + "res/drawable-ldrtl-mdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { + "Size": 127 }, - "res/drawable-v21/abc_action_bar_item_background_material.xml": { - "Size": 264 + "res/drawable-ldrtl-mdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { + "Size": 253 }, - "res/drawable-v21/abc_btn_colored_material.xml": { - "Size": 1716 + "res/drawable-ldrtl-mdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { + "Size": 318 }, - "res/drawable-v21/abc_dialog_material_background.xml": { - "Size": 716 + "res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { + "Size": 178 }, - "res/drawable-v21/abc_edit_text_material.xml": { - "Size": 1172 + "res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { + "Size": 494 }, - "res/drawable-v21/abc_list_divider_material.xml": { - "Size": 516 + "res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { + "Size": 417 }, - "res/drawable-v21/avd_hide_password.xml": { - "Size": 660 + "res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { + "Size": 260 }, - "res/drawable-v21/avd_show_password.xml": { - "Size": 660 + "res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { + "Size": 705 }, - "res/drawable-v21/design_bottom_navigation_item_background.xml": { - "Size": 264 + "res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { + "Size": 525 }, - "res/drawable-v21/design_password_eye.xml": { - "Size": 816 + "res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { + "Size": 325 }, - "res/drawable-v21/notification_action_background.xml": { - "Size": 1180 + "res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { + "Size": 905 }, - "res/drawable-v23/abc_control_background_material.xml": { - "Size": 304 + "res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { + "Size": 437 }, "res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png": { "Size": 267 @@ -679,12 +901,12 @@ "res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { "Size": 178 }, - "res/drawable-mdpi-v4/design_ic_visibility.png": { - "Size": 309 - }, "res/drawable-mdpi-v4/design_ic_visibility_off.png": { "Size": 351 }, + "res/drawable-mdpi-v4/design_ic_visibility.png": { + "Size": 309 + }, "res/drawable-mdpi-v4/icon.png": { "Size": 2200 }, @@ -694,218 +916,98 @@ "res/drawable-mdpi-v4/notification_bg_low_pressed.9.png": { "Size": 223 }, - "res/drawable-mdpi-v4/notification_bg_normal.9.png": { - "Size": 215 - }, "res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png": { "Size": 223 }, + "res/drawable-mdpi-v4/notification_bg_normal.9.png": { + "Size": 215 + }, "res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png": { "Size": 98 }, - "res/drawable-ldrtl-mdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { - "Size": 127 + "res/drawable-v21/$avd_hide_password__0.xml": { + "Size": 1176 }, - "res/drawable-ldrtl-mdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { - "Size": 253 + "res/drawable-v21/$avd_hide_password__1.xml": { + "Size": 592 }, - "res/drawable-ldrtl-mdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { - "Size": 318 + "res/drawable-v21/$avd_hide_password__2.xml": { + "Size": 556 }, - "res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png": { - "Size": 272 + "res/drawable-v21/$avd_show_password__0.xml": { + "Size": 1136 }, - "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png": { - "Size": 227 + "res/drawable-v21/$avd_show_password__1.xml": { + "Size": 592 }, - "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png": { - "Size": 404 + "res/drawable-v21/$avd_show_password__2.xml": { + "Size": 556 }, - "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png": { - "Size": 464 + "res/drawable-v21/abc_action_bar_item_background_material.xml": { + "Size": 264 }, - "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png": { - "Size": 563 + "res/drawable-v21/abc_btn_colored_material.xml": { + "Size": 1716 }, - "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png": { - "Size": 1096 + "res/drawable-v21/abc_dialog_material_background.xml": { + "Size": 716 }, - "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png": { - "Size": 1243 + "res/drawable-v21/abc_edit_text_material.xml": { + "Size": 1172 }, - "res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png": { - "Size": 226 + "res/drawable-v21/abc_list_divider_material.xml": { + "Size": 516 }, - "res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png": { - "Size": 171 + "res/drawable-v21/abc_ratingbar_indicator_material.xml": { + "Size": 704 }, - "res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png": { - "Size": 202 + "res/drawable-v21/abc_ratingbar_material.xml": { + "Size": 704 }, - "res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png": { - "Size": 404 + "res/drawable-v21/abc_ratingbar_small_material.xml": { + "Size": 704 }, - "res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png": { - "Size": 226 + "res/drawable-v21/avd_hide_password.xml": { + "Size": 660 }, - "res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png": { - "Size": 215 + "res/drawable-v21/avd_show_password.xml": { + "Size": 660 }, - "res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png": { - "Size": 389 + "res/drawable-v21/design_bottom_navigation_item_background.xml": { + "Size": 264 }, - "res/drawable-hdpi-v4/abc_ic_star_black_16dp.png": { - "Size": 263 + "res/drawable-v21/design_password_eye.xml": { + "Size": 816 }, - "res/drawable-hdpi-v4/abc_ic_star_black_36dp.png": { - "Size": 522 + "res/drawable-v21/notification_action_background.xml": { + "Size": 1180 }, - "res/drawable-hdpi-v4/abc_ic_star_black_48dp.png": { - "Size": 668 + "res/drawable-v23/abc_control_background_material.xml": { + "Size": 304 }, - "res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png": { - "Size": 197 + "res/drawable-watch-v20/abc_dialog_material_background.xml": { + "Size": 372 }, - "res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png": { - "Size": 328 + "res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png": { + "Size": 280 }, - "res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png": { - "Size": 431 + "res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000.png": { + "Size": 281 }, - "res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png": { - "Size": 167 + "res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_015.png": { + "Size": 432 }, - "res/drawable-hdpi-v4/abc_list_focused_holo.9.png": { - "Size": 244 + "res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000.png": { + "Size": 651 }, - "res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png": { - "Size": 212 + "res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015.png": { + "Size": 785 }, - "res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png": { - "Size": 208 + "res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png": { + "Size": 1526 }, - "res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png": { - "Size": 208 - }, - "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png": { - "Size": 228 - }, - "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png": { - "Size": 229 - }, - "res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png": { - "Size": 738 - }, - "res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png": { - "Size": 1098 - }, - "res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png": { - "Size": 201 - }, - "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png": { - "Size": 196 - }, - "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png": { - "Size": 272 - }, - "res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png": { - "Size": 205 - }, - "res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png": { - "Size": 196 - }, - "res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png": { - "Size": 345 - }, - "res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png": { - "Size": 484 - }, - "res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png": { - "Size": 190 - }, - "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png": { - "Size": 278 - }, - "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png": { - "Size": 278 - }, - "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png": { - "Size": 398 - }, - "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.png": { - "Size": 396 - }, - "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png": { - "Size": 263 - }, - "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png": { - "Size": 262 - }, - "res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png": { - "Size": 186 - }, - "res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png": { - "Size": 192 - }, - "res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png": { - "Size": 178 - }, - "res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { - "Size": 178 - }, - "res/drawable-hdpi-v4/design_ic_visibility.png": { - "Size": 470 - }, - "res/drawable-hdpi-v4/design_ic_visibility_off.png": { - "Size": 507 - }, - "res/drawable-hdpi-v4/icon.png": { - "Size": 4762 - }, - "res/drawable-hdpi-v4/notification_bg_low_normal.9.png": { - "Size": 212 - }, - "res/drawable-hdpi-v4/notification_bg_low_pressed.9.png": { - "Size": 225 - }, - "res/drawable-hdpi-v4/notification_bg_normal.9.png": { - "Size": 212 - }, - "res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png": { - "Size": 225 - }, - "res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png": { - "Size": 107 - }, - "res/drawable-ldrtl-hdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { - "Size": 199 - }, - "res/drawable-ldrtl-hdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { - "Size": 400 - }, - "res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { - "Size": 345 - }, - "res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png": { - "Size": 280 - }, - "res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000.png": { - "Size": 281 - }, - "res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_015.png": { - "Size": 432 - }, - "res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000.png": { - "Size": 651 - }, - "res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015.png": { - "Size": 785 - }, - "res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png": { - "Size": 1526 - }, - "res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png": { - "Size": 1731 + "res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png": { + "Size": 1731 }, "res/drawable-xhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png": { "Size": 229 @@ -1027,12 +1129,12 @@ "res/drawable-xhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { "Size": 182 }, - "res/drawable-xhdpi-v4/design_ic_visibility.png": { - "Size": 593 - }, "res/drawable-xhdpi-v4/design_ic_visibility_off.png": { "Size": 629 }, + "res/drawable-xhdpi-v4/design_ic_visibility.png": { + "Size": 593 + }, "res/drawable-xhdpi-v4/icon.png": { "Size": 7462 }, @@ -1042,24 +1144,15 @@ "res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png": { "Size": 252 }, - "res/drawable-xhdpi-v4/notification_bg_normal.9.png": { - "Size": 221 - }, "res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png": { "Size": 247 }, + "res/drawable-xhdpi-v4/notification_bg_normal.9.png": { + "Size": 221 + }, "res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png": { "Size": 138 }, - "res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { - "Size": 178 - }, - "res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { - "Size": 494 - }, - "res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { - "Size": 417 - }, "res/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png": { "Size": 286 }, @@ -1201,24 +1294,15 @@ "res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { "Size": 186 }, - "res/drawable-xxhdpi-v4/design_ic_visibility.png": { - "Size": 868 - }, "res/drawable-xxhdpi-v4/design_ic_visibility_off.png": { "Size": 884 }, + "res/drawable-xxhdpi-v4/design_ic_visibility.png": { + "Size": 868 + }, "res/drawable-xxhdpi-v4/icon.png": { "Size": 13092 }, - "res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { - "Size": 260 - }, - "res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { - "Size": 705 - }, - "res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { - "Size": 525 - }, "res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_000.png": { "Size": 275 }, @@ -1297,102 +1381,309 @@ "res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_light.png": { "Size": 513 }, - "res/drawable-xxxhdpi-v4/design_ic_visibility.png": { - "Size": 1155 - }, "res/drawable-xxxhdpi-v4/design_ic_visibility_off.png": { "Size": 1201 }, + "res/drawable-xxxhdpi-v4/design_ic_visibility.png": { + "Size": 1155 + }, "res/drawable-xxxhdpi-v4/icon.png": { "Size": 20118 }, - "res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png": { - "Size": 325 - }, - "res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png": { - "Size": 905 + "res/drawable/abc_btn_borderless_material.xml": { + "Size": 588 }, - "res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png": { - "Size": 437 + "res/drawable/abc_btn_check_material_anim.xml": { + "Size": 816 }, - "res/drawable-anydpi-v21/design_ic_visibility.xml": { - "Size": 540 + "res/drawable/abc_btn_check_material.xml": { + "Size": 464 }, - "res/drawable-anydpi-v21/design_ic_visibility_off.xml": { - "Size": 1144 + "res/drawable/abc_btn_colored_material.xml": { + "Size": 344 }, - "res/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_0.xml": { - "Size": 316 + "res/drawable/abc_btn_default_mtrl_shape.xml": { + "Size": 932 }, - "res/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_1.xml": { - "Size": 328 + "res/drawable/abc_btn_radio_material_anim.xml": { + "Size": 816 }, - "res/interpolator/btn_checkbox_unchecked_mtrl_animation_interpolator_0.xml": { - "Size": 316 + "res/drawable/abc_btn_radio_material.xml": { + "Size": 464 }, - "res/interpolator/btn_checkbox_unchecked_mtrl_animation_interpolator_1.xml": { - "Size": 328 + "res/drawable/abc_cab_background_internal_bg.xml": { + "Size": 372 }, - "res/interpolator/btn_radio_to_off_mtrl_animation_interpolator_0.xml": { - "Size": 320 + "res/drawable/abc_cab_background_top_material.xml": { + "Size": 336 }, - "res/interpolator/btn_radio_to_on_mtrl_animation_interpolator_0.xml": { - "Size": 320 + "res/drawable/abc_dialog_material_background.xml": { + "Size": 716 }, - "res/interpolator/fast_out_slow_in.xml": { - "Size": 400 + "res/drawable/abc_edit_text_material.xml": { + "Size": 868 }, - "res/interpolator/mtrl_fast_out_linear_in.xml": { - "Size": 136 + "res/drawable/abc_ic_ab_back_material.xml": { + "Size": 692 }, - "res/interpolator/mtrl_fast_out_slow_in.xml": { - "Size": 144 + "res/drawable/abc_ic_arrow_drop_right_black_24dp.xml": { + "Size": 1000 }, - "res/interpolator/mtrl_linear.xml": { - "Size": 132 + "res/drawable/abc_ic_clear_material.xml": { + "Size": 684 }, - "res/interpolator/mtrl_linear_out_slow_in.xml": { - "Size": 136 + "res/drawable/abc_ic_go_search_api_material.xml": { + "Size": 640 }, - "res/interpolator-v21/mtrl_fast_out_linear_in.xml": { - "Size": 400 + "res/drawable/abc_ic_menu_overflow_material.xml": { + "Size": 792 }, - "res/interpolator-v21/mtrl_fast_out_slow_in.xml": { - "Size": 400 + "res/drawable/abc_ic_search_api_material.xml": { + "Size": 812 }, - "res/interpolator-v21/mtrl_linear_out_slow_in.xml": { - "Size": 400 + "res/drawable/abc_ic_voice_search_api_material.xml": { + "Size": 828 }, - "res/layout/abc_action_bar_title_item.xml": { - "Size": 872 + "res/drawable/abc_item_background_holo_dark.xml": { + "Size": 1012 }, - "res/layout/abc_action_bar_up_container.xml": { - "Size": 440 + "res/drawable/abc_item_background_holo_light.xml": { + "Size": 1012 }, - "res/layout/abc_action_menu_item_layout.xml": { - "Size": 768 + "res/drawable/abc_list_divider_material.xml": { + "Size": 480 }, - "res/layout/abc_action_menu_layout.xml": { - "Size": 576 + "res/drawable/abc_list_selector_background_transition_holo_dark.xml": { + "Size": 424 }, - "res/layout/abc_action_mode_bar.xml": { - "Size": 464 + "res/drawable/abc_list_selector_background_transition_holo_light.xml": { + "Size": 424 + }, + "res/drawable/abc_list_selector_holo_dark.xml": { + "Size": 1064 + }, + "res/drawable/abc_list_selector_holo_light.xml": { + "Size": 1064 + }, + "res/drawable/abc_ratingbar_indicator_material.xml": { + "Size": 664 + }, + "res/drawable/abc_ratingbar_material.xml": { + "Size": 664 + }, + "res/drawable/abc_ratingbar_small_material.xml": { + "Size": 664 + }, + "res/drawable/abc_seekbar_thumb_material.xml": { + "Size": 1100 + }, + "res/drawable/abc_seekbar_tick_mark_material.xml": { + "Size": 516 + }, + "res/drawable/abc_seekbar_track_material.xml": { + "Size": 1408 + }, + "res/drawable/abc_spinner_textfield_background_material.xml": { + "Size": 1160 + }, + "res/drawable/abc_switch_thumb_material.xml": { + "Size": 464 + }, + "res/drawable/abc_tab_indicator_material.xml": { + "Size": 468 + }, + "res/drawable/abc_text_cursor_material.xml": { + "Size": 516 + }, + "res/drawable/abc_textfield_search_material.xml": { + "Size": 756 + }, + "res/drawable/abc_vector_test.xml": { + "Size": 612 + }, + "res/drawable/btn_checkbox_checked_mtrl.xml": { + "Size": 2688 + }, + "res/drawable/btn_checkbox_checked_to_unchecked_mtrl_animation.xml": { + "Size": 688 + }, + "res/drawable/btn_checkbox_unchecked_mtrl.xml": { + "Size": 2660 + }, + "res/drawable/btn_checkbox_unchecked_to_checked_mtrl_animation.xml": { + "Size": 688 + }, + "res/drawable/btn_radio_off_mtrl.xml": { + "Size": 1728 + }, + "res/drawable/btn_radio_off_to_on_mtrl_animation.xml": { + "Size": 680 + }, + "res/drawable/btn_radio_on_mtrl.xml": { + "Size": 1656 + }, + "res/drawable/btn_radio_on_to_off_mtrl_animation.xml": { + "Size": 680 + }, + "res/drawable/design_bottom_navigation_item_background.xml": { + "Size": 784 + }, + "res/drawable/design_fab_background.xml": { + "Size": 372 + }, + "res/drawable/design_password_eye.xml": { + "Size": 464 + }, + "res/drawable/design_snackbar_background.xml": { + "Size": 484 + }, + "res/drawable/ic_mtrl_chip_checked_black.xml": { + "Size": 600 + }, + "res/drawable/ic_mtrl_chip_checked_circle.xml": { + "Size": 940 + }, + "res/drawable/ic_mtrl_chip_close_circle.xml": { + "Size": 808 + }, + "res/drawable/mtrl_snackbar_background.xml": { + "Size": 484 + }, + "res/drawable/mtrl_tabs_default_indicator.xml": { + "Size": 628 + }, + "res/drawable/navigation_empty_icon.xml": { + "Size": 516 + }, + "res/drawable/notification_bg_low.xml": { + "Size": 532 + }, + "res/drawable/notification_bg.xml": { + "Size": 532 + }, + "res/drawable/notification_icon_background.xml": { + "Size": 372 + }, + "res/drawable/notification_tile_bg.xml": { + "Size": 304 + }, + "res/drawable/tooltip_frame_dark.xml": { + "Size": 484 + }, + "res/drawable/tooltip_frame_light.xml": { + "Size": 484 + }, + "res/interpolator-v21/mtrl_fast_out_linear_in.xml": { + "Size": 400 + }, + "res/interpolator-v21/mtrl_fast_out_slow_in.xml": { + "Size": 400 + }, + "res/interpolator-v21/mtrl_linear_out_slow_in.xml": { + "Size": 400 + }, + "res/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_0.xml": { + "Size": 316 + }, + "res/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_1.xml": { + "Size": 328 + }, + "res/interpolator/btn_checkbox_unchecked_mtrl_animation_interpolator_0.xml": { + "Size": 316 + }, + "res/interpolator/btn_checkbox_unchecked_mtrl_animation_interpolator_1.xml": { + "Size": 328 + }, + "res/interpolator/btn_radio_to_off_mtrl_animation_interpolator_0.xml": { + "Size": 320 + }, + "res/interpolator/btn_radio_to_on_mtrl_animation_interpolator_0.xml": { + "Size": 320 + }, + "res/interpolator/fast_out_slow_in.xml": { + "Size": 400 + }, + "res/interpolator/mtrl_fast_out_linear_in.xml": { + "Size": 136 + }, + "res/interpolator/mtrl_fast_out_slow_in.xml": { + "Size": 144 + }, + "res/interpolator/mtrl_linear_out_slow_in.xml": { + "Size": 136 + }, + "res/interpolator/mtrl_linear.xml": { + "Size": 132 + }, + "res/layout-sw600dp-v13/design_layout_snackbar.xml": { + "Size": 528 + }, + "res/layout-sw600dp-v13/mtrl_layout_snackbar.xml": { + "Size": 528 + }, + "res/layout-v16/notification_template_custom_big.xml": { + "Size": 3208 + }, + "res/layout-v21/abc_screen_toolbar.xml": { + "Size": 1504 + }, + "res/layout-v21/fallbacktoolbardonotuse.xml": { + "Size": 496 + }, + "res/layout-v21/notification_action_tombstone.xml": { + "Size": 1228 + }, + "res/layout-v21/notification_action.xml": { + "Size": 1052 + }, + "res/layout-v21/notification_template_custom_big.xml": { + "Size": 2456 + }, + "res/layout-v21/notification_template_icon_group.xml": { + "Size": 988 + }, + "res/layout-v21/toolbar.xml": { + "Size": 496 + }, + "res/layout-v22/abc_alert_dialog_button_bar_material.xml": { + "Size": 1584 + }, + "res/layout-v26/abc_screen_toolbar.xml": { + "Size": 1560 + }, + "res/layout-watch-v20/abc_alert_dialog_button_bar_material.xml": { + "Size": 1208 + }, + "res/layout-watch-v20/abc_alert_dialog_title_material.xml": { + "Size": 1352 + }, + "res/layout/abc_action_bar_title_item.xml": { + "Size": 872 + }, + "res/layout/abc_action_bar_up_container.xml": { + "Size": 440 + }, + "res/layout/abc_action_menu_item_layout.xml": { + "Size": 768 + }, + "res/layout/abc_action_menu_layout.xml": { + "Size": 576 + }, + "res/layout/abc_action_mode_bar.xml": { + "Size": 464 }, "res/layout/abc_action_mode_close_item_material.xml": { "Size": 840 }, - "res/layout/abc_activity_chooser_view.xml": { - "Size": 1684 - }, "res/layout/abc_activity_chooser_view_list_item.xml": { "Size": 1304 }, + "res/layout/abc_activity_chooser_view.xml": { + "Size": 1684 + }, "res/layout/abc_alert_dialog_button_bar_material.xml": { "Size": 1536 }, - "res/layout-v22/abc_alert_dialog_button_bar_material.xml": { - "Size": 1584 - }, "res/layout/abc_alert_dialog_material.xml": { "Size": 2476 }, @@ -1429,18 +1720,15 @@ "res/layout/abc_screen_content_include.xml": { "Size": 548 }, - "res/layout/abc_screen_simple.xml": { - "Size": 832 - }, "res/layout/abc_screen_simple_overlay_action_mode.xml": { "Size": 792 }, + "res/layout/abc_screen_simple.xml": { + "Size": 832 + }, "res/layout/abc_screen_toolbar.xml": { "Size": 1452 }, - "res/layout-v21/abc_screen_toolbar.xml": { - "Size": 1504 - }, "res/layout/abc_search_dropdown_item_icons_2line.xml": { "Size": 1916 }, @@ -1471,12 +1759,12 @@ "res/layout/design_bottom_sheet_dialog.xml": { "Size": 1184 }, - "res/layout/design_layout_snackbar.xml": { - "Size": 528 - }, "res/layout/design_layout_snackbar_include.xml": { "Size": 1444 }, + "res/layout/design_layout_snackbar.xml": { + "Size": 528 + }, "res/layout/design_layout_tab_icon.xml": { "Size": 408 }, @@ -1486,9 +1774,6 @@ "res/layout/design_menu_item_action_area.xml": { "Size": 320 }, - "res/layout/design_navigation_item.xml": { - "Size": 536 - }, "res/layout/design_navigation_item_header.xml": { "Size": 440 }, @@ -1498,12 +1783,15 @@ "res/layout/design_navigation_item_subheader.xml": { "Size": 564 }, - "res/layout/design_navigation_menu.xml": { - "Size": 528 + "res/layout/design_navigation_item.xml": { + "Size": 536 }, "res/layout/design_navigation_menu_item.xml": { "Size": 856 }, + "res/layout/design_navigation_menu.xml": { + "Size": 528 + }, "res/layout/design_text_input_password_icon.xml": { "Size": 564 }, @@ -1513,47 +1801,41 @@ "res/layout/fallbacktoolbardonotuse.xml": { "Size": 452 }, - "res/layout-v21/fallbacktoolbardonotuse.xml": { - "Size": 496 - }, "res/layout/flyoutcontent.xml": { "Size": 944 }, "res/layout/main.xml": { "Size": 544 }, - "res/layout/mtrl_layout_snackbar.xml": { - "Size": 528 - }, "res/layout/mtrl_layout_snackbar_include.xml": { "Size": 1404 }, - "res/layout/notification_action.xml": { - "Size": 1156 - }, + "res/layout/mtrl_layout_snackbar.xml": { + "Size": 528 + }, "res/layout/notification_action_tombstone.xml": { "Size": 1332 }, + "res/layout/notification_action.xml": { + "Size": 1156 + }, "res/layout/notification_media_action.xml": { "Size": 564 }, "res/layout/notification_media_cancel_action.xml": { "Size": 744 }, - "res/layout/notification_template_big_media.xml": { - "Size": 1696 - }, "res/layout/notification_template_big_media_custom.xml": { "Size": 3044 }, - "res/layout/notification_template_big_media_narrow.xml": { - "Size": 1824 - }, "res/layout/notification_template_big_media_narrow_custom.xml": { "Size": 3216 }, - "res/layout-v16/notification_template_custom_big.xml": { - "Size": 3208 + "res/layout/notification_template_big_media_narrow.xml": { + "Size": 1824 + }, + "res/layout/notification_template_big_media.xml": { + "Size": 1696 }, "res/layout/notification_template_icon_group.xml": { "Size": 392 @@ -1561,12 +1843,12 @@ "res/layout/notification_template_lines_media.xml": { "Size": 2872 }, - "res/layout/notification_template_media.xml": { - "Size": 1292 - }, "res/layout/notification_template_media_custom.xml": { "Size": 2756 }, + "res/layout/notification_template_media.xml": { + "Size": 1292 + }, "res/layout/notification_template_part_chronometer.xml": { "Size": 440 }, @@ -1597,291 +1879,9 @@ "res/layout/toolbar.xml": { "Size": 452 }, - "res/layout-v21/toolbar.xml": { - "Size": 496 - }, - "res/layout-sw600dp-v13/design_layout_snackbar.xml": { - "Size": 528 - }, - "res/layout-sw600dp-v13/mtrl_layout_snackbar.xml": { - "Size": 528 - }, - "res/layout-watch-v20/abc_alert_dialog_button_bar_material.xml": { - "Size": 1208 - }, - "res/layout-watch-v20/abc_alert_dialog_title_material.xml": { - "Size": 1352 - }, - "res/layout-v21/notification_action.xml": { - "Size": 1052 - }, - "res/layout-v21/notification_action_tombstone.xml": { - "Size": 1228 - }, - "res/layout-v21/notification_template_custom_big.xml": { - "Size": 2456 - }, - "res/layout-v21/notification_template_icon_group.xml": { - "Size": 988 - }, - "res/layout-v26/abc_screen_toolbar.xml": { - "Size": 1560 - }, "resources.arsc": { "Size": 341040 - }, - "classes.dex": { - "Size": 3455100 - }, - "assemblies/UnnamedProject.dll": { - "Size": 116864 - }, - "assemblies/FormsViewGroup.dll": { - "Size": 7192 - }, - "assemblies/Xamarin.AndroidX.Activity.dll": { - "Size": 7673 - }, - "assemblies/Xamarin.AndroidX.AppCompat.AppCompatResources.dll": { - "Size": 6628 - }, - "assemblies/Xamarin.AndroidX.AppCompat.dll": { - "Size": 125310 - }, - "assemblies/Xamarin.AndroidX.CardView.dll": { - "Size": 7343 - }, - "assemblies/Xamarin.AndroidX.CoordinatorLayout.dll": { - "Size": 18247 - }, - "assemblies/Xamarin.AndroidX.Core.dll": { - "Size": 131908 - }, - "assemblies/Xamarin.AndroidX.DrawerLayout.dll": { - "Size": 15404 - }, - "assemblies/Xamarin.AndroidX.Fragment.dll": { - "Size": 43114 - }, - "assemblies/Xamarin.AndroidX.Legacy.Support.Core.UI.dll": { - "Size": 6692 - }, - "assemblies/Xamarin.AndroidX.Lifecycle.Common.dll": { - "Size": 7039 - }, - "assemblies/Xamarin.AndroidX.Lifecycle.LiveData.Core.dll": { - "Size": 7165 - }, - "assemblies/Xamarin.AndroidX.Lifecycle.ViewModel.dll": { - "Size": 4845 - }, - "assemblies/Xamarin.AndroidX.Loader.dll": { - "Size": 13563 - }, - "assemblies/Xamarin.AndroidX.RecyclerView.dll": { - "Size": 102309 - }, - "assemblies/Xamarin.AndroidX.SavedState.dll": { - "Size": 6253 - }, - "assemblies/Xamarin.AndroidX.SwipeRefreshLayout.dll": { - "Size": 11251 - }, - "assemblies/Xamarin.AndroidX.ViewPager.dll": { - "Size": 19400 - }, - "assemblies/Xamarin.Forms.Core.dll": { - "Size": 524712 - }, - "assemblies/Xamarin.Forms.Platform.Android.dll": { - "Size": 384845 - }, - "assemblies/Xamarin.Forms.Platform.dll": { - "Size": 56878 - }, - "assemblies/Xamarin.Forms.Xaml.dll": { - "Size": 55776 - }, - "assemblies/Xamarin.Google.Android.Material.dll": { - "Size": 43475 - }, - "assemblies/System.Net.Http.dll": { - "Size": 110617 - }, - "assemblies/System.Runtime.Serialization.dll": { - "Size": 186635 - }, - "assemblies/Java.Interop.dll": { - "Size": 68652 - }, - "assemblies/Mono.Android.dll": { - "Size": 557091 - }, - "assemblies/mscorlib.dll": { - "Size": 915344 - }, - "assemblies/System.Core.dll": { - "Size": 164026 - }, - "assemblies/System.dll": { - "Size": 388843 - }, - "assemblies/System.Xml.dll": { - "Size": 395637 - }, - "assemblies/System.Numerics.dll": { - "Size": 15666 - }, - "assemblies/System.Drawing.Common.dll": { - "Size": 12338 - }, - "assemblies/System.ServiceModel.Internals.dll": { - "Size": 26568 - }, - "assemblies/Mono.Security.dll": { - "Size": 68408 - }, - "lib/arm64-v8a/libxamarin-app.so": { - "Size": 140560 - }, - "lib/arm64-v8a/libmonodroid.so": { - "Size": 268792 - }, - "lib/arm64-v8a/libxa-internal-api.so": { - "Size": 65312 - }, - "lib/arm64-v8a/libmono-btls-shared.so": { - "Size": 1613872 - }, - "lib/arm64-v8a/libmonosgen-2.0.so": { - "Size": 4050176 - }, - "lib/arm64-v8a/libmono-native.so": { - "Size": 707024 - }, - "META-INF/androidx.versionedparcelable_versionedparcelable.version": { - "Size": 6 - }, - "META-INF/androidx.lifecycle_lifecycle-runtime.version": { - "Size": 6 - }, - "META-INF/androidx.core_core.version": { - "Size": 6 - }, - "META-INF/androidx.customview_customview.version": { - "Size": 6 - }, - "META-INF/androidx.viewpager_viewpager.version": { - "Size": 6 - }, - "META-INF/androidx.vectordrawable_vectordrawable.version": { - "Size": 6 - }, - "META-INF/androidx.interpolator_interpolator.version": { - "Size": 6 - }, - "META-INF/androidx.vectordrawable_vectordrawable-animated.version": { - "Size": 6 - }, - "META-INF/androidx.savedstate_savedstate.version": { - "Size": 6 - }, - "META-INF/androidx.lifecycle_lifecycle-viewmodel.version": { - "Size": 6 - }, - "META-INF/androidx.arch.core_core-runtime.version": { - "Size": 6 - }, - "META-INF/androidx.lifecycle_lifecycle-livedata-core.version": { - "Size": 6 - }, - "META-INF/androidx.loader_loader.version": { - "Size": 6 - }, - "META-INF/androidx.activity_activity.version": { - "Size": 6 - }, - "META-INF/androidx.fragment_fragment.version": { - "Size": 6 - }, - "META-INF/androidx.transition_transition.version": { - "Size": 6 - }, - "META-INF/androidx.swiperefreshlayout_swiperefreshlayout.version": { - "Size": 6 - }, - "META-INF/androidx.slidingpanelayout_slidingpanelayout.version": { - "Size": 6 - }, - "META-INF/androidx.recyclerview_recyclerview.version": { - "Size": 6 - }, - "META-INF/androidx.print_print.version": { - "Size": 6 - }, - "META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version": { - "Size": 6 - }, - "META-INF/androidx.documentfile_documentfile.version": { - "Size": 6 - }, - "META-INF/androidx.legacy_legacy-support-core-utils.version": { - "Size": 6 - }, - "META-INF/androidx.drawerlayout_drawerlayout.version": { - "Size": 6 - }, - "META-INF/androidx.cursoradapter_cursoradapter.version": { - "Size": 6 - }, - "META-INF/androidx.coordinatorlayout_coordinatorlayout.version": { - "Size": 6 - }, - "META-INF/androidx.asynclayoutinflater_asynclayoutinflater.version": { - "Size": 6 - }, - "META-INF/androidx.legacy_legacy-support-core-ui.version": { - "Size": 6 - }, - "META-INF/androidx.cardview_cardview.version": { - "Size": 6 - }, - "META-INF/androidx.appcompat_appcompat-resources.version": { - "Size": 6 - }, - "META-INF/androidx.appcompat_appcompat.version": { - "Size": 6 - }, - "META-INF/android.support.design_material.version": { - "Size": 12 - }, - "META-INF/com.google.android.material_material.version": { - "Size": 10 - }, - "META-INF/androidx.media_media.version": { - "Size": 6 - }, - "META-INF/androidx.lifecycle_lifecycle-livedata.version": { - "Size": 6 - }, - "META-INF/androidx.legacy_legacy-support-v4.version": { - "Size": 6 - }, - "META-INF/androidx.browser_browser.version": { - "Size": 6 - }, - "META-INF/proguard/androidx-annotations.pro": { - "Size": 339 - }, - "META-INF/ANDROIDD.SF": { - "Size": 75858 - }, - "META-INF/ANDROIDD.RSA": { - "Size": 1213 - }, - "META-INF/MANIFEST.MF": { - "Size": 75731 } }, - "PackageSize": 9476254 + "PackageSize": 9484446 } \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/NdkTools/WithClang.cs b/src/Xamarin.Android.Build.Tasks/Utilities/NdkTools/WithClang.cs index 08c81ccab26..0c49e88361e 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/NdkTools/WithClang.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/NdkTools/WithClang.cs @@ -62,7 +62,7 @@ public override string GetToolPath (NdkToolKind kind, AndroidTargetArch arch, in public override string GetToolPath (string name, AndroidTargetArch arch, int apiLevel) { - return MakeToolPath ($"{GetArchTriple (arch)}-{name}"); + return MakeToolPath ($"{GetArchTriple (arch)}-{name}", mustExist: false); } public override string GetClangDeviceLibraryPath () @@ -99,11 +99,11 @@ protected string GetCompilerTriple (AndroidTargetArch arch) return arch == AndroidTargetArch.Arm ? "armv7a-linux-androideabi" : GetArchTriple (arch); } - protected string MakeToolPath (string toolName) + protected string MakeToolPath (string toolName, bool mustExist = true) { string toolPath = Path.Combine (GetToolchainDir (), "bin", toolName); - return GetExecutablePath (toolPath, mustExist: true)!; + return GetExecutablePath (toolPath, mustExist) ?? String.Empty; } protected string GetToolchainDir () diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/NdkTools/WithClangNoBinutils.cs b/src/Xamarin.Android.Build.Tasks/Utilities/NdkTools/WithClangNoBinutils.cs index c4b0bb98607..849f8ed9fca 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/NdkTools/WithClangNoBinutils.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/NdkTools/WithClangNoBinutils.cs @@ -14,8 +14,6 @@ public NdkToolsWithClangNoBinutils (string androidNdkPath, NdkVersion version, T { NdkToolNames[NdkToolKind.Linker] = "ld"; NoBinutils = true; - - throw new NotSupportedException ($"NDK {Version} is not supported by this version of Xamarin.Android"); } public override string GetToolPath (NdkToolKind kind, AndroidTargetArch arch, int apiLevel) @@ -31,12 +29,28 @@ public override string GetToolPath (NdkToolKind kind, AndroidTargetArch arch, in } } + public override string GetToolPath (string name, AndroidTargetArch arch, int apiLevel) + { + // The only triple-prefixed binaries in NDK r23+ are the compilers, and these are + // handled by the other GetToolPath overload. + + // Some tools might not have any prefix, let's check that first + string toolPath = MakeToolPath (name, mustExist: false); + if (!String.IsNullOrEmpty (toolPath)) { + return toolPath; + } + + // Otherwise, they might be prefixed with llvm- + return MakeToolPath ($"llvm-{name}"); + } + string GetEmbeddedToolPath (NdkToolKind kind, AndroidTargetArch arch) { string toolName = GetToolName (kind); string triple = GetArchTriple (arch); + string binutilsDir = Path.Combine (MonoAndroidHelper.GetOSBinPath (), "binutils"); - return $"[TODO]/{triple}-{toolName}"; + return GetExecutablePath (Path.Combine (binutilsDir, $"{triple}-{toolName}"), mustExist: true); } } } diff --git a/src/monodroid/CMakeLists.txt b/src/monodroid/CMakeLists.txt index df77ad2489a..26502caa72b 100644 --- a/src/monodroid/CMakeLists.txt +++ b/src/monodroid/CMakeLists.txt @@ -279,7 +279,6 @@ endif() if(ANDROID) add_compile_definitions(HAVE_LZ4) add_compile_definitions(PLATFORM_ANDROID) - add_compile_definitions(__ANDROID_API__=${ANDROID_NATIVE_API_LEVEL}) if(ANDROID_ABI MATCHES "^(arm64-v8a|x86_64)") add_compile_definitions(ANDROID64) diff --git a/tests/MSBuildDeviceIntegration/MSBuildDeviceIntegration.csproj b/tests/MSBuildDeviceIntegration/MSBuildDeviceIntegration.csproj index 9af5f8da79e..44ea1bb01cb 100644 --- a/tests/MSBuildDeviceIntegration/MSBuildDeviceIntegration.csproj +++ b/tests/MSBuildDeviceIntegration/MSBuildDeviceIntegration.csproj @@ -17,6 +17,7 @@ Utilities\%(FileName).cs +