Android 9.0 Didn't find class "org.apache.http.impl.cookie.DateUtils"

报错内容:

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/impl/cookie/DateUtils;
	at com.android.volley.toolbox.BasicNetwork.addCacheHeaders(BasicNetwork.java:199)
	at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:92)
	at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.impl.cookie.DateUtils" on path: DexPathList[[zip file "/data/app/com.sanwenyu.paidan-sPUh8CCXmH633ddyahW59A==/base.apk"],nativeLibraryDirectories=[/data/app/com.sanwenyu.paidan-sPUh8CCXmH633ddyahW59A==/lib/arm64, /system/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)
	... 3 more
java.lang.ClassNotFoundException: Didn't find class "org.apache.http.impl.cookie.DateUtils" on path: DexPathList[[zip file "/data/app/com.sanwenyu.paidan-sPUh8CCXmH633ddyahW59A==/base.apk"],nativeLibraryDirectories=[/data/app/com.sanwenyu.paidan-sPUh8CCXmH633ddyahW59A==/lib/arm64, /system/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.android.volley.toolbox.BasicNetwork.addCacheHeaders(BasicNetwork.java:199)
	at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:92)
	at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)

 Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories····

问题分析:在高版本的android系统删除了httpclient的使用,这里指的高版本是Android 9.0以上,以下的系统能够正常使用,我在项目中使用了volley网络框架,所以自然在高版本的系统中会出现这个错误!

解决方法一:

1、module的gradle的defaultConfig添加:

useLibrary("org.apache.http.legacy")

2、module的gradle的android节点添加:

 packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

3、module的gradle的dependencies节点添加:

 api 'org.apache.httpcomponents:httpclient:4.4.1'

 完整方式如下:

apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.butterknife'

android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "com.***.***"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 14
        versionName "3.0.2"
        useLibrary("org.apache.http.legacy")
    }
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
    //修改apk 的 文件名
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def date = new Date().format("yyyy_MM_dd_hh_mm", TimeZone.getTimeZone("GMT+08"))
            if (variant.buildType.name == "debug") {
                output.outputFileName = "${date}_arbitrator_v${android.defaultConfig.versionName}_debug_${android.defaultConfig.versionCode}.apk"
            } else if (variant.buildType.name == "release") {
                output.outputFileName = "appName_${android.defaultConfig.versionName}.apk"
            }
        }
    }

}


dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    api 'org.apache.httpcomponents:httpclient:4.4.1'
}

解决方法二:

在manifest文件中的application节点添加(推荐)

 <uses-library
                android:name="org.apache.http.legacy"
                android:required="false" />

参考链接:https://blog.csdn.net/zhe_ge_sha_shou/article/details/90313343

                  https://blog.csdn.net/qq_33721320/article/details/86620524

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值