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

3 files changed

Lines changed: 28 additions & 11 deletions

File tree

‎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
publicclassCheckDuplicateJavaLibraries:AndroidTask
1111
{
12-
readonlystaticstring[]ExcludedFiles=new[]{
13-
"classes.jar",
14-
"r-classes.jar",
15-
};
16-
1712
publicoverridestringTaskPrefix=>"CDJ";
1813

1914
publicITaskItem[]JavaSourceFiles{get;set;}
2015
publicITaskItem[]JavaLibraries{get;set;}
2116
publicITaskItem[]LibraryProjectJars{get;set;}
17+
publicstring[]ExcludedFiles{get;set;}
2218

2319
publicoverrideboolRunTask()
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-
publicvoidAarWithRClassesJar()
786+
publicvoidCheckDuplicateJavaLibraries()
787787
{
788788
varpath=Path.Combine("temp",TestName);
789789
varlib1=newXamarinAndroidBindingProject{
790790
ProjectName="Library1",
791791
AndroidClassParser="class-parse",
792792
Jars={
793+
// r-classes.jar
793794
newAndroidItem.LibraryProjectZip("Library1.aar"){
794795
BinaryContent=()=>ResourceData.Library1Aar
795-
}
796+
},
797+
// repackaged.jar
798+
newAndroidItem.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
varlib2=newXamarinAndroidBindingProject{
799805
ProjectName="Library2",
800806
AndroidClassParser="class-parse",
801807
Jars={
808+
// r-classes.jar
802809
newAndroidItem.LibraryProjectZip("Library2.aar"){
803810
BinaryContent=()=>ResourceData.Library2Aar
804-
}
811+
},
812+
// repackaged.jar
813+
newAndroidItem.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-
varapp=newXamarinAndroidApplicationProject();
819+
varapp=newXamarinAndroidApplicationProject{
820+
SupportedOSPlatformVersion="30",// androidx.health requires minSdkVersion="30"
821+
};
808822
app.AddReference(lib1);
809823
app.AddReference(lib2);
810824
using(varlib1Builder=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
<TargetName="_CheckDuplicateJavaLibraries"DependsOnTargets="_GetLibraryImports">
885+
<ItemGroup>
886+
<_AndroidExcludedDuplicateJavaLibrariesInclude="classes.jar" />
887+
<_AndroidExcludedDuplicateJavaLibrariesInclude="r-classes.jar" />
888+
<_AndroidExcludedDuplicateJavaLibrariesInclude="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
<TargetName="_LintChecks"Condition=" '$(AndroidLintEnabled)' == 'True' ">

0 commit comments

Comments
 (0)