报错内容:
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.youkuaiyun.com/zhe_ge_sha_shou/article/details/90313343
https://blog.youkuaiyun.com/qq_33721320/article/details/86620524