java.lang.NoClassDefFoundError:解析失败:Lorg/apache/commons/logging/LogFactory

Moh*_*tif 15 android amazon-web-services android-proguard aws-sdk-android

类似的问题已经被要求了.但是由于Android平台兼容性的变化,这个似乎比以前的更复杂.

这是Pixel和Pixel2的错误日志,已注册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) 
Run Code Online (Sandbox Code Playgroud)

在运行Android 7.0及更低版本的设备上运行时,相同的代码完全正常.

我也尝试过为项目添加依赖项

implementation "commons-logging:commons-logging:1.2"
Run Code Online (Sandbox Code Playgroud)

添加此依赖项使应用程序在Pixel和Pixel中工作,但随后在所有其他设备中崩溃,并显示Exception

org.apache.commons.logging.impl.LogFactoryImpl does not extend or implement org.apache.commons.logging.LogFactory
Run Code Online (Sandbox Code Playgroud)

我已尝试在ProGuard中进行所有更改.这是我的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.*
Run Code Online (Sandbox Code Playgroud)

仍然导致崩溃.

此问题与Amazon AWS SDK有关 - https://github.com/aws/aws-sdk-android/issues/476

在AWS更新其SDK以解决此问题之前,是否有任何解决方法?

小智 29

将其添加到清单文件下面的行中。

<uses-library android:name ="org.apache.http.legacy" android:required ="false"/>
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢那些像我一样想知道 &lt;uses-library&gt; 将在清单中的何处使用的人:这将直接位于 &lt;application 标签下,&lt;activity&gt; 之上。 (3认同)

Roy*_*erg 24

这是一个AWS SDK错误,似乎在SDK的2.6.30版中得到了解决:

修复了使用Apache Commons Logging获取记录器会在启动Android 9.0(Pie/API Level 28)时崩溃的问题.见拉#521.现在,如果将Apache Commons Logging作为依赖项添加,将使用它,否则将使用android.util.Log.


Mal*_*com 7

为了解决这个问题,我 在gradle文件中有了依赖项 实现“ commons-logging:commons-logging-api:1.1”