'java.lang.ClassNotFoundException:在迁移到目标API级别28之后找不到类“ org.apache.http.client.ClientProtocolException”'

时间:2020-03-03 16:19:39

标签: android api android-studio android-appcompat

首先,对不起,英语不好。

伙计们,我有一个带有Minsdk 14和compil / target 22的旧项目。我确实更改为28,以便在Google Play中上传。将java文件中的所有内容更改为AppCompatActivity并导入。但是apk有问题。

代码没有错误,'run'app也没有错误。但是该应用程序无法打开,每次都会出错。

新gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion "29.0.3"
    compileOptions.encoding = 'windows-1251' //кодировка
    defaultConfig {
        applicationId "com.my.app"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

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

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

新的Java示例

package com.my.app;

import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;

public class Activity extends AppCompatActivity implements View.OnClickListener {

老摇篮

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.1'
    compileOptions.encoding = 'windows-1251' //кодировка
    defaultConfig {
        applicationId "com.my.app"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:support-v4:22.2.0'
    compile 'com.google.android.gms:play-services:7.5.0'
    compile files('libs/Parse-1.9.3.jar')
    compile files('libs/bolts-android-1.2.0.jar')
}

旧的Java示例

package com.my.app;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class Activity extends ActionBarActivity implements View.OnClickListener {

看到并在运行中

    E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-3
        Process: com.my,app, PID: 30993
        java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/client/ClientProtocolException;
            at com.parse.ParseRequest$2.then(ParseRequest.java:195)
            at com.parse.ParseRequest$2.then(ParseRequest.java:190)
            at bolts.Task$14.run(Task.java:796)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
            at java.lang.Thread.run(Thread.java:764)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.client.ClientProtocolException" on path: DexPathList[[zip file "/data/app/com.my.app-A1k1kce0AmLrPJ8ojgBekA==/base.apk"],nativeLibraryDirectories=[/data/app/com.my.app-A1k1kce0AmLrPJ8ojgBekA==/lib/arm64, /system/lib64, /system/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.parse.ParseRequest$2.then(ParseRequest.java:195) 
            at com.parse.ParseRequest$2.then(ParseRequest.java:190) 
            at bolts.Task$14.run(Task.java:796) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
            at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.client.ClientProtocolException" on path: DexPathList[[zip file "/data/app/com.my.app-A1k1kce0AmLrPJ8ojgBekA==/base.apk"],nativeLibraryDirectories=[/data/app/com.my.app-A1k1kce0AmLrPJ8ojgBekA==/lib/arm64, /system/lib64, /system/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.parse.ParseRequest$2.then(ParseRequest.java:195) 
        at com.parse.ParseRequest$2.then(ParseRequest.java:190) 
        at bolts.Task$14.run(Task.java:796) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:764) 

1 个答案:

答案 0 :(得分:0)

默认情况下,Android 6.0中已删除Apache HTTP客户端。要继续使用它,请将其添加到build.gradle的android { ... }块中:

useLibrary 'org.apache.http.legacy'

有关删除的更多信息,请参见here