googlesamples / mlkit

A collection of sample apps to demonstrate how to use Google's ML Kit APIs on Android and iOS
Apache License 2.0
3.5k stars 2.92k forks source link

[Bug report] ML Kit crash with dynamic feature module (conditional delivery) #457

Open SaraTalaat91 opened 2 years ago

SaraTalaat91 commented 2 years ago

I'm working on a feature that utilizes ML Kit Translation, and since this feature is only available for a specific country, I've moved the implementation for this feature along with ML Kit dependency to a dynamic feature module and set the delivery in the manifest to be conditional according to the user's country.

I've followed this guide to move the ML Kit by adding support dependency in the base app build.gradle file:

dependencies {
implementation 'com.google.mlkit:playstore-dynamic-feature-support:16.0.0-beta2'
}

After doing so, the application started to crash on app open if the condition is met and the feature module is included at install time, otherwise everything works fine.

Here's the log for the crash:

   java.lang.RuntimeException: Unable to get provider com.google.mlkit.common.internal.MlKitInitProvider: com.google.firebase.components.MissingDependencyException: Unsatisfied dependency for component Component<[class com.google.android.gms.internal.mlkit_translate.zzxa]>{0, type=0, deps=[Dependency{anInterface=class com.google.mlkit.common.sdkinternal.SharedPrefManager, type=required, injection=direct}, Dependency{anInterface=class com.google.android.gms.internal.mlkit_translate.zzwx, type=required, injection=direct}]}: class com.google.mlkit.common.sdkinternal.SharedPrefManager

 Caused by: com.google.firebase.components.MissingDependencyException: Unsatisfied dependency for component Component<[class com.google.android.gms.internal.mlkit_translate.zzxa]>{0, type=0, deps=[Dependency{anInterface=class com.google.mlkit.common.sdkinternal.SharedPrefManager, type=required, injection=direct}, Dependency{anInterface=class com.google.android.gms.internal.mlkit_translate.zzwx, type=required, injection=direct}]}: class com.google.mlkit.common.sdkinternal.SharedPrefManager

SDK Info: com.google.mlkit:translate:16.1.2

zhouyiself commented 2 years ago

playstore-dynamic-feature-support lib is for on-demand delivery and may not needed for conditional delivery. What if you remove this lib dependency and just use ML Kit in the regular way in your dynamic feature module?

SaraTalaat91 commented 2 years ago

@zhouyiself Though we are using conditional delivery to deliver this feature according to user's country, we also need to provide on demand delivery if the user changes country from within application. This is why we need to deliver this feature either conditional or on demand. It'd be really nice if the support library was flexible enough to be used for this case.