web-dev-qa-db-ja.com

java.lang.NoClassDefFoundError:次の解決に失敗しました:Lorg / Apache / commons / logging / LogFactory

同様の質問はすでに尋ねられている必要があります。ただし、これはAndroid Platforms。の互換性の変更により、以前のものよりも複雑に思われます。

Android Beta ProgramにサインアップされているPixelおよびPixel2からのエラーログを次に示します。

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) 

Android 7.0以前を実行しているデバイスで実行した場合、同じコードは完全に正常に動作します。

私も自分のプロジェクトに依存関係を追加しようとしました

implementation "commons-logging:commons-logging:1.2"

この依存関係を追加すると、アプリはPixelおよびPixelで動作しますが、例外を言って他のすべてのデバイスでクラッシュします

org.Apache.commons.logging.impl.LogFactoryImpl does not extend or implement org.Apache.commons.logging.LogFactory

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.*

それでもクラッシュの原因です。

この問題はAmazon AWS SDKに関連しています- https://github.com/aws/aws-sdk-Android/issues/476

AWSがSDKを更新してこの問題を修正するまで、回避策はありますか?

14
Mohammed Atif

これはAWS SDKのバグで、 SDKのバージョン2.6. で解決されているようです。

Apache Commons Loggingを使用してロガーを取得するとクラッシュするバグを修正しましたAndroid 9.0(Pie/API Level 28)。プル#521を参照してください。依存関係として、それ以外の場合はAndroid.util.Logが使用されます。

23
Roy Solberg

マニフェストファイルに次の行を追加します。

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

この問題を修正するために、gradleファイルに依存関係実装 "commons-logging:commons-logging-api:1.1"がありました。

3
Malcom

別の回避策は、implementationを使用する代わりに_commons-logging_ライブラリを_.jar_ファイルとして_libs/_フォルダーに追加することです。 implementation fileTree(include: ['*.jar'], dir: 'libs')が依存関係にあることを確認してください。

_commons-logging-1.2.jar_のソース:

  1. Mavenリポジトリ
  2. Apache Commons Logging

クレジット:Dale Lim- https://github.com/aws/aws-sdk-Android/issues/265#issuecomment-411978696

1
m00head