Why Google Cloud Translate API crashed on Android version 5 and 6?

Viewed 141

I used the Google Cloud Translate API in my app. But in Android 5 and 6 it does not work properly and the Firebase Crashlytics dashboard shows the following types of errors. In other Android versions it works properly and only 100% of the bugs occurred on Android 5 and 6.

Fatal Exception: java.lang.NoClassDefFoundError: com.google.cloud.translate.TranslateImpl$1
   at com.google.cloud.translate.TranslateImpl.<clinit>(TranslateImpl.java:44)
   at com.google.cloud.translate.TranslateOptions$DefaultTranslateFactory.create(TranslateOptions.java:59)
   at com.google.cloud.translate.TranslateOptions$DefaultTranslateFactory.create(TranslateOptions.java:53)
   at com.google.cloud.ServiceOptions.getService(ServiceOptions.java:540)
   at com.codeboxlk.translator.di.NetworkModule$provideTranslateClient$translateService$2.invoke(NetworkModule.java:66)
   at com.codeboxlk.translator.di.NetworkModule$provideTranslateClient$translateService$2.invoke(NetworkModule.java:62)
   at kotlin.SynchronizedLazyImpl.getValue(SynchronizedLazyImpl.java:74)
   at com.codeboxlk.translator.di.NetworkModule.provideTranslateClient$lambda-0(NetworkModule.java:62)
   at com.codeboxlk.translator.di.NetworkModule.provideTranslateClient(NetworkModule.java:69)
   at com.codeboxlk.translator.di.NetworkModule_ProvideTranslateClientFactory.provideTranslateClient(NetworkModule_ProvideTranslateClientFactory.java:38)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC.translateClient(DaggerApp_HiltComponents_SingletonC.java:239)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC.access$5000(DaggerApp_HiltComponents_SingletonC.java:141)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC$SwitchingProvider.get(DaggerApp_HiltComponents_SingletonC.java:1146)
   at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC$ViewModelCImpl.translateRepository(DaggerApp_HiltComponents_SingletonC.java:906)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC$ViewModelCImpl.access$3200(DaggerApp_HiltComponents_SingletonC.java:867)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider.get(DaggerApp_HiltComponents_SingletonC.java:994)
   at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC$ViewModelCImpl.translateViewModel(DaggerApp_HiltComponents_SingletonC.java:946)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC$ViewModelCImpl.access$4000(DaggerApp_HiltComponents_SingletonC.java:867)
   at com.codeboxlk.translator.DaggerApp_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider.get(DaggerApp_HiltComponents_SingletonC.java:1018)
   at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory$1.create(HiltViewModelFactory.java:100)
   at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69)
   at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:84)
   at dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:109)
   at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
   at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
   at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.java:54)
   at androidx.lifecycle.ViewModelLazy.getValue(ViewModelLazy.java:41)
   at com.codeboxlk.translator.ui.translate.TranslateFragment.<clinit>(TranslateFragment.java:108)
   at com.codeboxlk.translator.ui.translate.TranslateFragment.onViewCreated(TranslateFragment.java:175)
   at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2987)
   at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:546)
   at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
   at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
   at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
   at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
   at androidx.fragment.app.FragmentManager.dispatchViewCreated(FragmentManager.java:3065)
   at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2988)
   at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:546)
   at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
   at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
   at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
   at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
   at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072)
   at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:251)
   at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:501)
   at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246)
   at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1266)
   at android.app.Activity.performStart(Activity.java:6943)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3277)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3416)
   at android.app.ActivityThread.access$1100(ActivityThread.java:229)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:7326)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

I've created a translation service like the following:

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {

    @Provides
    @Singleton
    fun provideTranslateClient(@ApplicationContext context: Context): TranslateClient {
        val headers: Map<String, String> = ImmutableMap.of(
            "X-Android-Package", context.packageName,
            "X-Android-Cert", (context.getApplicationSignature()[0])
        )

        val policy = StrictMode.ThreadPolicy.Builder().permitAll().build()
        StrictMode.setThreadPolicy(policy)

        val translateService: Translate by lazy {
            TranslateOptions.newBuilder()
                .setApiKey(context.getString(R.string.path))
                .setHeaderProvider { headers }
                .build().service
        }

        return TranslateClient(context, translateService)
    }
}
1 Answers
Related