Thanks to visit codestin.com
Credit goes to github.com

Skip to content

MAUI incorrectly packs JAR dependencies into .nupkg #9974

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
pavel-kuznetsov-hypertrack opened this issue Mar 26, 2025 · 1 comment
Open
Assignees
Labels
Area: App+Library Build Issues when building Library projects or Application projects. Area: Bindings Issues in Java Library Binding projects.
Milestone

Comments

@pavel-kuznetsov-hypertrack
Copy link

pavel-kuznetsov-hypertrack commented Mar 26, 2025

Description

It seems that MAUI incorrectly packs JAR dependencies into .nupkg (if adding with AndroidMavenLibrary).
The dependencies that provide AARs works fine. If adding the project locally from the folder, it also works fine.

Steps to Reproduce

  • Add JAR library to Android Binding project (in the current example: org.jetbrains.kotlinx:kotlinx-serialization-json-jvm)
  • Build sdk-maui project (just -f sdk-maui/justfile build-android)
  • Create a release package (just -f sdk-maui/justfile release)
  • Add the package to quickstart-maui project (just -f quickstart-maui/justfile add-local-release)
  • Run the quickstart-maui project (just -f quickstart-maui/justfile run-android)

Expected result: The app is working, white screen is displayed

Actual result: The app crashes with the following error:

java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Lkotlinx/serialization/json/Json;

Link to public reproduction project repository

https://github.com/pavel-kuznetsov-hypertrack/maui-jar-issue-repro

Version with bug

9.0.14 SR1.4

Is this a regression from previous behavior?

Not sure, did not test other versions

Last version that worked well

Unknown/Other

Affected platforms

Android

Affected platform versions

No response

Did you find any workaround?

If you uncomment
<AndroidMavenLibrary Include="org.jetbrains.kotlinx:kotlinx-serialization-json-jvm" Version="1.3.3" Bind="false" Condition="'$(TargetFramework)' == 'net9.0-android'" />
line in quickstart-maui/QuickstartMaui.csproj and build the project again, the app will work correctly.

Relevant log output

Process: com.mycompany.myapp, PID: 8497
                 java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Lkotlinx/serialization/json/Json;
                 	at android.app.ActivityThread.installProvider(ActivityThread.java:8297)
                 	at android.app.ActivityThread.installContentProviders(ActivityThread.java:7807)
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7488)
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2416)
                 	at android.os.Handler.dispatchMessage(Handler.java:107)
                 	at android.os.Looper.loopOnce(Looper.java:232)
                 	at android.os.Looper.loop(Looper.java:317)
                 	at android.app.ActivityThread.main(ActivityThread.java:8705)
                 	at java.lang.reflect.Method.invoke(Native Method)
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
                 Caused by: androidx.startup.StartupException: java.lang.NoClassDefFoundError: Failed resolution of: Lkotlinx/serialization/json/Json;
                 	at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238)
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206)
                 	at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45)
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2644)
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2613)
                 	at android.app.ActivityThread.installProvider(ActivityThread.java:8292)
                 	at android.app.ActivityThread.installContentProviders(ActivityThread.java:7807) 
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7488) 
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2416) 
                 	at android.os.Handler.dispatchMessage(Handler.java:107) 
                 	at android.os.Looper.loopOnce(Looper.java:232) 
                 	at android.os.Looper.loop(Looper.java:317) 
                 	at android.app.ActivityThread.main(ActivityThread.java:8705) 
                 	at java.lang.reflect.Method.invoke(Native Method) 
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) 
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886) 
                 Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lkotlinx/serialization/json/Json;
                 	at com.hypertrack.sdk.android.JsonKt.tryFromJsonObjectString(Json.kt:172)
                 	at com.hypertrack.sdk.android.runtime.LocationServicesKt.registerLocationServices(LocationServices.kt:37)
                 	at com.hypertrack.sdk.android.runtime.LocationServicesKt.registerLocationServices$default(LocationServices.kt:22)
                 	at com.hypertrack.sdk.android.HyperTrack.registerLocationService(HyperTrack.kt:391)
                 	at com.hypertrack.sdk.android.location.services.GoogleLocationServices.<init>(GoogleLocationServices.kt:37)
                 	at com.hypertrack.sdk.android.location.services.HyperTrackGoogleLocationServicesInitilalizer.create(HyperTrackGoogleLocationServicesInitilalizer.kt:8)
                 	at com.hypertrack.sdk.android.location.services.HyperTrackGoogleLocationServicesInitilalizer.create(HyperTrackGoogleLocationServicesInitilalizer.kt:7)
                 	at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238) 
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206) 
                 	at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45) 
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2644) 
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2613) 
                 	at android.app.ActivityThread.installProvider(ActivityThread.java:8292) 
                 	at android.app.ActivityThread.installContentProviders(ActivityThread.java:7807) 
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7488) 
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2416) 
                 	at android.os.Handler.dispatchMessage(Handler.java:107) 
                 	at android.os.Looper.loopOnce(Looper.java:232) 
                 	at android.os.Looper.loop(Looper.java:317) 
                 	at android.app.ActivityThread.main(ActivityThread.java:8705) 
                 	at java.lang.reflect.Method.invoke(Native Method) 
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) 
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886) 
                 Caused by: java.lang.ClassNotFoundException: Didn't find class "kotlinx.serialization.json.Json" on path: DexPathList[[zip file "/data/app/~~bD42s7R0hEDzMugXpIetlA==/com.mycompany.myapp-dS-OB30uQOZqSyMb4Jp0Ow==/base.apk"],nativeLibraryDirectories=[/data/app/~~bD42s7R0hEDzMugXpIetlA==/com.mycompany.myapp-dS-OB30uQOZqSyMb4Jp0Ow==/lib/arm64, /data/app/~~bD42s7R0hEDzMugXpIetlA==/com.mycompany.myapp-dS-OB30uQOZqSyMb4Jp0Ow==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
                 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
                 	at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
                 	at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
                 	at com.hypertrack.sdk.android.JsonKt.tryFromJsonObjectString(Json.kt:172) 
                 	at com.hypertrack.sdk.android.runtime.LocationServicesKt.registerLocationServices(LocationServices.kt:37) 
                 	at com.hypertrack.sdk.android.runtime.LocationServicesKt.registerLocationServices$default(LocationServices.kt:22) 
                 	at com.hypertrack.sdk.android.HyperTrack.registerLocationService(HyperTrack.kt:391) 
                 	at com.hypertrack.sdk.android.location.services.GoogleLocationServices.<init>(GoogleLocationServices.kt:37) 
                 	at com.hypertrack.sdk.android.location.services.HyperTrackGoogleLocationServicesInitilalizer.create(HyperTrackGoogleLocationServicesInitilalizer.kt:8) 
                 	at com.hypertrack.sdk.android.location.services.HyperTrackGoogleLocationServicesInitilalizer.create(HyperTrackGoogleLocationServicesInitilalizer.kt:7) 
                 	at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180) 
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:238) 
                 	at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:206) 
                 	at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:45) 
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2644) 
                 	at android.content.ContentProvider.attachInfo(ContentProvider.java:2613) 
                 	at android.app.ActivityThread.installProvider(ActivityThread.java:8292) 
                 	at android.app.ActivityThread.installContentProviders(ActivityThread.java:7807) 
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7488) 
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) 
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2416) 
                 	at android.os.Handler.dispatchMessage(Handler.java:107) 
                 	at android.os.Looper.loopOnce(Looper.java:232) 
                 	at android.os.Looper.loop(Looper.java:317) 
                 	at android.app.ActivityThread.main(ActivityThread.java:8705) 
                 	at java.lang.reflect.Method.invoke(Native Method) 
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) 
                 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
@jfversluis jfversluis transferred this issue from dotnet/maui Mar 26, 2025
@dotnet-policy-service dotnet-policy-service bot added the needs-triage Issues that need to be assigned. label Mar 26, 2025
@jpobst jpobst removed the t/bug label Apr 1, 2025
@jpobst
Copy link
Contributor

jpobst commented Apr 3, 2025

  • dotnet new android-bindinglib
  • Add <AndroidMavenLibrary Include="org.jetbrains.kotlinx:kotlinx-serialization-json-jvm" Version="1.3.3" Bind="false" VerifyDependencies="false" />
  • dotnet pack

Results in the kotlinx-serialization-json-jvm-1.3.3.jar being correctly written inside the <project>.aar (195KB) next to the <project.dll>:

Image

Next:

  • Add <PackageReference Include="Xamarin.Firebase.Messaging" Version="123.1.1.1" />
  • Delete obj/bin
  • dotnet pack

Now kotlinx-serialization-json-jvm-1.3.3.jar is no longer in the <project>.aar (3KB):

Image

Note this only happens with dotnet pack, dotnet build works correctly.

This appears to be a duplicate of #9305, however maybe this simplified test case will help.

@jpobst jpobst added Area: App+Library Build Issues when building Library projects or Application projects. Area: Bindings Issues in Java Library Binding projects. and removed needs-triage Issues that need to be assigned. labels Apr 3, 2025
@jpobst jpobst added this to the .NET 10 milestone Apr 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: App+Library Build Issues when building Library projects or Application projects. Area: Bindings Issues in Java Library Binding projects.
Projects
None yet
Development

No branches or pull requests

4 participants