Skip to content

Commit 4cdf1e0

Browse files
[Xamarin.Android.build.Tasks] <CheckDuplicateJavaLibraries/> ignores repackaged.jar (#8664)
Context: https://maven.google.com/androidx/emoji2/emoji2/1.4.0/emoji2-1.4.0.aar Context: https://maven.google.com/androidx/health/connect/connect-client/1.1.0-alpha07/connect-client-1.1.0-alpha07.aar When using the two AARs linked above, you get the build error: Xamarin.Android.Common.targets(845,3): error XA1014: JAR library references with identical file names but different contents were found: repackaged.jar. Please remove any conflicting libraries from EmbeddedJar, InputJar and AndroidJavaLibrary. They both contain `libs/repackaged.jar`, which I'm not able to find any information about. I can reproduce this problem in an MSBuild test. Unfortunately, the only way to workaround the error message is to: * Unzip the `.aar` * Rename `libs/repackaged.jar` to `libs/repackaged-emoji2-1.4.0.jar`, for example * Re-zip the `.aar` a9ca3d4 had a similar problem with `r-classes.jar`. Let's expand upon this change by introducing a private item group: <ItemGroup> <_AndroidExcludedDuplicateJavaLibraries Include="classes.jar" /> <_AndroidExcludedDuplicateJavaLibraries Include="r-classes.jar" /> <_AndroidExcludedDuplicateJavaLibraries Include="repackaged.jar" /> </ItemGroup> So if this occurs in the future, we can add future files to this list without rebuilding the Android workload.
1 parent 77ac82a commit 4cdf1e0

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

src/Xamarin.Android.Build.Tasks/Tasks/CheckDuplicateJavaLibraries.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@ namespace Xamarin.Android.Tasks
99
{
1010
public class CheckDuplicateJavaLibraries : AndroidTask
1111
{
12-
readonly static string [] ExcludedFiles = new [] {
13-
"classes.jar",
14-
"r-classes.jar",
15-
};
16-
1712
public override string TaskPrefix => "CDJ";
1813

1914
public ITaskItem [] JavaSourceFiles { get; set; }
2015
public ITaskItem[] JavaLibraries { get; set; }
2116
public ITaskItem[] LibraryProjectJars { get; set; }
17+
public string [] ExcludedFiles { get; set; }
2218

2319
public override bool RunTask ()
2420
{

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -780,31 +780,45 @@ public void LibraryProjectZipWithLint ()
780780
}
781781

782782
/// <summary>
783-
/// Tests two .aar files with r-classes.jar
783+
/// Tests two .aar files with r-classes.jar, repackaged.jar
784784
/// </summary>
785785
[Test]
786-
public void AarWithRClassesJar ()
786+
public void CheckDuplicateJavaLibraries ()
787787
{
788788
var path = Path.Combine ("temp", TestName);
789789
var lib1 = new XamarinAndroidBindingProject {
790790
ProjectName = "Library1",
791791
AndroidClassParser = "class-parse",
792792
Jars = {
793+
// r-classes.jar
793794
new AndroidItem.LibraryProjectZip ("Library1.aar") {
794795
BinaryContent = () => ResourceData.Library1Aar
795-
}
796+
},
797+
// repackaged.jar
798+
new AndroidItem.AndroidLibrary ("emoji2-1.4.0.aar") {
799+
MetadataValues = "Bind=false",
800+
WebContent = "https://maven.google.com/androidx/emoji2/emoji2/1.4.0/emoji2-1.4.0.aar",
801+
},
796802
},
797803
};
798804
var lib2 = new XamarinAndroidBindingProject {
799805
ProjectName = "Library2",
800806
AndroidClassParser = "class-parse",
801807
Jars = {
808+
// r-classes.jar
802809
new AndroidItem.LibraryProjectZip ("Library2.aar") {
803810
BinaryContent = () => ResourceData.Library2Aar
804-
}
811+
},
812+
// repackaged.jar
813+
new AndroidItem.AndroidLibrary ("connect-client-1.1.0-alpha07.aar") {
814+
MetadataValues = "Bind=false",
815+
WebContent = "https://maven.google.com/androidx/health/connect/connect-client/1.1.0-alpha07/connect-client-1.1.0-alpha07.aar",
816+
},
805817
},
806818
};
807-
var app = new XamarinAndroidApplicationProject ();
819+
var app = new XamarinAndroidApplicationProject {
820+
SupportedOSPlatformVersion = "30", // androidx.health requires minSdkVersion="30"
821+
};
808822
app.AddReference (lib1);
809823
app.AddReference (lib2);
810824
using (var lib1Builder = CreateDllBuilder (Path.Combine (path, lib1.ProjectName)))

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -882,10 +882,17 @@ because xbuild doesn't support framework reference assemblies.
882882
</Target>
883883

884884
<Target Name="_CheckDuplicateJavaLibraries" DependsOnTargets="_GetLibraryImports">
885+
<ItemGroup>
886+
<_AndroidExcludedDuplicateJavaLibraries Include="classes.jar" />
887+
<_AndroidExcludedDuplicateJavaLibraries Include="r-classes.jar" />
888+
<_AndroidExcludedDuplicateJavaLibraries Include="repackaged.jar" />
889+
</ItemGroup>
885890
<CheckDuplicateJavaLibraries
886891
JavaSourceFiles="@(AndroidJavaSource)"
887892
JavaLibraries="@(AndroidJavaLibrary)"
888-
LibraryProjectJars="@(ExtractedJarImports)" />
893+
LibraryProjectJars="@(ExtractedJarImports)"
894+
ExcludedFiles="@(_AndroidExcludedDuplicateJavaLibraries)"
895+
/>
889896
</Target>
890897

891898
<Target Name="_LintChecks" Condition=" '$(AndroidLintEnabled)' == 'True' ">

0 commit comments

Comments
 (0)