android - java.lang.NoClassDefFoundError: विफल संकल्प: Lorg/apache/http/प्रोटोकॉल विसर्जन




google-maps gradle (5)

जब मैं एंड्रॉइड P का ऐप बनाने के लिए एंड्रॉइड स्टूडियो 3.1 का उपयोग करता हूं, तो मुझे ऐसी त्रुटि हुई, एपीके बनाया जा सकता है, लेकिन जब मैं एंड्रॉइड पी एमुलेटर पर इसका उपयोग करता हूं, तो यह दुर्घटनाग्रस्त हो जाएगा और नीचे दी गई जानकारी को फेंक देगा, अधिक विवरण तस्वीर देखें ।

java.lang.NoClassDefFoundError: विफल संकल्प: Lorg / apache / http / प्रोटोकॉल विसर्जन

App build के तहत मेरे 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'

        }

Android में पूरी तरह से org.apache.http.legacy चलाने के लिए। 9.0 पाई एक 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 में 2 टैग टैग जोड़ें

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'
}

निम्न में से कोई एक करें:

1- नवीनतम संस्करण के लिए प्ले-सर्विसेज-मैप्स लाइब्रेरी को अपडेट करें:

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

2- या AndroidManifest.xml के <application> तत्व के भीतर निम्नलिखित घोषणा शामिल करें।

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


यह लिंक Android-9.0-changes-28 -> अपाचे HTTP क्लाइंट अपवर्जन आपके AndroidManifest.xml पर निम्नलिखित जोड़ने का कारण बताता है:

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

Android 6.0 के साथ, हमने Apache HTTP क्लाइंट के लिए समर्थन हटा दिया। एंड्रॉइड 9 के साथ शुरू होने पर, वह लाइब्रेरी बूटक्लासपथ से हटा दी जाती है और डिफ़ॉल्ट रूप से ऐप्स के लिए उपलब्ध नहीं होती है।


अपडेट: यह अब बग या वर्कअराउंड नहीं है, यह आवश्यक है यदि आपका ऐप एपीआई स्तर 28 (एंड्रॉइड 9.0) या उससे ऊपर का लक्ष्य रखता है और एंड्रॉइड 16.0.0 या उससे नीचे के लिए Google मैप्स एसडीके का उपयोग करता है (या यदि आपका ऐप अपाचे HTTP का उपयोग करता है विरासत पुस्तकालय)। यह अब आधिकारिक डॉक्स में शामिल है। सार्वजनिक मुद्दे को इच्छित व्यवहार के रूप में closed कर closed गया है।

यह Google Play Services की ओर से एक bug , जब तक यह ठीक नहीं हो जाता है, आपको <application> AndroidManifest.xml <application> टैग के अंदर इसे अपने AndroidManifest.xml जोड़कर वर्कअराउंड करने में सक्षम होना चाहिए:

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




android-9.0-pie