如何在Android Marshmallow上使用传统的Apache HTTP客户端?
背景
在Android Marshmallow中,Google已经完全取消了Apache HTTP客户端的支持(链接在这里 ),因为与其他select相比,Google的客户端性能不佳。
这也可能是导致Android棉花糖崩溃的原因。
问题
谷歌允许你仍然使用这个API,而不是作为一个内置的,通过添加这一行到gradle文件:
useLibrary 'org.apache.http.legacy'
所以,这就是我所做的:
dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }
和:
android { compileSdkVersion 'android-MNC' buildToolsVersion "23.0.0 rc3" useLibrary 'org.apache.http.legacy' defaultConfig { applicationId "com.example.user.androidmtest" minSdkVersion 'MNC' targetSdkVersion 'MNC' versionCode 1 versionName "1.0" }
当我尝试它,它编译好(没有错误被显示,我可以运行的概念validation的应用程序,因为它没有任何特殊的代码),但是当我尝试使用一些我知道的类是旧的API(如“HttpClient”类)的一部分,我看到它不允许我这样做。
我知道不build议使用这个解决scheme,但我们必须让应用程序准备好在那里至less暂时工作,直到我们对Android Marshmallow应该改变的所有事情百分之百地工作,并且我们不希望在崩溃的forms。
这里有一个截图:
这个问题
为什么会发生? 我是否正确使用它?
编辑:在这里报告关于这个问题:
https://code.google.com/p/android/issues/detail?id=181474
Android Studio抱怨org.apache.http
类喜欢
org.apache.http.NameValuePair org.apache.http.client.utils.URLEncodedUtils
失踪。
所以我添加了org.apache.http.legacy.jar
在Android/Sdk/platforms/android-23/optional
文件夹到app/libs
我也将这一行添加到我的app.gradle
文件
compile files('libs/org.apache.http.legacy.jar')
但是如果你使用更多的库,你可以用这种方式
compile fileTree(dir: 'libs', include: ['*.jar'])
这解决了我所有的错误,因为谷歌删除了Apache HTTP客户端的支持。
useLibrary'org.apache.http.legacy'在我升级我的Android Studio项目的主要build.gradle文件中的Gradle工具版本之前并不适用,如下所示:
dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }
通过运行简单的文件path检查完美的解决scheme。 通过运行
android { compileSdkVersion 'android-MNC' buildToolsVersion "23.0.0 rc3" useLibrary 'org.apache.http.legacy' defaultConfig { applicationId "com.example.user.androidmtest" minSdkVersion 'MNC' targetSdkVersion 'MNC' versionCode 1 versionName "1.0" } getBootClasspath().each{File file -> println file.absolutePath } } }
你会得到像下面的东西
/Users/"yourname"/Development/android-sdk-macosx/platforms/android-MNC/android.jar /Users/"yourname"/Development/android-sdk-macosx/platforms/android-MNC/optional/org.apache .http.legacy.jar
所以你去了,jar子在那里。由于某种原因,它没有被添加到项目中。 但你总是可以手动添加它我猜。
经过许多令人沮丧的时间,以下工作:
1.findapache jar。 它应该驻留在某个地方:
C:\Users\<yourname>\AppData\Local\Android\sdk\platforms\android-23\optional
2.将 org.apache.http.legacy.jar
复制 到您的libs文件夹。
右键单击库 – >粘贴,或者使用文件浏览器导航到项目的库文件夹并粘贴。
如果你没有libs文件夹,就像我一样,创build一个新项目并将所有相关文件导入到它们各自的位置。
3.点击ok
看到这个
4.最重要的步骤:右键单击apache文件夹并selectAdd As Library
。 看到这个
希望这有助于人们继续他们的生活。
我知道这是愚蠢的理由,但在列表中尝试…
我最近遇到这个问题,是由于path长度限制,我认为最多256个字符。
重新定位你的项目,构build将成功。希望为你工作。
传统的Apache库位于
[ANDROID_SDK]\platforms\android-23\optional\org.apache.http.legacy.jar
所以你可以复制它在你的项目库或只是使用
compile files("${android.getSdkDirectory().getAbsolutePath()}" + File.separator + "platforms" + File.separator + "android-23" + File.separator + "optional" + File.separator + "org.apache.http.legacy.jar")
在你的/app/build.gradle
首先你必须检查你的libs文件夹
Then add into your gradle file like this android { compileSdkVersion 23 buildToolsVersion '23.0.2' defaultConfig { applicationId "info.tranetech.laundry" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } android { useLibrary 'org.apache.http.legacy' } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1 compile 'com.android.support:design:23.0.1 testCompile 'junit:junit:4.12' compile files('libs/android-async-http-1.4.4.jar') compile 'com.google.android.gms:play-services:8.4.0' }
上面的答案只是帮助debugging构build运行,并释放利用gradle的构build。
在清单文件的应用程序标签内部,在使用传统apache类的所有项目实例中插入:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
这有助于那些在编译期间仍然使用Eclipse和ant脚本的人。
在sdk / platforms / android-23 / optional / optional.json中启用它
[ { "name": "org.apache.http.legacy", "jar": "org.apache.http.legacy.jar", "manifest": false } ]
去掉
useLibrary 'org.apache.http.legacy'
从build.gradle,我也将这一行添加到我的app.gradle文件
compile files('libs/org.apache.http.legacy.jar')
但是如果你使用更多的库,你可以用这种方式
compile fileTree(dir: 'libs', include: ['*.jar'])
CoPLaS答案解决了我的问题。
如何在Android Marshmallow上使用传统的Apache HTTP客户端?
要继续为API 23+使用Apache HTTP类,请执行以下操作:
首先,一定要将gradle dependencie添加到build.gradle
buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.0.0' } }
然后在你的项目的build.gradle
里添加引用:
android { compileSdkVersion 23 buildToolsVersion "23.0.0" useLibrary 'org.apache.http.legacy' ... }
解决这个问题的简单方法是C:\ Users \ username \ AppData \ Local \ Android \ sdk \ platforms。 这里删除你的android-23,然后从SDKpipe理器再次更新你的API 23。 它会解决你的问题。
- configurationIntelliJ IDEA,以便在git中检测到源,但检测到未注册的VCS根目录
- 我如何删除一个button或使其在Android中不可见?
- 无法将Eclipse ADT更新到22
- 在webview中自动填写字段
- 在Android中获取电池电量和状态
- Android:如何使LinearLayout内的所有元素大小相同?
- getExtractedText在android上处于非活动状态的InputConnection警告
- 错误:执行任务失败:app:transformResourcesWithMergeJavaResForDebug'
- 如何在Android上按应用程序查找数据使用情况?