studio - api android
java.lang.NoClassDefFoundError: فشل حل: Lorg/apache/http/ProtocolVersion (5)
لقد واجهت مثل هذا الخطأ عند استخدام Android studio 3.1 لإنشاء تطبيق Android P ، يمكن إجراء apk ، لكن عندما أستخدمه على محاكي Android P ، فسوف يتعطل ويطرد المعلومات أدناه ، مزيد من التفاصيل ، انظر pic .
java.lang.NoClassDefFoundError: فشل حل: Lorg / apache / http / ProtocolVersion
جزء من build.gradle الخاص بي ضمن وحدة التطبيقات أدناه ، هل التقى أحد بهذا؟ شكرا جزيلا.
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'
}
إذا كنت تستخدم com.google.android.gms: خرائط play-services: 16.0.0 أو أقل ويستهدف تطبيقك مستوى API 28 (Android 9.0) أو أعلى ، يجب عليك تضمين الإعلان التالي داخل عنصر AndroidManifest. أكس.
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
يتم التعامل مع هذا الأمر إذا كنت تستخدم com.google.android.gms: خرائط play-services: 16.1.0 وليست ضرورية إذا كان تطبيقك يستهدف مستوى واجهة برمجة تطبيقات أقل.
تم الإبلاغ عنها أيضًا على متتبع أخطاء Android: https://issuetracker.google.com/issues/79478779
لتشغيل 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>
وأضف علامتي تمييز في 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'
}
هذا الرابط android-9.0-changes-28 -> يوضح إهمال عميل Apache HTTP سبب إضافة ما يلي إلى AndroidManifest.xml:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
باستخدام Android 6.0 ، أزلنا الدعم لعميل Apache HTTP. بدءًا من Android 9 ، تتم إزالة تلك المكتبة من bootclasspath ولا تتوفر للتطبيقات افتراضيًا.
تحديث: لم يعد هذا خطأ أو حل بديل ، فهو ضروري إذا كان التطبيق يستهدف API المستوى 28 (Android 9.0) أو أعلى ويستخدم Google Maps SDK لنظام Android 16.0.0 أو ما دونه (أو إذا كان تطبيقك يستخدم Apache HTTP المكتبة القديمة). يتم تضمينه الآن في المستندات الرسمية . تم closed القضية العامة كسلوك مقصود.
هذا
bug
في جانب خدمات Google Play ، وإلى أن يتم إصلاحه ، يجب أن تكون قادرًا على حل المشكلة عن طريق إضافة هذا إلى
AndroidManifest.xml
داخل علامة
<application>
:
<uses-library android:name="org.apache.http.legacy" android:required="false" />