web-dev-qa-db-de.com

Wie füge ich Apache HTTP API (Legacy) als Kompilierungszeitabhängigkeit zu build.grade für Android M hinzu?

Wie bereits erwähnt hier , Android M unterstützt die Apache HTTP API nicht. In den Dokumenten heißt es:

verwenden Sie stattdessen die Klasse HttpURLConnection.

oder

Um die Apache-HTTP-APIs weiterhin verwenden zu können, müssen Sie zunächst die folgende Abhängigkeit zur Kompilierungszeit in Ihrer build.gradle-Datei deklarieren:

Android {useLibrary 'org.Apache.http.legacy'}

Ich habe einen Großteil der Verwendung von HttpClient in meinem Projekt auf HttpURLConnection konvertiert, muss den HttpClient jedoch in einigen Bereichen noch verwenden. Daher versuche ich, "org.Apache.http.legacy" als Abhängigkeit zur Kompilierungszeit zu deklarieren, erhalte jedoch einen Fehler in build.gradle:

DSL-Methode von Gradle nicht gefunden: 'useLibrary ()'

Meine Frage lautet: Wie deklariere ich "org.Apache.http.legacy" als Abhängigkeit zur Kompilierungszeit in meinem Projekt?

Jede Hilfe wird sehr geschätzt. Vielen Dank

93
Virat Singh

Für API 23:

Build.gradle der obersten Ebene - /build.gradle

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

Modulspezifisches build.gradle - /app/build.gradle

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"
    useLibrary 'org.Apache.http.legacy'
    ...
}

Offizielle Dokumente (zur Vorschau): http://developer.Android.com/about/versions/Marshmallow/Android-6.0-changes.html#behavior-Apache-http-client

Neueste Android Änderungsprotokoll für Gradle-Plugins: http://tools.Android.com/tech-docs/new-build-system

170
hidro

Eine andere Alternative ist das Hinzufügen einer Bundle-Abhängigkeit. Dies ist mehr Android Studio freundlich als Android Studio gibt nicht die Meldung "Symbol kann nicht aufgelöst werden ..."

 dependencies {
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
 }
28
nexDev

Fügen Sie in Ihrer build.gradle-Datei seLibrary 'org.Apache.http.legacy' gemäß Android 6.0 Changes> Apache HTTP Client Removal Hinzu.

Android {
    ...
    useLibrary 'org.Apache.http.legacy'
    ...
}

Fügen Sie Abhängigkeiten hinzu, um Fehler durch fehlende Verknüpfungen zu vermeiden

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

mit 'sofern' wird die abhängigkeit nicht in die apk aufgenommen

13
lrampazzo

Gerade kopierte Datei: org.Apache.http.legacy.jar von Android/Sdk/platforms/Android-23/optional Ordner in Projektordner app/libs.

Arbeitete wie Charme für 23.1.1.

11
CodeBulls Inc.

Notiz für Android 9 (Pie).

Zusätzlich zu useLibrary 'org.Apache.http.legacy' Sie müssen in AndroidManifest.xml hinzufügen:

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

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

8

Da die Antworten etwas alt sind, werde ich meine Lösung (was bei mir funktioniert hat) aufstellen, es kann für jemand anderen hilfreich sein ... Ich habe meine Lösung aus der offiziellen Dokumentation von Apache genommen, keine Arbeit -um.

1/in gradle:

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

2/Im Rest der App ersetzen Sie das org.Apache.http durch cz.msebera.Android.httpclient und alle Ihre Importe (Abhängigkeiten) werden behoben. Sie können einfach STRG + UMSCHALT + R drücken und es im gesamten Projekt ersetzen.

3
ahmed_khan_89

FWIW das Entfernen der Apache-Bibliothek wurde vor einiger Zeit vorhergesagt. Unser guter Freund Jesse Wilson gab uns 2011 einen Hinweis: http://Android-developers.blogspot.com/2011/09/androids-http-clients.html

Google hat vor einiger Zeit die Arbeit an ApacheHTTPClient eingestellt. Daher sollte jede Bibliothek, die noch darauf angewiesen ist, in die Liste der veralteten Bibliotheken aufgenommen werden, es sei denn, die Betreuer aktualisieren ihren Code.

<rant> Ich kann Ihnen nicht sagen, wie viele technische Auseinandersetzungen ich mit Leuten hatte, die darauf bestanden haben, am Apache HTTP-Client festzuhalten. Es gibt einige wichtige Apps, die kaputt gehen werden, weil das Management meiner nicht zu nennenden früheren Arbeitgeber nicht auf ihre Top-Ingenieure hörte oder wusste, wovon sie sprachen, als sie die Warnung ignorierten ... aber Wasser unter die Brücke.

Ich gewinne.

</rant>

2
Coder Roadie

Ich habe dieses Problem so gelöst:

1.) Legen Sie den Klassenpfad in der Build-Datei der obersten Ebene wie in der GUG angegeben fest:

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

2.) In der Build-Datei eines bestimmten Moduls:

Android {
   useLibrary 'org.Apache.http.legacy'
   compileSdkVersion 'Android-MNC'
   buildToolsVersion '23.0.0 rc3'
}
2
A.D.

es sollte helfen:

Android {
    ...
    useLibrary 'org.Apache.http.legacy'
    ...
}

Fügen Sie Abhängigkeiten hinzu, um Fehler durch fehlende Verknüpfungen zu vermeiden

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

oder

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

da

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

Stellen Sie zur Behebung der Probleme sicher, dass Sie Buildtools der Version "23.0.0 rc2" mit den folgenden Tools verwenden, um eine Gradle-Abhängigkeit zu erstellen:

classpath 'com.Android.tools.build:gradle:1.3.0-beta2'
0
GUG