diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/CompileToDalvik.cs b/src/Xamarin.Android.Build.Tasks/Tasks/CompileToDalvik.cs index 0b81c372a5c..bccfd9dcae3 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/CompileToDalvik.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/CompileToDalvik.cs @@ -114,7 +114,7 @@ protected override string GenerateCommandLineCommands () cmd.AppendSwitchIfNotNull ("--main-dex-list=", MultiDexMainDexListFile); } } - cmd.AppendSwitchIfNotNull ("--output ", Path.GetDirectoryName (ClassesOutputDirectory)); + cmd.AppendSwitchIfNotNull ("--output ", ClassesOutputDirectory); using (var sw = new StreamWriter (path: inputListFile, append: false, encoding: MonoAndroidHelper.UTF8withoutBOM)) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index 466c3e33287..15427edb555 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -677,5 +677,23 @@ public void CheckTheCorrectRuntimeAssemblyIsUsedFromNuget () Assert.IsTrue (xab.LastBuildOutput.ContainsText (expected), $"Build should be using {expected}"); } } + + [Test] + public void MissingDexFile () + { + //NOTE: The trailing / breaks + var parameters = new [] { "_AndroidIntermediateJavaClassDirectory=obj/Debug/android/bin/classes/" }; + var proj = new XamarinAndroidApplicationProject { + DexTool = "dx" + }; + using (var b = CreateApkBuilder ()) { + Assert.IsTrue (b.Build (proj, parameters: parameters), "Build should have succeeded."); + var apk = Path.Combine (Root, b.ProjectDirectory, + proj.IntermediateOutputPath, "android", "bin", "UnnamedProject.UnnamedProject.apk"); + using (var zip = ZipHelper.OpenZip (apk)) { + Assert.IsTrue (zip.ContainsEntry ("classes.dex"), "Apk should contain classes.dex"); + } + } + } } } diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 0a02bb119db..ac13b3cd027 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -1024,6 +1024,7 @@ because xbuild doesn't support framework reference assemblies. $(IntermediateOutputPath)generated $(IntermediateOutputPath)resourcecache <_AndroidIntermediateJavaSourceDirectory>$(IntermediateOutputPath)android\src\ + <_AndroidIntermediateDexOutputDirectory>$(IntermediateOutputPath)android\bin\ <_AndroidIntermediateJavaClassDirectory>$(IntermediateOutputPath)android\bin\classes\ <_AndroidIntermediateClassesZip>$(IntermediateOutputPath)android\bin\classes.zip <_AndroidAotBinDirectory>$(IntermediateOutputPath)aot @@ -2274,8 +2275,7 @@ because xbuild doesn't support framework reference assemblies. - <_DexFile Include="$(IntermediateOutputPath)android\bin\dex\*.dex" /> - <_DexFile Include="$(IntermediateOutputPath)android\bin\*.dex" /> + <_DexFile Include="$(_AndroidIntermediateDexOutputDirectory)*.dex" /> diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.D8.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.D8.targets index a92b6db9406..8744a3f43f4 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.D8.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.D8.targets @@ -36,7 +36,7 @@ Copyright (C) 2018 Xamarin. All rights reserved. - <_DexesToDelete Include="$(IntermediateOutputPath)android\bin\*.dex" /> + <_DexesToDelete Include="$(_AndroidIntermediateDexOutputDirectory)*.dex" /> @@ -52,7 +52,7 @@ Copyright (C) 2018 Xamarin. All rights reserved. JavaOptions="$(JavaOptions)" JarPath="$(AndroidR8JarPath)" AndroidManifestFile="$(IntermediateOutputPath)android\AndroidManifest.xml" - OutputDirectory="$(IntermediateOutputPath)android\bin" + OutputDirectory="$(_AndroidIntermediateDexOutputDirectory)" Debug="$(AndroidIncludeDebugSymbols)" JavaPlatformJarPath="$(JavaPlatformJarPath)" ClassesZip="$(_AndroidIntermediateClassesZip)" @@ -79,7 +79,7 @@ Copyright (C) 2018 Xamarin. All rights reserved. JavaOptions="$(JavaOptions)" JarPath="$(AndroidR8JarPath)" AndroidManifestFile="$(IntermediateOutputPath)android\AndroidManifest.xml" - OutputDirectory="$(IntermediateOutputPath)android\bin" + OutputDirectory="$(_AndroidIntermediateDexOutputDirectory)" Debug="$(AndroidIncludeDebugSymbols)" JavaPlatformJarPath="$(JavaPlatformJarPath)" ClassesZip="$(_AndroidIntermediateClassesZip)" @@ -92,7 +92,7 @@ Copyright (C) 2018 Xamarin. All rights reserved. - + diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.DX.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.DX.targets index 98159443d77..bb20d2b3aa5 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.DX.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.DX.targets @@ -71,7 +71,7 @@ Copyright (C) 2018 Xamarin. All rights reserved. - <_DexesToDelete Include="$(IntermediateOutputPath)android\bin\*.dex" /> + <_DexesToDelete Include="$(_AndroidIntermediateDexOutputDirectory)*.dex" /> @@ -82,7 +82,7 @@ Copyright (C) 2018 Xamarin. All rights reserved. JavaToolPath="$(JavaToolPath)" JavaMaximumHeapSize="$(JavaMaximumHeapSize)" JavaOptions="$(JavaOptions)" - ClassesOutputDirectory="$(_AndroidIntermediateJavaClassDirectory.TrimEnd('\'))" + ClassesOutputDirectory="$(_AndroidIntermediateDexOutputDirectory)" ClassesZip="$(_AndroidIntermediateClassesZip)" ToolPath="$(DxToolPath)" ToolExe="$(DxToolExe)" @@ -94,7 +94,7 @@ Copyright (C) 2018 Xamarin. All rights reserved. /> - +