Des questions similaires ont déjà été posées. Mais celui-ci semble être plus compliqué que les précédents en raison de changements dans la compatibilité des plates-formes Android.
Voici mon journal des erreurs de Pixel et Pixel2 qui sont inscrits au programme Android Beta
08-16 13:20:53.146 9630-9630/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: me.project.Android.dev, PID: 9630
Java.lang.NoClassDefFoundError: Failed resolution of: Lorg/Apache/commons/logging/LogFactory;
at com.amazonaws.util.VersionInfoUtils.<clinit>(VersionInfoUtils.Java:41)
at com.amazonaws.util.VersionInfoUtils.c(VersionInfoUtils.Java:77)
at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.Java:43)
//project specific class reference removed
at Android.os.Handler.handleCallback(Handler.Java:873)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:193)
at Android.app.ActivityThread.main(ActivityThread.Java:6669)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:493)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:858)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "org.Apache.commons.logging.LogFactory" on path: DexPathList[[Zip file "/data/app/me.project.Android.dev-0SPRJnc8-4voauRU7Y20zQ==/base.apk"],nativeLibraryDirectories=[/data/app/me.project.Android.dev-0SPRJnc8-4voauRU7Y20zQ==/lib/arm64, /data/app/me.project.Android.dev-0SPRJnc8-4voauRU7Y20zQ==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:134)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:379)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:312)
at com.amazonaws.util.VersionInfoUtils.<clinit>(VersionInfoUtils.Java:41)
at com.amazonaws.util.VersionInfoUtils.c(VersionInfoUtils.Java:77)
at com.amazonaws.ClientConfiguration.<clinit>(ClientConfiguration.Java:43)
//project specific class reference removed
at Android.os.Handler.handleCallback(Handler.Java:873)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:193)
at Android.app.ActivityThread.main(ActivityThread.Java:6669)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:493)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:858)
Même code lorsqu'il est exécuté sur des appareils fonctionnant sous Android 7.0 et versions ultérieures, il fonctionne parfaitement.
J'ai aussi essayé d'ajouter de la dépendance à mon projet
implementation "commons-logging:commons-logging:1.2"
L'ajout de cette dépendance permet à l'application de fonctionner dans Pixel et Pixel, mais se bloque ensuite dans tous les autres appareils avec le mot Exception
org.Apache.commons.logging.impl.LogFactoryImpl does not extend or implement org.Apache.commons.logging.LogFactory
J'ai déjà essayé de faire tous les changements dans ProGuard. Voici ma configuration proguard
-keep class org.Apache.commons.logging.impl.LogFactoryImpl
-keep class org.Apache.commons.logging.LogFactory
-keepnames class org.Apache.commons.logging.impl.* {*;}
-keepnames class org.Apache.commons.logging.*
-keepclassmembers class org.Apache.commons.logging.impl.* {*;}
-keepclassmembers class org.Apache.commons.logging.*
-keepnames interface org.Apache.commons.logging.impl.* {*;}
-keepnames interface org.Apache.commons.logging.*
Toujours à l'origine du crash.
Ce problème est lié à Amazon AWS SDK - https://github.com/aws/aws-sdk-Android/issues/476
Existe-t-il une solution de rechange jusqu'à ce que AWS mette à jour son SDK pour résoudre ce problème?
Il s'agit d'un bogue AWS SDK qui semble avoir été résolu dans version 2.6.30 du SDK :
Correction d'un bug qui permettait d'obtenir un enregistreur utilisant Apache Commons Logging crash à partir d'Android 9.0 (niveau Pie/API 28) Voir tirage # 521. À présent, Apache Commons Logging serait utilisé s'il était ajouté en tant que dépendance, sinon Android.util.Log sera utilisé.
Ajoutez cette ligne ci-dessous dans le fichier manifeste.
<uses-library Android:name ="org.Apache.http.legacy" Android:required ="false"/>
Une autre solution consiste à ajouter la bibliothèque commons-logging
en tant que fichier .jar
à votre dossier libs/
au lieu d'utiliser implementation
. Assurez-vous que implementation fileTree(include: ['*.jar'], dir: 'libs')
est dans vos dépendances.
Sources de commons-logging-1.2.jar
:
Credit: Dale Lim - https://github.com/aws/aws-sdk-Android/issues/265#issuecomment-411978696