Android Google मैप्स java.lang.NoClassDefFoundError: विफल संकल्प: Lorg / apache / http / ProtocolVersion


208

मैं Google मैप्स का उपयोग कर रहा हूं एंड्रॉइड एसडीके 11.6.2 (इसके अलावा 15.0.1 की कोशिश की गई), लेकिन मैं मानचित्र दिखाने से पहले दुर्घटनाग्रस्त हो जाता हूं। पहले से ही प्रकट में एपीआई कुंजी की जाँच की, यह उपलब्ध है, लेकिन अभी भी यह समस्या होती है। मैं 28 के रूप में targetSDk संस्करण ले रहा हूं। यह इस समस्या का कारण बनता है।

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
        at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3)
        at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4)
        at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51)
        at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11)
        at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16)
        at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):61)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList[[zip file "/system/priv-app/PrebuiltGmsCorePi/app_chimera/m/MapsDynamite.apk"],nativeLibraryDirectories=[/data/user_de/0/com.google.android.gms/app_chimera/m/00000036/MapsDynamite.apk!/lib/armeabi-v7a, /data/user_de/0/com.google.android.gms/app_chimera/m/00000036/MapsDynamite.apk!/lib/armeabi, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at ad.loadClass(:com.google.android.gms.dynamite_dynamiteloader@12848063@12.8.48 (100408-196123505):25)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3) 
        at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4) 
        at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51) 
        at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11) 
        at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16) 
        at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):61) 

पहले से ही डिफ़ॉल्ट में बहुत बहु-सत्य है। डिफ़ॉल्ट में
रामप्रसाद

6
यह समस्या Android P में होती है ... Android 5 पर अच्छा काम करती है
रामप्रसाद

1
यह भी मिल गया, यह केवल एंड्रॉइड पी बीटा 2 पर होता है
हैम

मुझे भी यह त्रुटि मिली। एंड्रॉइड स्टूडियो और इसके एमुलेटर का उपयोग करना।
फ्रैंकलीआओ

15
एपीआई स्तर 28 (एंड्रॉइड 9.0) पर इस त्रुटि को देखने वाले, Google मैप्स डॉक्स अब आवश्यक प्रकट प्रविष्टि का वर्णन करते हैं
बॉब स्नाइडर

जवाबों:


496

इसे मेनिफेस्ट <application>टैग में रखें :

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

अधिक जानकारी: https://issuetracker.google.com/issues/79478779


9
इससे समस्या हल हो गई। यह समझने की आवश्यकता नहीं है कि यह क्यों आवश्यक है। MapsActivity मैं सभी नियमित रूप से लग रहा था ..
frankliuao

8
एंड्रॉइड 9.0 पहले से ही जारी है और Google ने अभी भी मैप्स लाइब्रेरी को ठीक नहीं किया है, न ही दस्तावेज किया है कि उसे इस लाइब्रेरी की आवश्यकता है। बहुत गरीब देव समर्थन करते हैं।
हेडस्कॉक

41
@headsvk Google ने इसे प्रलेखित किया है, देखें: Developers.google.com/maps/documentation/android-sdk/…
हैम

फिर भी, अपाचे HTTP ग्राहक समर्थन एंड्रॉयड 6 के बाद से हटा दिया गया है: https://developer.android.com/about/versions/marshmallow/android-6.0-changes#behavior-apache-http-client
wamfous

यह भी तय java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/message/BasicNameValuePair;होने के बाद मैंने AndroidX पर स्विच किया (और बाद की 65K विधियाँ सीमा में वृद्धि हुई हैं)
किसी को कहीं

41

इससे आपकी दुर्घटना का समाधान हो जाएगा। इसे प्रकट में लागू करें

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


<application/>

1
किसलिए android:usesCleartextTraffic="true"अच्छा है? अन्य उत्तरों में इस पंक्ति का उल्लेख नहीं है। इतना वैकल्पिक?
टिमो बैहर

1
@ TimoBähr यह जवाब का हिस्सा नहीं है। हैम ने क्या जवाब दिया, निकी का जवाब यह स्पष्ट करने के लिए बनाता है कि आपको आवेदन टैग के भीतर इस पंक्ति को सम्मिलित करना चाहिए।
15

@ TimoBähr यह android:usesCleartextTraffic="true"भी मुद्दा है कि आपको बाद में मिलेगा, यह सुरक्षा उद्देश्यों के लिए है।
लेस्टर एल।

@ Lester.L अगर मैं यह घोषणा करता हूं कि android:usesCleartextTraffic=”true”यह स्पष्ट http लिंक के साथ संवाद करने की अनुमति देता है - जो कि यथास्थिति है। जहाँ तक मैं समझता हूँ कि केवल android:usesCleartextTraffic=”false”ऐप ही अधिक "सुरक्षित" होगा। कृपया मुझे सुधारें अगर मैं गलत हूं।
टिमो बैहर

1
मैंने उसे हटा दिया। इसका खुद से जवाब देने और जवाब देने के लिए कुछ नहीं करना चाहिए और अगर किसी ने इसे कॉपी और पेस्ट किया है तो संभवतः उसे कुछ सुरक्षा उल्लंघन का कारण बनना चाहिए।
याराबेककजुब

16

निम्न में से कोई एक उपाय करें:

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

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" />

दोनों समाधान इस Google डॉक द्वारा समर्थित हैं: Developers.google.com/maps/documentation/android-sdk/…
एंडी

9

यदि आपका ऐप API स्तर 28 (Android 9.0) या उससे ऊपर का लक्ष्य बना रहा है, तो आपको <application>AndroidManifest.xml के तत्व में निम्नलिखित घोषणा को शामिल करना होगा ।

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

4

यदि आपका ऐप API स्तर 28 (Android 9.0) या उससे ऊपर का लक्ष्य बना रहा है, तो आपको AndroidManifest.xml के तत्व में निम्नलिखित घोषणा को शामिल करना होगा। नीचे दिए गए लिंक में 28+ लक्ष्यीकरण के व्यवहार में परिवर्तन देखें

https://developer.android.com/about/versions/pie/android-9.0-changes-28 https://developer.android.com/about/versions/pie/android-9.0-changes-28


0

यदि एंड्रॉइड 8.0 या इसके बाद के संस्करण में ऐसा होता है, तो बस इस लाइन को अपने मैनिफ़ेस्ट एप्लिकेशन टैग में डालें

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

0

टिस सेट करें:

multiDexEnabled true

ऐशे ही:

android {
    compileSdkVersion 28
    defaultConfig {

        multiDexEnabled true

    }
    buildTypes {
        release {

        }
    }
}

0

मैनिफ़ेस्ट फ़ाइल में अनुमतियाँ जोड़ें

`<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION."/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>`

और भाग में इस कोड की लाइन डालते हैं

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

मुझे भी यही समस्या थी और इसी से तय हुई।


0

यहाँ समाधान है

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

इस लाइन को अपने Menifest.xml में जोड़कर अंदर करें <application> टैग के

अधिक जानकारी के लिए


0

एक xml फ़ाइल रेस / 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 टैग टैग जोड़ें

<?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>

इसके अलावा अपने ऐप बिल्ड ग्रैन्डल में यूज़लवर्क 'org.apache.http.legacy' जोड़ें

defaultConfig {
        applicationId "com.ascorb"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 6
        versionName "1.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        useLibrary 'org.apache.http.legacy'
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.