support 中v四、v7庫版本錯誤詳解

因爲supportv4v7庫版本不一致,可能會引發一下錯誤。java

錯誤信息

java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorCompatHelper; at android.support.v7.widget.DefaultItemAnimator.resetAnimation(DefaultItemAnimator.java:515) at android.support.v7.widget.DefaultItemAnimator.animateMove(DefaultItemAnimator.java:255) at android.support.v7.widget.SimpleItemAnimator.animatePersistence(SimpleItemAnimator.java:126) at android.support.v7.widget.RecyclerView$4.processPersistent(RecyclerView.java:536) at android.support.v7.widget.ViewInfoStore.process(ViewInfoStore.java:241) at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3653) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3323) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844) 2018-10-10 10:08:39.478 7341-7341/com.hzy.test E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.animation.AnimatorCompatHelper" on path: DexPathList[[zip file "/data/app/com.hzy.test-2/base.apk"],nativeLibraryDirectories=[/data/app/com.hzy.test-2/lib/arm64, /data/app/com.hzy.test-2/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:380) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) ... 56 moreandroid

通過錯誤日誌的分析,總結出一個規律,凡是出現android/support/v4/中找不到類或者方法,能夠肯定是依賴了多個不一樣版本的support庫,均可以使用下面介紹的方法來解決。git

緣由

由於某個模塊的不一樣版本同時被依賴時,默認使用新版本,gradle同步時不會報錯。但在運行時就會報錯。github

查看庫的依賴樹

要解決問題,就要找到哪一個庫使用了對應的版本庫,能夠使用以下命令查看。bash

gradlew :app:dependencies
複製代碼

解決

針對以上問題,能夠有以下解決方法:app

1. 排除依賴中的指定包

implementation ('com.yanzhenjie:recyclerview-swipe:1.1.4') {
    exclude group: 'com.android.support'
}
複製代碼

2. force強制設置某個模塊的版本

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:24.1.0'
    }
}
複製代碼

或者ide

com.android.support包名的庫版本都是用24.1.0post

configurations.all {
   resolutionStrategy.eachDependency { DependencyResolveDetails details ->
       def requested = details.requested
       if (requested.group == 'com.android.support') {
           if (!requested.name.startsWith("multidex")) {
               details.useVersion '24.1.0'
           }
       }
   }
}
複製代碼

若是以上方法不能解決您的問題,你能夠聯繫我。gradle






About Mespa

相關文章
相關標籤/搜索