web-dev-qa-db-fra.com

Android 9 crash de tarte (com.google.Android.gms ... ClassNotFoundException)

J'ai un jeu Unity3D publié sur Android, et cela a bien fonctionné jusqu'à présent. Cependant, le Android Vitals Dashboard signale maintenant beaucoup de plantages. Voici les informations détaillées:

By Android version: Android 9   4500    100.0%

Trace de la pile:

Java.lang.Error: FATAL EXCEPTION [Thread-360]
Unity version     : 2017.3.1p3
Device model      : Google Pixel
Device fingerprint: google/sailfish/sailfish:9/PQ2A.190305.002/5240760:user/release-keys
Caused by
  at lt.b (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:2)
  at ls.a (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:1)
  at lu.a (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:18)
  at com.google.Android.gms.ads.internal.util.ar.a (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:10)
  at kx.a (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:7)
  at kx.run (com.google.Android.gms.policy_ads_fdr_dynamite@[email protected]:2)
Caused by: Java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.Java:134)
  at Java.lang.ClassLoader.loadClass (ClassLoader.Java:379)
  at ac.loadClass (com.google.Android.gms.dynamite_dynamiteloader@[email protected] (100400-239467275):4)
  at Java.lang.ClassLoader.loadClass (ClassLoader.Java:312)

Ma AndroidResolverDependencies.xml fichier:

<dependencies>
  <packages>
    <package>com.Android.support:customtabs:[26.0.0, 27.2.0[</package>
    <package>com.Android.support:support-v4:[26.0.0, 27.2.0[</package>
    <package>com.google.Android.gms:play-services-ads:17.2.0</package>
    <package>com.google.Android.gms:play-services-analytics:11.8.0</package>
    <package>com.google.Android.gms:play-services-base:[10.2.1, 12.1.0[</package>
    <package>com.google.Android.gms:play-services-location:[10.2.1, 12.1.0[</package>
    <package>com.google.firebase:firebase-messaging:[10.2.1, 12.1.0[</package>
  </packages>
  <files>
    <file>Assets/Plugins/Android/android.Arch.core.common-1.1.0.jar</file>
    <file>Assets/Plugins/Android/android.Arch.core.runtime-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.Arch.lifecycle.common-1.1.0.jar</file>
    <file>Assets/Plugins/Android/android.Arch.lifecycle.livedata-core-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.Arch.lifecycle.runtime-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.Arch.lifecycle.viewmodel-1.1.0.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.customtabs-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-annotations-27.1.1.jar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-compat-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-core-ui-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-core-utils-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-fragment-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-media-compat-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.Android.support.support-v4-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-ads-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-ads-base-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-ads-identifier-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-ads-lite-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-analytics-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-analytics-impl-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-base-16.1.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-basement-16.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-gass-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-location-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-measurement-base-16.3.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-measurement-sdk-api-16.3.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-places-placereport-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-stats-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-tagmanager-v4-impl-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.Android.gms.play-services-tasks-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.auto.value.auto-value-annotations-1.6.jar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-common-16.1.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-iid-17.1.2.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-iid-interop-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-measurement-connector-17.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-messaging-17.6.0.aar</file>
  </files>
</dependencies>
Target API level: 28
Minimum API level: 16

J'ai vu un fil similaire dans groupe de discussion de Google AdMob suggérant d'ajouter ce qui suit au AndroidManifest.xml fichier:

<uses-library Android:name="org.Apache.http.legacy" Android:required="false" />

Toutefois:

  1. Je ne suis pas sûr que le problème soit causé par une API liée à Apache.
  2. Je crains que cela ne limite le nombre d'installations dans mon application, car elle sera disponible pour un public plus restreint sur Google Play en raison de la uses-library déclaration.
14
Eduardo Coelho

Selon changements de comportement: applications ciblant le niveau d'API 28 +

Obsolescence du client Apache HTTP

Avec Android 6.0, nous avons supprimé la prise en charge du client HTTP Apache. À partir de Android 9, cette bibliothèque est supprimée du bootclasspath et n'est pas disponible pour les applications par Pour continuer à utiliser le client HTTP Apache, les applications qui ciblent Android 9 et versions ultérieures peuvent ajouter les éléments suivants à leur AndroidManifest.xml:

<uses-library Android:name="org.Apache.http.legacy" Android:required="false"/>

Remarque: L'attribut Android: required = "false" est requis pour les applications qui ont un SDK minimum de 23 ou moins, car sur les appareils avec des niveaux d'API inférieurs de 24, la bibliothèque org.Apache.http.legacy n'est pas disponible. (Sur ces appareils, les classes Apache HTTP sont disponibles sur le bootclasspath.)

Au lieu d'utiliser la bibliothèque d'exécution Apache, les applications peuvent regrouper leur propre version de la bibliothèque org.Apache.http dans leur fichier APK. Si vous faites cela, vous devez reconditionner la bibliothèque (avec un utilitaire comme Jar Jar) pour éviter les problèmes de compatibilité de classe avec les classes fournies dans le runtime.

14
Saad Anees