Skip to content

Commit 7cce305

Browse files
jonathanpeppersjonpryor
authored andcommitted
[Xamarin.Android.Build.Tasks] #deletebinobj going from 15.9 to master (#3172)
I was actively looking for #deletebinobj bugs, and tried a scenario: 1. Create the Master/Detail template from VS 2017 15.9 2. Build with VS 2017 15.9 3. Install/switch to VS 2019. 4. Build with VS 2019 16.2/master Unfortunately this hit a bug: Task CompileToDalvik ... Xamarin.Android.Common.targets(2805,3): java.lang.IllegalArgumentException: already added : Lmono/android/Seppuku; `Seppuku.java` was another file we missed when creating the `_CleanupOldStaticResources` target; see 5a9d1a6. I plan to make a new type of test for this scenario, but for now I updated the `RemoveOldMonoPackageManager()` to reproduce this issue.
1 parent 4fddacb commit 7cce305

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3712,27 +3712,37 @@ public void RemoveOldMonoPackageManager ()
37123712
"_CompileJava",
37133713
};
37143714
Assert.IsTrue (b.Output.IsTargetSkipped (targets [0]), $"`{targets [0]}` should be skipped.");
3715-
var oldMonoPackageManager = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", "mono", "MonoPackageManager.java");
3716-
var notifyTimeZoneChanges = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", "mono", "android", "app", "NotifyTimeZoneChanges.java");
3715+
var intermediate = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath);
3716+
var oldMonoPackageManager = Path.Combine (intermediate, "android", "src", "mono", "MonoPackageManager.java");
3717+
var seppuku = Path.Combine (intermediate, "android", "src", "mono", "android", "Seppuku.java");
3718+
var notifyTimeZoneChanges = Path.Combine (intermediate, "android", "src", "mono", "android", "app", "NotifyTimeZoneChanges.java");
3719+
Directory.CreateDirectory (Path.GetDirectoryName (seppuku));
37173720
Directory.CreateDirectory (Path.GetDirectoryName (notifyTimeZoneChanges));
37183721
File.WriteAllText (oldMonoPackageManager, @"package mono;
37193722
public class MonoPackageManager { }
37203723
class MonoPackageManager_Resources { }");
3724+
File.WriteAllText (seppuku, @"package mono.android;
3725+
public class Seppuku { }");
37213726
File.WriteAllText (notifyTimeZoneChanges, @"package mono.android.app;
37223727
public class ApplicationRegistration { }");
3723-
var oldMonoPackageManagerClass = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "bin", "classes" , "mono", "MonoPackageManager.class");
3728+
var oldMonoPackageManagerClass = Path.Combine (intermediate, "android", "bin", "classes" , "mono", "MonoPackageManager.class");
3729+
var seppukuClass = Path.Combine (intermediate, "android", "bin", "classes", "mono", "android", "Seppuku.class");
3730+
Directory.CreateDirectory (Path.GetDirectoryName (seppukuClass));
37243731
File.WriteAllText (oldMonoPackageManagerClass, "");
3732+
File.WriteAllText (seppukuClass, "");
37253733
Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
37263734
foreach (var target in targets) {
37273735
Assert.IsFalse (b.Output.IsTargetSkipped (target), $"`{target}` should *not* be skipped.");
37283736
}
37293737
// Old files that should *not* exist
37303738
FileAssert.DoesNotExist (oldMonoPackageManager);
37313739
FileAssert.DoesNotExist (oldMonoPackageManagerClass);
3740+
FileAssert.DoesNotExist (seppuku);
3741+
FileAssert.DoesNotExist (seppukuClass);
37323742
FileAssert.DoesNotExist (notifyTimeZoneChanges);
37333743
// New files that should exist
3734-
var monoPackageManager_Resources = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", "mono", "MonoPackageManager_Resources.java");
3735-
var monoPackageManager_ResourcesClass = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "bin", "classes", "mono", "MonoPackageManager_Resources.class");
3744+
var monoPackageManager_Resources = Path.Combine (intermediate, "android", "src", "mono", "MonoPackageManager_Resources.java");
3745+
var monoPackageManager_ResourcesClass = Path.Combine (intermediate, "android", "bin", "classes", "mono", "MonoPackageManager_Resources.class");
37363746
FileAssert.Exists (monoPackageManager_Resources);
37373747
FileAssert.Exists (monoPackageManager_ResourcesClass);
37383748
}

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1915,13 +1915,15 @@ because xbuild doesn't support framework reference assemblies.
19151915
<ItemGroup>
19161916
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\incrementaldeployment\MultiDexLoader.java" />
19171917
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\ResourcePatcher.java" />
1918+
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\Seppuku.java" />
19181919
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\MonoPackageManager.java" />
19191920
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\incrementaldeployment\IncrementalClassLoader.java" />
19201921
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\incrementaldeployment\Placeholder.java" />
19211922
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\app\NotifyTimeZoneChanges.java" />
19221923
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\incrementaldeployment\MonkeyPatcher.java" />
19231924
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\android\incrementaldeployment\MultiDexLoader.class" />
19241925
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\android\ResourcePatcher.class" />
1926+
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\android\Seppuku.class" />
19251927
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\MonoPackageManager.class" />
19261928
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\MonoPackageManager_Resources.class" />
19271929
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\android\incrementaldeployment\IncrementalClassLoader*.class" />

0 commit comments

Comments
 (0)