java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion
这是我的build.grade文件。如果有人对问题可能有什么建议,我将不胜感激。非常感谢。
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 Level 28(Android 9.0)或更高版本,并且使用适用于Android 16.0.0或更低版本的Google Maps SDK,或者您的应用程序使用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中,我们删除了对Apache HTTP客户端的支持。
从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" />
评论
再次对Android 9开发人员,当然对Google来说,这也是极大的耻辱。我希望他们能够修改Android 9的实现和行为,因为它存在许多错误。不幸的是,谷歌坚持要求将这些错误称为行为改变!
– saeed khalafinejad
19年7月7日在10:34
#4 楼
在您的AndroidManifest.xml中添加以下两行。
android:usesCleartextTraffic="true"
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
请参见下面的代码
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme"
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
<activity android:name=".activity.SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
</application>
#5 楼
如果您将Android 9.0与旧版jar一起使用,则必须使用。在mainfest文件中。
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
#6 楼
要在Android 9.0 Pie中完美地运行org.apache.http.legacy,请创建一个xml文件。android:networkSecurityConfig =“ @ xml / network_security_config”
android:name =“ org.apache.http.legacy”
<?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>
还将
res/xml/network_security_config.xml
添加到您的应用程序构建包中<?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>
评论
这看起来像是您打算向公众发布应用程序时不应该做的事情。对于开发来说,这也许很有意义,但是随后它仍然无法在生产环境中工作,因此没有任何意义。
– Maciej Pigulski
19年4月16日在7:08
这个答案应该是可以接受的答案,我尝试了很多方法但没有任何效果。好工作@Gitesh
– Mitesh Jain
19年8月21日在10:49
#7 楼
也已在Android错误跟踪器上报告了该错误:https://issuetracker.google.com/issues/79478779评论
以及它在文档developer.google.com/maps/documentation/android-sdk/中的…
– Renetik
18年11月12日在5:08
#8 楼
如果您使用的是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" />
检查此链接-https://developers.google.com/maps/documentation/android-sdk/config#specify_requirement_for_apache_http_legacy_library
#9 楼
如果您使用的是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级别。
#10 楼
在本机反应中,我出现了错误,即不显示地图并关闭应用程序,运行adb logcat并在控制台内显示错误:java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion
br /> <uses-library
android:name="org.apache.http.legacy"
android:required="false" />
#11 楼
根据此SO答案,发生此错误是由于似乎在SDK的2.6.30版中解决了一个AWS开发工具包错误,因此将版本更新为较新版本可以帮助您解决问题。#12 楼
这可能是后来的答案。但是,我希望它可以节省一些时间:如果您使用的是com.google.android.gms:play-services-maps:16.0.0或更低版本,并且您的应用定位到API级别28(Android 9.0)或更高版本,则必须在AndroidManifest.xml的元素中包含以下声明。
注意:Android 10+访问存储R / W所需的
android:requestLegacyExternalStorage="true"
Android 6.0在application元素下引入了useCleartextTraffic属性在Android清单中。 Android P中的默认值为“ false”。将此设置为true表示该应用程序打算使用明确的网络流量。如果您的应用程序在Android 10设备上运行时选择退出范围存储,则建议您继续在应用程序的清单文件中将requestLegacyExternalStorage设置为true。这样,您的应用就可以在运行Android 10的设备上继续按预期运行
评论
这不再是解决方法。现在,这是正确的方式developers.google.com/maps/documentation/android-sdk/…
–凯文·罗伯特尔(Kevin Robatel)
18年8月13日在22:09
@ AdamK,Android 9是API级别28。= P(不是服务器端的错误,而是有关P行为的更改)
–林凤
18年8月16日在6:24
有人不使用地图也遇到这种情况吗?
–罗宾·迪克霍夫(Robin Dijkhof)
18-10-12在17:51
是的,如果您使用Apache HTTP Legacy库(或其中一个依赖项),也可能会遇到它。
– AdamK
18-10-13在2:07
我正在使用Apache HTTP旧版库,这才救了我。谢谢!
– Eric B.
18-10-13在23:21