it-swarm.com.de

Android Gradle Apache HttpClient existiert nicht?

Ich versuche, ein IntelliJ-Projekt in das Gradle-System von Android Studio zu konvertieren, aber bei Apache HttpClient treten Fehler auf. Fehlt mir etwas, werden folgende Fehler angezeigt:

Error:(10, 30) error: package org.Apache.http.client does not exist
Error:(11, 30) error: package org.Apache.http.client does not exist
Error:(12, 37) error: package org.Apache.http.client.entity does not exist
Error:(13, 38) error: package org.Apache.http.client.methods does not exist
Error:(14, 38) error: package org.Apache.http.client.methods does not exist
Error:(15, 38) error: package org.Apache.http.client.methods does not exist
Error:(16, 35) error: package org.Apache.http.impl.client does not exist
Error:(134, 33) error: cannot find symbol class HttpUriRequest
Error:(164, 39) error: cannot find symbol class HttpUriRequest
Error:(106, 17) error: cannot find symbol class HttpGet
Error:(106, 39) error: cannot find symbol class HttpGet
Error:(117, 17) error: cannot find symbol class HttpPost
Error:(117, 40) error: cannot find symbol class HttpPost
Error:(125, 43) error: cannot find symbol class UrlEncodedFormEntity
Error:(135, 9) error: cannot find symbol class HttpClient
Error:(135, 33) error: cannot find symbol class DefaultHttpClient
Error:(155, 18) error: cannot find symbol class ClientProtocolException
Error:(165, 9) error: cannot find symbol class HttpClient
Error:(165, 33) error: cannot find symbol class DefaultHttpClient
Error:(185, 18) error: cannot find symbol class ClientProtocolException

Meine build.gradle-Datei weist die folgenden Abhängigkeiten auf:

dependencies {
    compile 'com.google.Android.gms:play-services:+'
    compile 'org.Apache.httpcomponents:httpclient:4.2.6'
    compile 'org.Apache.httpcomponents:httpmime:4.2.6'
    compile files('libs/core.jar')
}

Es scheint, dass viele Leute ein ähnliches Problem haben, aber weder SO noch Google haben eine Lösung. Ich hoffe, dass diese Frage zukünftigen Suchern helfen wird.

252
Apqu

Ich schlage vor, Sie ersetzen den veralteten Apache HttpClient durch die neue HttpURLConnection.

Das ist eine sauberere Lösung, die Migration ist recht einfach und im Allgemeinen ist es besser, sich an die neuesten SDK-Änderungen zu halten, als zu hacken/zu patchen/zu umgehen: Normalerweise bereuen Sie es später :)

Schritt 1

HttpGet httpGet = new HttpGet(url);

wird:

URL urlObj = new URL(url);

Schritt 2

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpGet, localContext);
InputStream is = response.getEntity().getContent();

wird:

HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
InputStream is = urlConnection.getInputStream();

Schritt 2 bis

int status = response.getStatusLine().getStatusCode();

wird:

int status = urlConnection.getResponseCode();
37
Benjamin Piette

wenn Sie das Ziel-SDK als 23 verwenden, fügen Sie den folgenden Code in Ihr build.gradle ein

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

und ändere dein Buildscript auf

classpath 'com.Android.tools.build:gradle:1.3.0' 

für weitere Informationen folgen Sie diesem Link

515
Jinu

Ich hatte dieses Problem und fand dann diese Seiten: Hier können Sie sehen, dass die Apache-Bibliothek veraltet ist, aber nicht entfernt wird, so dass es funktionieren sollte. Das tut es nicht.

Siehe .

Und hier können Sie sehen, wie Sie die Apache-Bibliothek in Ihr Projekt einbinden

Siehe .

Ich habe das Problem behoben, indem ich Folgendes zu meiner build.gradle-Datei hinzugefügt habe, wie im zweiten Link empfohlen.

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

Dies funktioniert jedoch nur, wenn Sie Gradle 1.3.0-Beta2 oder höher verwenden. Wenn Sie also eine niedrigere Version verwenden, müssen Sie dies zu Buildscript-Abhängigkeiten hinzufügen:

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

Hoffe das hilft.

92
Milos Savanovic

Füge diese Bibliothek in build.gradle hinzu

 Android {
      useLibrary 'org.Apache.http.legacy'
 }
43
Darshan Dhoriya

kopieren Sie org.Apache.http.legacy.jar aus dem Ordner Android/Sdk/platforms/Android-23/optional nach app/libs

und fügte auch diese Zeile zur Datei app.gradle hinzu

compile files('libs/org.Apache.http.legacy.jar')

Wenn Sie jedoch mehr JAR-Bibliotheken verwenden, können Sie diese verwenden

compile fileTree(dir: 'libs', include: ['*.jar'])
37
do01

Grundsätzlich müssen Sie nur Folgendes hinzufügen:

useLibrary  'org.Apache.http.legacy'

In deine build.gradle Datei.

12
ATechPerson

Ich bin auf ähnliche Probleme gestoßen. Möglicherweise können Sie es mit einer ähnlichen Methode zum Laufen bringen.

Versuchen Sie dies zunächst mit Ihrer aktuellen Konfiguration und schließen Sie httpclient aus httpmime aus:

dependencies {
    compile 'com.google.Android.gms:play-services:+'
    compile ('org.Apache.httpcomponents:httpmime:4.2.6'){
            exclude module: 'httpclient'
        }
    compile 'org.Apache.httpcomponents:httpclient:4.2.6'
} 

In meinem Fall habe ich es mit den folgenden Gläsern behoben:

Dann im build.gradle mit Ausnahme von httpclient von httpmime:

dependencies {
    compile 'com.google.Android.gms:play-services:+'
    compile('org.Apache.httpcomponents:httpmime:4.3.5') {
        exclude module: 'httpclient'
    }
    compile 'org.Apache.httpcomponents:httpclient-Android:4.3.5.1'
}
9
Daniel Nugent

Ich bin auf dasselbe Problem gestoßen. Daniel Nugents Antwort half ein wenig (nachdem er seinen Rat befolgt hatte, wurde HttpResponse gefunden - aber das HttpClient fehlte noch).

Also hier ist, was es für mich behoben hat:

  1. (falls noch nicht geschehen, vorherige Import-Statements raus empfehlen)
  2. besuchen Sie http://hc.Apache.org/downloads.cgi
  3. holen Sie sich den 4.5.1.Zip aus dem binären Abschnitt
  4. entpacken und httpcore-4.4.3 & httpclient-4.5.1.jar in project/libs Ordner einfügen
  5. klicken Sie mit der rechten Maustaste auf das Glas und wählen Sie Als Bibliothek hinzufügen .

Ich hoffe es hilft.

9
Martin Pfeffer

Perfekte Antwort von Jinu und Daniel

Wenn Sie compileSdkVersion 19 haben (IN MY CASE), habe ich das Problem mit This gelöst.

compile ('org.Apache.httpcomponents:httpmime:4.3'){
    exclude group: 'org.Apache.httpcomponents', module: 'httpclient'
}
compile ('org.Apache.httpcomponents:httpcore:4.4.1'){
    exclude group: 'org.Apache.httpcomponents', module: 'httpclient'
}
compile 'commons-io:commons-io:1.3.2'

andernfalls, wenn Ihre compileSdkVersion 23 ist, verwenden Sie

Android {
useLibrary 'org.Apache.http.legacy'
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    }
}
7
Sophia

Das habe ich getan und es funktioniert für mich.

schritt 1: Fügen Sie dies in der build.grade hinzu (Modul: App)

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'

schritt 2: Synchronisieren Sie das Projekt und fertig.

5

Die Version des Apache HTTP-Clients, die ab Lager Android bereitgestellt wird, war sehr, sehr alt .

Google Android 1.0 wurde mit einem Pre-BETA-Snapshot von Apache HttpClient veröffentlicht. Zur ersten Veröffentlichung von Android mussten Apache HttpClient 4.0-APIs vorzeitig eingefroren werden, während viele Schnittstellen und interne Strukturen noch nicht vollständig ausgearbeitet waren. Als Apache HttpClient 4.0 ausgereift war, erwartete das Projekt, dass Google die neuesten Code-Verbesserungen in seinen Codebaum integrieren würde. Leider ist es nicht passiert.

Während Sie die veraltete Bibliothek über die Problemumgehung useLibrary 'org.Apache.http.legacy' (vorgeschlagen von @Jinu und anderen) weiter verwenden konnten , müssen Sie die wirklich beißen bullet und aktualisiere etwas anderes, zum Beispiel das native Android HttpUrlConnection , oder wenn das nicht deinen Bedürfnissen entspricht, kannst du die OkHttp library verwenden , was HttpUrlConnection ist intern basierend auf sowieso.

OkHttp hat tatsächlich eine Kompatibilitätsschicht , die dieselbe API wie der Apache-Client verwendet, obwohl sie nicht alle implementieren Dieselben Funktionen, sodass Ihre Laufleistung variieren kann.

Während es ist möglich, eine neuere Version des Apache-Clients zu importieren (wie von @MartinPfeffer vorgeschlagen), ist es wahrscheinlich, dass die meisten Klassen und Methoden, die Sie zuvor verwendet haben, veraltet sind, und es gibt eine hübsche großes Risiko, dass das Aktualisieren zu Fehlern in Ihrem Code führt (zum Beispiel habe ich festgestellt, dass einige Verbindungen, die zuvor hinter einem Proxy funktionierten, nicht mehr funktionierten), daher ist dies keine großartige Lösung.

1
Tim Rae

Ich musste posten, da keine der obigen Antworten für mich vollständig funktionierte.

Ich verwende Android Studio

classpath 'com.Android.tools.build:gradle:1.5.0'

compileSdkVersion 23
buildToolsVersion "23.0.3"

Schritt 1: Letzte JAR-Datei herunterladen ( http://www-eu.Apache.org/dist//httpcomponents/httpclient/binary/httpcomponents-client-4.5.2-bin.Zip )

Schritt 2: Kopieren Sie die .jar-Datei und fügen Sie sie in den libs-Ordner (erstellen, falls noch nicht vorhanden) Ihres Moduls ein (kann eine App oder Bibliothek sein).

Schritt 3: Klicken Sie mit der rechten Maustaste auf das Glas und wählen Sie "Als Bibliothek hinzufügen". Die JAR-Datei wird automatisch als Abhängigkeit in die Gradle-Datei Ihres Moduls eingefügt

Schritt 4: Jetzt wird Ihr Problem automatisch behoben. Wenn Sie jedoch Proguard in Ihrer App verwenden, werden Sie vor doppelten Klassendateien gewarnt und können keine neuen erstellen. Es ist ein bekannter Fehler und Sie müssen Folgendes zu Ihren Proguard-Regeln hinzufügen

-dontwarn org.Apache.commons.**
-keep class org.Apache.http.** { *; }
-dontwarn org.Apache.http.**

Viel Glück!

1
Debasish Mitra

Nachdem ich Tage mit dem Thema verbracht hatte, schaffte ich es endlich, es zu lösen. Leider brauchen wir es, wenn wir Erweiterungsdateien verwenden wollen. Die Lösung wurde von ein paar Leuten hier zur Verfügung gestellt, aber für mich fehlten bei den Antworten ein paar kleine Details, die mir viel Zeit gespart haben könnten. Hier ist die Abfolge der Ereignisse für Anfänger wie mich, um Ihre kostbare Zeit zu sparen.

Zuerst habe ich den Ordner "library" aus D:\Users\Imre\AppData\Local\Android\sdk1\extras\google\play_licensing in das Projekt importiert, indem ich in File, New, Import Module gegangen bin und zum Ordner "library" navigiert habe. Wenn Sie den SDK-Manager öffnen und im unteren Bereich des Popup-Bildschirms auf "Standalone-SDK-Manager starten" klicken, können Sie den Mauszeiger über den Ordner "Extras" im unteren Bereich bewegen und anhand der kleinen gelben Informationen erfahren, wo Sie sich befinden das Paket, das Sie importieren müssen.

Sobald dies erledigt ist, gehen Sie zum Abschnitt "Bibliothek" im linken Bereich mit "Projekt" und öffnen dort die Registerkarte "Android". Öffnen Sie den Abschnitt Java der Bibliothek und öffnen Sie die APKExpansionPolicy-Klasse. Wenn Sie Fehler haben und das Import-org.Apache.http.NameValuePair und das Import-org.Apache.http.client.utils.URLEncodedUtils hellgrau sind, öffnen Sie build.gradle (Project: whatever) und stellen Sie sicher, dass in "buildscript" Unter "Abhängigkeiten" ist der "Klassenpfad" com.Android.tools.build:gradle:1.5.0 enthalten. Die 1.5.0 könnte in Ihrem Fall anders sein. Ich denke, es hängt von Ihrer Studio-Version ab. Meins ist 1.5.1. Wenn deins neuer ist, werden Sie daran erinnert, die Nummern zu aktualisieren.

Gehen Sie danach zu "build.gradle (Module: library)" und fügen Sie die "useLibrary 'org.Apache.http.legacy' in den Abschnitt" Android "ein. Jetzt synchronisieren (rechte obere Ecke) sollte angeboten werden. Tu es.

Wenn Sie weitere Fehlermeldungen erhalten (ich würde es nicht wissen, weil ich es umgekehrt gemacht habe), fehlen möglicherweise die Apache-Dateien in Ihrem Projekt, da Apache nicht mehr unterstützt wird. Finden Sie sie in C/D: Benutzer/Ihr Name/AppData/Lokal/Android/Sdk/Plattformen/Android-23/Optional und kopieren Sie sie in Ihren Ordner project/app/libs. Sie sollten dort eine optionale.json- und eine org.Apache.http.legacy.jar-Datei haben. Sie sollten besser auf die Website von Apache gehen und die neueste Version herunterladen: http://hc.Apache.org/downloads.cgi Entpacken Sie sie an einer beliebigen Stelle, öffnen Sie sie, gehen Sie zu "lib", Kopieren Sie die Datei httpclient-4.5.1.jar und ersetzen Sie die Datei org.Apache.http.legacy.jar durch diese.

Synchronisieren Sie Ihr Projekt und erstellen Sie es neu/bereinigen Sie es.

Öffnen Sie für alle Fälle Ihr Terminal (L/H unten in Android Studio) und geben Sie "gradlew clean" ein. Es werden ein paar Dinge installiert. Sobald es fertig ist, tippe "gradlew assemble" ein. Es wird einige Minuten dauern, bis der Vorgang abgeschlossen ist, aber es werden Ihnen die Fehler angezeigt, falls Sie einen haben. Wenn Sie im Terminal nichts eingeben können, starten Sie den Befehl Eingabeaufforderung (Windows-Taste + R), geben Sie cmd ein, drücken Sie OK und klicken Sie mit der rechten Maustaste auf den Titel des kleinen schwarzen Popup-Bildschirms (C:\WINDOWS\system32\cmd.exe). , Eigenschaften, Optionen, im unteren Bereich des Fensters überprüfen Sie, ob die Option "Legacy-Konsole verwenden" aktiviert ist. Starten Sie A.Studio neu.

Viel Glück!

1
Immy

In meinem Fall habe ich eine meiner Bibliotheken in meinem Projekt Android aktualisiert.

Ich verwende Reservoir als Cache-Speicherlösung: https://github.com/anupcowkur/Reservoir

Ich ging von:

compile 'com.anupcowkur:reservoir:2.1'

Zu:

compile 'com.anupcowkur:reservoir:3.1.0'

Der Autor der Bibliothek muss die Commons-Io-Bibliothek aus dem Repo entfernt haben, damit meine App nicht mehr funktioniert.

Ich musste das Commons-io manuell einfügen, indem ich dies auf gradle hinzufügte:

compile 'commons-io:commons-io:2.5'

https://mvnrepository.com/artifact/commons-io/commons-io/2.5

0
Simon

Ich habe Folgendes geklont: https://github.com/google/play-licensing

Dann habe ich das in mein Projekt importiert.

0
Likwidsage