如何添加的Apache HTTP API(传统)的编译时依赖于build.grade为版本的Andr

2019-05-10 13:10发布

如前所述这里 ,Android的M将不支持的Apache HTTP API。 该文档状态:

使用HttpURLConnection的类代替。

要么

要继续使用Apache HTTP API,您必须首先声明在你的build.gradle文件中的以下编译时依赖性:

安卓{useLibrary 'org.apache.http.legacy'}

我已经转换多的HttpClient我的项目的使用情况,以HttpURLConnection类的,但是,我仍然需要使用HttpClient的少数地区。 因此,我想申报“org.apache.http.legacy”作为编译时的依赖,但我在的build.gradle得到一个错误:

摇篮DSL方法未找到: 'useLibrary()'

我的问题是:我怎么申报“org.apache.http.legacy”作为我的项目编译时依赖?

任何帮助深表感谢。 谢谢

Answer 1:

对于API 23:

顶级的build.gradle - /build.gradle

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.1'
    }
}
...

模块特定的build.gradle - /app/build.gradle

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"
    useLibrary 'org.apache.http.legacy'
    ...
}

官方文档(预览虽然): http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client

最新的Android插件的gradle更新日志: http://tools.android.com/tech-docs/new-build-system



Answer 2:

另一种方法是只需添加jbundle依赖。 这是更多的Android工作室友好由于Android Studio不给消息“无法解析符号......”

 dependencies {
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
 }


Answer 3:

只是复制文件: org.apache.http.legacy.jarAndroid/Sdk/platforms/android-23/optional文件夹复制到项目文件夹中app/libs

工作就像魅力为23.1.1。



Answer 4:

在你的build.gradle文件中添加useLibrary“org.apache.http.legacy”按Android 6.0 Changes > Apache HTTP Client Removal的笔记。

android {
    ...
    useLibrary 'org.apache.http.legacy'
    ...
}

为了避免丢失链接错误添加到依赖性

dependencies {
    provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

使用“”提供的依赖将不包括在APK



Answer 5:

注意为Android 9(PIE)。

此外,以useLibrary 'org.apache.http.legacy'你必须在AndroidManifest.xml中添加:

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

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



Answer 6:

因为答案是有点老了,我会把我的解决方案(什么工作对我来说),它可以对别人有所帮助......我把我的解决方案从官方文档的Apache,没有变通的。

1 /的gradle中:

dependencies {
...
// This is the maintained version from apache.
compile group: 'cz.msebera.android', name: 'httpclient', version: '4.4.1.1'
}

2 /在应用程序的其余部分更换org.apache.http通过cz.msebera.android.httpclient和所有的进口(依赖)将其固定。 你可以做CTRL + SHIFT + R和整个项目替换它。



Answer 7:

我喜欢解决这样这个问题:

1)设置CLASSPATH在顶级构建文件为GUG提到:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0-beta2'
    }
    allprojects {
        repositories {
           jcenter()
        }
    }
}

2.)在特定模块的构建文件:

android {
   useLibrary 'org.apache.http.legacy'
   compileSdkVersion 'android-MNC'
   buildToolsVersion '23.0.0 rc3'
}


Answer 8:

FWIW去除阿帕奇库前一阵子被埋下了伏笔。 我们的好朋友杰西·威尔逊给了我们一个线索早在2011: http://android-developers.blogspot.com/2011/09/androids-http-clients.html

谷歌停止在ApacheHTTPClient工作前一阵子,所以这仍然是依赖于任何图书馆应该放到过时的库列表,除非维护更新他们的代码。

<rant>我不能告诉你有多少技术参数我已经与谁在使用Apache HTTP客户坚持坚持的人。 但是也有一些会在我不至被命名为以前的雇主,因为管理层打破不听他们的顶尖工程师或知道他们在谈论时,他们忽略了警告,一些主要的应用程序......可是,在水中桥梁。

我赢了。

</rant>



Answer 9:

要解决问题,确保您使用的编译工具版本“23.0.0 RC2”使用以下工具的gradle构建依赖:

classpath 'com.android.tools.build:gradle:1.3.0-beta2'


Answer 10:

它应该帮助:

android {
    ...
    useLibrary 'org.apache.http.legacy'
    ...
}

为了避免丢失链接错误添加到依赖性

dependencies {
    provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

要么

dependencies {
    compileOnly 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

因为

Warning: Configuration 'provided' is obsolete and has been replaced with 'compileOnly'.


文章来源: How to add Apache HTTP API (legacy) as compile-time dependency to build.grade for Android M?