Java 如何使用AmazonSClient避免Android 9中的应用程序崩溃?

Java 如何使用AmazonSClient避免Android 9中的应用程序崩溃?,java,android,amazon-web-services,apache-commons-logging,android-9.0-pie,Java,Android,Amazon Web Services,Apache Commons Logging,Android 9.0 Pie,在Android 9 API 28中,我的应用程序在API 26中创建新的AmazonSClient时崩溃,我没有收到任何错误: AmazonSNSClient pushClient = new AmazonSNSClient(credentialsProvider); 我的日志说: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/logging/LogFactory;

在Android 9 API 28中,我的应用程序在API 26中创建新的AmazonSClient时崩溃,我没有收到任何错误:

AmazonSNSClient pushClient = new AmazonSNSClient(credentialsProvider);
我的日志说:

    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/commons/logging/LogFactory;
        at com.amazonaws.AmazonWebServiceClient.<clinit>(AmazonWebServiceClient.java:55)
        at myapp.service.AWSMessagingService.createEndpoint(AWSMessagingService.java:170)
        at myapp.service.AWSMessagingService.registerWithSNS(AWSMessagingService.java:103)
        at myapp.service.PushNotificationService.sendRegistrationToAWS(PushNotificationService.java:109)
        at myapp.service.PushNotificationService.onNewToken(PushNotificationService.java:105)
        at com.google.firebase.messaging.FirebaseMessagingService.zzd(Unknown Source:86)
        at com.google.firebase.iid.zzg.run(Unknown Source:4)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at com.google.android.gms.common.util.concurrent.zza.run(Unknown Source:7)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.commons.logging.LogFactory" on path: DexPathList[[zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/base.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_dependencies_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_resources_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_0_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_1_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_2_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_3_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_4_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_5_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_6_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_7_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_8_apk.apk", zip file "/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/base.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_dependencies_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_resources_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_0_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_1_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_2_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_3_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_4_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_5_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_6_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_7_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_8_apk.apk!/lib/x86, /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_slice_9_apk.apk!/lib/x86, /system/lib]]
        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.AmazonWebServiceClient.<clinit>(AmazonWebServiceClient.java:55) 
        at myapp.service.AWSMessagingService.createEndpoint(AWSMessagingService.java:170) 
        at myapp.service.AWSMessagingService.registerWithSNS(AWSMessagingService.java:103) 
        at myapp.service.PushNotificationService.sendRegistrationToAWS(PushNotificationService.java:109) 
        at myapp.service.PushNotificationService.onNewToken(PushNotificationService.java:105) 
        at com.google.firebase.messaging.FirebaseMessagingService.zzd(Unknown Source:86) 
        at com.google.firebase.iid.zzg.run(Unknown Source:4) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at com.google.android.gms.common.util.concurrent.zza.run(Unknown Source:7) 
        at java.lang.Thread.run(Thread.java:764) 
2018-12-17 09:25:07.483 10291-10344/myapp E/AndroidRuntime:     Suppressed: java.io.IOException: No original dex files found for dex location /data/app/myapp-grqOb2dmxK1zDq9u44b9Rg==/split_lib_resources_apk.apk
        at dalvik.system.DexFile.openDexFileNative(Native Method)
        at dalvik.system.DexFile.openDexFile(DexFile.java:354)
        at dalvik.system.DexFile.<init>(DexFile.java:101)
        at dalvik.system.DexFile.<init>(DexFile.java:75)
        at dalvik.system.DexPathList.loadDexFile(DexPathList.java:394)
        at dalvik.system.DexPathList.makeDexElements(DexPathList.java:354)
        at dalvik.system.DexPathList.<init>(DexPathList.java:164)
        at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:74)
        at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65)
        at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64)
        at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:73)
        at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:88)
        at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:74)
        at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:40)
        at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:727)
        at android.app.LoadedApk.getClassLoader(LoadedApk.java:810)
        at android.app.LoadedApk.getResources(LoadedApk.java:1032)
        at android.app.ContextImpl.createAppContext(ContextImpl.java:2345)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5749)
        at android.app.ActivityThread.access$1100(ActivityThread.java:199)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        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)
与:

该应用程序现在运行良好,但我无法生成已签名的APK,因为我 DuplicatePlatformClasses错误:重复的平台类和 我的皮棉报告说:

commons日志定义了与现在的类冲突的类 由Android提供。解决方案包括查找更新的版本或 没有相同问题的替代库,例如, 对于httpclient,请改用HttpUrlConnection或okhttp,或 使用类似jar的东西重新打包库。有一个 不仅复制功能的库的数量 Android平台,但使用的类名与 在Android中提供-例如apache http类。这个可以 导致意外事故

要解决这个问题,您需要找到库的更新版本 它不再有这个问题,或者重新打包库和所有 使用类似于jarjar工具的东西来定义它的依赖关系,或者最后, 重写代码以使用不同的API,例如http代码, 考虑使用HTTurpLink或像OKHTTP这样的库。注:此 该问题在Android Studio中具有关联的快速修复操作,并且 IntelliJ想法。要抑制此错误,请使用问题id DuplicatePlatformClass,如抑制警告中所述 和错误部分

因此,我在我的项目文件夹的终端中运行了gradlew app:dependencies>dependencies.txt,发现com.amazonaws:aws android sdk sns:2.2.0使用commons logging:commons logging:1.1.1,但我也可以找到commons logging:commons logging:1.2,我想这是安卓提供的


那么为什么com.amazonaws:aws-android-sdk-sns:2.2.0不使用commons-logging:commons-logging:1.2,如果我排除commons-logging:commons-logging:1.1,那么我该如何解决这个问题呢?

我可以通过将com.amazonaws:aws-android-sdk-sns:2.2.0更新到我的com.amazonaws:aws-android-sdk-sns:2.9.1版本来解决这个问题

本期还跟踪了Android 9中的NoClassDefFoundError:

从不->更新。此问题已在SDK的2.6.30版本中修复。
implementation 'com.amazonaws:aws-android-sdk-sns:2.2.0', {
    exclude module: 'commons-logging'
}
implementation 'com.amazonaws:aws-android-sdk-sns:2.2.0'