Как добавить Apache HTTP API (legacy) в качестве зависимости времени компиляции для сборки.оценка для Android M?



Как уже упоминалось здесь, Android M не будет поддерживать Apache HTTP API. В документе указано:




вместо этого используйте класс HttpURLConnection.




или




чтобы продолжить использование Apache HTTP API, необходимо сначала объявить следующую зависимость времени компиляции в сборке.файл gradle:



android { useLibrary ' org.апаш.http.наследие'
}




я преобразовал большую часть моего использование проекта HttpClient для HttpURLConnection, однако, я все еще нужно чтобы использовать HttpClient в нескольких областях. Следовательно, я пытаюсь объявить 'org.апаш.http.legacy ' как зависимость времени компиляции, но я получаю ошибку в сборке.Gradle в:




метод Gradle DSL не найден: 'useLibrary ()'




мой вопрос: как я могу объявить ' org.апаш.http.legacy ' как зависимость времени компиляции в моем проекте?



любая помощь очень оцененный. Спасибо

764   9  

9 ответов:

для API 23:

сборка верхнего уровня.gradle - / build.gradle

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

модуль конкретной сборки.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 плагин changelog: http://tools.android.com/tech-docs/new-build-system

Другой альтернативой является просто добавить зависимость jbundle. Это более Android Studio дружественный, как Android Studio не дает сообщение " не может решить символ..."

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

только что скопированный файл:org.apache.http.legacy.jar с Android/Sdk/platforms/android-23/optional папка в папке проекта app/libs.

работал как шарм для 23.1.1.

в свою сборку.gradle file add useLibrary ' org.апаш.http.наследие' по состоянию на 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

поскольку ответы немного стары, я поставлю свое решение (то, что сработало для меня), это может быть полезно для кого-то еще... Я взял свое решение из официальная документация из Apache, без обходных путей.

1 / in 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 by cz.msebera.android.httpclient и все ваши импорта (зависимости) будут исправлены. вы можете просто сделать ctrl + shift+R и заменить его во всем проекте.

Я решил эту проблему вот так:

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

FWIW удаление библиотеки Apache было предвещено некоторое время назад. Наш хороший друг Джесси Уилсон дал нам ключ еще в 2011 году: http://android-developers.blogspot.com/2011/09/androids-http-clients.html

Google перестал работать над ApacheHTTPClient некоторое время назад, поэтому любая библиотека, которая все еще полагается на это, должна быть помещена в список устаревших библиотек, если сопровождающие не обновляют свой код.

<rant> Я не могу сказать вам, сколько технические аргументы, которые у меня были с людьми, которые настаивали на том, чтобы придерживаться Apache HTTP client. Есть некоторые основные приложения, которые собираются сломать, потому что руководство в моем не-названном предыдущем работодателе не слушало своих лучших инженеров или не знало, о чем они говорили, когда они игнорировали предупреждение ... но, вода под мостом.

я выиграю.

</rant>

для решения проблем убедитесь, что вы используете build tools версии "23.0.0 rc2" со следующими инструментами build gradle dependency:

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

это должно помочь:

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

Comments

    Ничего не найдено.