From 18444e4d8881d697082fbbca7c013c92207f93e8 Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Thu, 21 Jul 2016 20:37:30 +0900 Subject: [PATCH 1/3] [msbuild] switch to bundled multidex jar Android SDK had obsoleted multidex support components, so we'd rather embed the jar directly in our SDK. --- .../Xamarin.Android.Common.targets | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index acac9f4d6c4..007095aa2c2 100755 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -195,7 +195,8 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. False False - extras\android\support\multidex\library\libs\android-support-multidex.jar + + armeabi-v7a @@ -1072,7 +1073,11 @@ because xbuild doesn't support framework reference assemblies. + Condition="'$(AndroidEnableMultiDex)' == 'True' AND '$(AndroidMultiDexSupportJar)' != ''"> + + + From c947524a7b42083d4f695a5aeadcd958ec28d131 Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Fri, 22 Jul 2016 02:39:11 +0900 Subject: [PATCH 2/3] Copy android-support-multidex.jar into mandroid directory. What this change actually does are: - additionally download support m2repository in android-toolchains. - extract multidex jar from support multidex aar. - extend UnzipDirectoryChildren task to support non-children extraction. --- .../android-toolchain.projitems | 4 ++++ .../Xamarin.Android.Build.Tasks.targets | 20 +++++++++++++++++++ .../UnzipDirectoryChildren.cs | 6 +++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/build-tools/android-toolchain/android-toolchain.projitems b/build-tools/android-toolchain/android-toolchain.projitems index 2f14b9aee3b..14f3ff892dd 100644 --- a/build-tools/android-toolchain/android-toolchain.projitems +++ b/build-tools/android-toolchain/android-toolchain.projitems @@ -78,6 +78,10 @@ platforms\android-24 + + + extras\android\m2repository + <_NdkToolchain Include="arm-linux-androideabi-clang" Condition="$(AndroidSupportedTargetJitAbisForConditionalChecks.Contains(':armeabi:')) Or $(AndroidSupportedTargetJitAbisForConditionalChecks.Contains(':armeabi-v7a:'))"> diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets index 3428148fa7b..9259fe5033a 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets @@ -1,9 +1,17 @@ + <_SharedRuntimeBuildPath Condition=" '$(_SharedRuntimeBuildPath)' == '' ">..\..\bin\$(Configuration)\lib\xbuild-frameworks\MonoAndroid\ <_GeneratedProfileClass>$(IntermediateOutputPath)Profile.g.cs + + $(BuildDependsOn); + _CopyExtractedMultiDexJar; + + <_AndroidSdkLocation>$(ANDROID_SDK_PATH) + <_AndroidSdkLocation Condition="'$(_AndroidSdkLocation)'==''">$(AndroidToolchainDirectory)\sdk + <_MultiDexAarInAndroidSdk>extras\android\m2repository\com\android\support\multidex\1.0.1\multidex-1.0.1.aar <_SharedRuntimeAssemblies Include="$(_SharedRuntimeBuildPath)v1.0\*.dll;$(_SharedRuntimeBuildPath)$(AndroidFrameworkVersion)\*.dll"/> @@ -19,4 +27,16 @@ Lines="$(_GeneratedProfileClass)" Overwrite="false"/> + + + + + diff --git a/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/UnzipDirectoryChildren.cs b/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/UnzipDirectoryChildren.cs index 754e3422748..6ef31d6b0f5 100644 --- a/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/UnzipDirectoryChildren.cs +++ b/src/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/UnzipDirectoryChildren.cs @@ -29,6 +29,8 @@ public UnzipDirectoryChildren () [Required] public ITaskItem DestinationFolder { get; set; } + public bool NoSubdirectory { get; set; } + public override bool Execute () { Log.LogMessage (MessageImportance.Low, "Unzip:"); @@ -101,7 +103,9 @@ async TTask ExtractFile (string tempDir, string sourceFile, string relativeDestD p.WaitForExit (); } - foreach (var dir in Directory.EnumerateDirectories (nestedTemp, "*")) { + var dirs = NoSubdirectory ? new string [] { nestedTemp } : Directory.EnumerateDirectories (nestedTemp, "*"); + + foreach (var dir in dirs) { foreach (var fse in Directory.EnumerateFileSystemEntries (dir)) { var name = Path.GetFileName (fse); var destDir = string.IsNullOrEmpty (relativeDestDir) From fb44adb0cabc4b1cd68020eafc4fa48e82bc7890 Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Fri, 22 Jul 2016 17:52:17 +0900 Subject: [PATCH 3/3] Copy support library license file to lib/mandroid as MULTIDEX_JAR_LICENSE. It is to make it clear that the jar file is from Android SDK support library. --- .../Xamarin.Android.Build.Tasks.targets | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets index 9259fe5033a..ad517809e88 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets @@ -12,6 +12,7 @@ <_AndroidSdkLocation>$(ANDROID_SDK_PATH) <_AndroidSdkLocation Condition="'$(_AndroidSdkLocation)'==''">$(AndroidToolchainDirectory)\sdk <_MultiDexAarInAndroidSdk>extras\android\m2repository\com\android\support\multidex\1.0.1\multidex-1.0.1.aar + <_SupportLicenseInAndroidSdk>extras\android\m2repository\NOTICE.txt <_SharedRuntimeAssemblies Include="$(_SharedRuntimeBuildPath)v1.0\*.dll;$(_SharedRuntimeBuildPath)$(AndroidFrameworkVersion)\*.dll"/> @@ -29,8 +30,8 @@ + Inputs="$(_AndroidSdkLocation)\$(_MultiDexAarInAndroidSdk);$(_AndroidSdkLocation)\$(_SupportLicenseInAndroidSdk)" + Outputs="$(OutputPath)..\..\..\mandroid\android-support-multidex.jar;$(OutputPath)..\..\..\mandroid\MULTIDEX_JAR_LICENSE"> +