java.lang.NoClassDefFoundError: сбой разрешения: Lorg/apache/http/ProtocolVersion
Я встретил такую ошибку, когда я использую Android 3.1 для создания приложения Android P, apk можно сделать, но когда я использую его на эмуляторе Android P, он будет разбиваться и бросать ниже информации, более подробно см. Рис.
java.lang.NoClassDefFoundError: сбой разрешения: Lorg/apache/http/ProtocolVersion
часть моего 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" />
Ответ 4
Он также сообщил об отслеживании ошибок Android: https://issuetracker.google.com/issues/79478779
Ответ 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, поэтому обновление версии до более новой может помочь вам решить проблему.