java.lang.NoClassDefFoundError: сбой разрешения: Lorg/apache/http/ProtocolVersion

Я встретил такую ошибку, когда я использую Android 3.1 для создания приложения Android P, apk можно сделать, но когда я использую его на эмуляторе Android P, он будет разбиваться и бросать ниже информации, более подробно см. Рис.

java.lang.NoClassDefFoundError: сбой разрешения: Lorg/apache/http/ProtocolVersion

enter image description here

часть моего build.gradle в модуле App ниже, кто-нибудь встречает это? И дайте несколько советов? Большое спасибо.

android {

     compileSdkVersion 'android-P'
     buildToolsVersion '28-rc1'

    useLibrary 'org.apache.http.legacy'

    //for Lambda
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }

    packagingOptions {

        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    defaultConfig {
        applicationId "xxx.xxx.xxx"
        minSdkVersion 17
        targetSdkVersion 27
        versionCode xxxx
        versionName "Vx.x.x"

        multiDexEnabled true


     //other setting required
        ndk {

            abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a', 'x86', 'x86_64', 'mips', 'mips64'

        }

Ответы

Ответ 1

Обновление: это больше не ошибка или обходной путь, это требуется, если ваше приложение предназначено для API уровня 28 (Android 9.0) или выше и использует Google Maps SDK для Android 16.0.0 или ниже (или если ваше приложение использует Apache HTTP Библиотека наследия). Теперь он включен в официальные документы. Публичная проблема была закрыта как предполагаемое поведение.

Это ошибка со стороны Сервисов Google Play, пока она не будет исправлена, вы сможете обойти ее, добавив ее в свой AndroidManifest.xml внутри <application>:

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

Ответ 2

Эта ссылка android-9.0-changes-28 → Устаревание клиента Apache HTTP объясняет причину добавления следующего в ваш AndroidManifest.xml:

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

В Android 6.0 мы убрали поддержку HTTP-клиента Apache. Начиная с Android 9, эта библиотека удаляется из пути загрузки и по умолчанию недоступна для приложений.

Ответ 3

Выполните любое из следующих действий:

1- Обновите библиотеку play-services-maps до последней версии:

com.google.android.gms:play-services-maps:16.1.0

2- Или включите следующую декларацию в элемент <application> AndroidManifest.xml.

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

Ответ 5

Для идеального запуска org.apache.http.legacy в Android 9.0 Pie создайте XML файл res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
      <base-config cleartextTrafficPermitted="true">
       <trust-anchors>
        <certificates src="system" />
       </trust-anchors>
      </base-config>
    </network-security-config>

И добавьте 2 тега тега в свой AndroidManifest.xml

android: networkSecurityConfig = "@xml/network_security_config" android: name = "org.apache.http.legacy"

<?xml version="1.0" encoding="utf-8"?>
 <manifest......>
  <application android:networkSecurityConfig="@xml/network_security_config">
   <activity..../> 
   ......
   ......
 <uses-library
        android:name="org.apache.http.legacy"
        android:required="false"/>
</application>

Также добавьте useLibrary 'org.apache.http.legacy' в ваш грейд сборки приложения

android {
compileSdkVersion 28
defaultConfig {
    applicationId "your application id"
    minSdkVersion 15
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    useLibrary 'org.apache.http.legacy'
}

Ответ 6

Если вы используете com.google.android.gms: play-services-maps: 16.0.0 или ниже и ваше приложение ориентировано на уровень API 28 (Android 9.0) или выше, вы должны включить следующее объявление в элемент AndroidManifest. XML.

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

Это обрабатывается для вас, если вы используете com.google.android.gms: play-services-maps: 16.1.0, и не требуется, если ваше приложение ориентировано на более низкий уровень API.

Ответ 7

Если вы используете Android 9.0 с устаревшим jar, чем вы должны использовать. в вашем файле mainfest.

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

Ответ 8

Согласно этому SO-ответу, это происходит из-за ошибки в AWS SDK, которая, по-видимому, устранена в версии 2.6.30 SDK, поэтому обновление версии до более новой может помочь вам решить проблему.