Skip to content

MAUI incorrectly packs JAR dependencies into .nupkg #9974

@pavel-kuznetsov-hypertrack

Description

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)

Metadata

Metadata

Labels

Area: App+Library BuildIssues when building Library projects or Application projects.Area: BindingsIssues in Java Library Binding projects.

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions