Hintergrund
Auf Android Marshmallow hat Google die Unterstützung des Apache HTTP-Clients (Link hier ) vollständig entfernt, da die Leistung im Vergleich zu den Alternativen nicht gut ist.
Dies könnte auch die Ursache dafür sein, dass so viele Apps auf Android Marshmallow abstürzen.
Das Problem
Mit Google können Sie diese API weiterhin verwenden, nur nicht als integrierte API, indem Sie diese Zeile zur Gradle-Datei hinzufügen:
useLibrary 'org.apache.http.legacy'
Also, das habe ich getan:
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
Und:
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"
}
Als ich es ausprobierte, wurde es gut kompiliert (es wurden keine Fehler angezeigt und ich konnte die Proof-of-Concept-App ausführen, da sie keinen speziellen Code enthält), aber als ich versuchte, einige der mir bekannten Klassen zu verwenden sind Teil der alten API (wie "HttpClient" -Klasse), ich sehe, dass es mir nicht erlaubt, dies zu tun.
Ich weiß, dass es nicht empfohlen wird, diese Lösung zu verwenden, aber wir müssen die App zumindest vorübergehend einsatzbereit haben, bis wir zu 100% an allen Dingen arbeiten, die sich für Android Marshmallow ändern sollten, und wir wollen keine Überraschungen in der Form von Abstürzen.
Hier ist ein Screenshot:
Die Frage
Warum kommt es vor? Habe ich es richtig benutzt?
EDIT: über dieses Problem hier berichtet:
quelle
Antworten:
Android Studio beschwerte sich, dass
org.apache.http
Klassen mögenwurden vermisst.
Also habe ich hinzugefügt,
org.apache.http.legacy.jar
was imAndroid/Sdk/platforms/android-23/optional
Ordner zu istapp/libs
Ich habe diese Zeile auch zu meiner
app.gradle
Datei hinzugefügtcompile files('libs/org.apache.http.legacy.jar')
Wenn Sie jedoch mehr Bibliotheken verwenden, können Sie diese verwenden
compile fileTree(dir: 'libs', include: ['*.jar'])
Dadurch wurden alle meine Fehler behoben, die verursacht wurden, weil Google die Unterstützung des Apache HTTP-Clients entfernt hat.
quelle
IOExcpetion: Can't write [path to classes.jar] (Can't read [path to libs/org.apache.http.legacy.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [org.apache.http.legacy.jar:org/apache/commons/codec/binary/Hex.class]))
Verwendet noch jemand Proguard? Irgendwelche Ideen?Die useLibrary 'org.apache.http.legacy' funktionierte für mich erst, als ich die Gradle-Tools-Version in meiner Hauptdatei build.gradle meines Android Studio-Projekts wie folgt aktualisiert habe:
dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }
quelle
Perfekte Lösung, indem Sie eine einfache Dateipfadprüfung durchführen. durch Laufen
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 } } }
Sie erhalten so etwas wie unten
Also los, das Glas ist da. Aus irgendeinem Grund wurde es nicht zum Projekt hinzugefügt. aber Sie können es immer manuell hinzufügen, denke ich.
quelle
Nach vielen frustrierenden Stunden funktionierte Folgendes:
1. Suchen Sie das Apache-Glas. Es sollte sich irgendwo befinden wie:
C:\Users\<yourname>\AppData\Local\Android\sdk\platforms\android-23\optional
2. Kopieren Sie
org.apache.http.legacy.jar
in Ihren libs-Ordner.Klicken Sie entweder mit der rechten Maustaste auf libs -> Einfügen oder navigieren Sie mit Ihrem Datei-Explorer zum libs-Ordner Ihres Projekts und fügen Sie ihn ein.
Wenn Sie wie ich keinen libs-Ordner haben, erstellen Sie ein neues Projekt und importieren Sie alle relevanten Dateien an die entsprechenden Stellen.
3. Klicken Sie hier,
ok
um dies zu sehen4. Wichtigster Schritt: Klicken Sie mit der rechten Maustaste auf den Apache-Ordner und wählen Sie
Add As Library
. Sieh dir das anHoffe, das hilft jemandem, mit seinem Leben weiterzukommen.
quelle
Die obige Antwort hilft nur dabei, die Debug-Builds auszuführen und Builds freizugeben, die Gradle verwenden.
Fügen Sie dies in das Anwendungs-Tag in der Manifestdatei auf allen Projektinstanzen ein, die die älteren Apache-Klassen verwenden:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
Dies ist hilfreich für diejenigen, die beim Kompilieren noch Eclipse- und Ant-Skripte verwenden.
quelle
Ich weiß, das ist ein dummer Grund, aber auf der Liste versuchen Sie es ...
Ich habe dieses Problem kürzlich festgestellt und es wird durch die Pfadlängenbeschränkung verursacht, die meiner Meinung nach maximal 256 Zeichen beträgt.
Verschieben Sie Ihr Projekt und der Build wird erfolgreich sein. Hoffen Sie, dass diese Arbeit für Sie funktioniert.
quelle
Legacy Apache Bibliothek befindet sich in
[ANDROID_SDK]\platforms\android-23\optional\org.apache.http.legacy.jar
So können Sie es kopieren können innerhalb Sie projizieren Libs oder Verwendung
compile files("${android.getSdkDirectory().getAbsolutePath()}" + File.separator + "platforms" + File.separator + "android-23" + File.separator + "optional" + File.separator + "org.apache.http.legacy.jar")
in Ihrem /app/build.gradle
quelle
Zuerst müssen Sie das in Ihrem libs-Ordner überprüfen
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' }
quelle
Aktivieren Sie dies in sdk / platform / android-23 / optional / optional.json
[ { "name": "org.apache.http.legacy", "jar": "org.apache.http.legacy.jar", "manifest": false } ]
quelle
Entfernen
useLibrary 'org.apache.http.legacy'
aus dem build.gradle und ich habe diese Zeile auch zu meiner app.gradle-Datei hinzugefügt
compile files('libs/org.apache.http.legacy.jar')
Wenn Sie jedoch mehr Bibliotheken verwenden, können Sie diese verwenden
compile fileTree(dir: 'libs', include: ['*.jar'])
Die CoPLaS-Antwort hat meine Probleme behoben.
quelle
So verwenden Sie Apache HTTP-Klassen für API 23+ weiter:
Stellen Sie zunächst sicher, dass Sie die Gradle-Abhängigkeit in das
build.gradle
f einfügenbuildscript { dependencies { classpath 'com.android.tools.build:gradle:2.0.0' } }
Fügen Sie dann die Referenz in
build.gradle
Ihr Projekt ein:android { compileSdkVersion 23 buildToolsVersion "23.0.0" useLibrary 'org.apache.http.legacy' ... }
quelle
Eine einfache Möglichkeit, dieses Problem zu beheben, ist C: \ Benutzer \ Benutzername \ AppData \ Local \ Android \ sdk \ Plattformen. Hier löschen Sie Ihr Android-23 und aktualisieren Sie Ihre API 23 aus dem SDK-Manager erneut. Es wird Ihr Problem lösen.
quelle