Android Marshmallowでは、GoogleはApache HTTPクライアントのサポートを完全に削除しました(リンク here )他の選択肢に比べてパフォーマンスが良くありません。
これは、Android Marshmallowで非常に多くのアプリがクラッシュする原因にもなります。
Googleでは、gradleファイルに次の行を追加することにより、組み込みのAPIとしてではなく、このAPIを引き続き使用できます。
useLibrary 'org.Apache.http.legacy'
だから、これは私がやったことです:
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0'
}
そして:
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"
}
私がそれを試してみたところ、うまくコンパイルされました(エラーは表示されず、特別なコードがないので概念実証アプリを実行できました)が、私が知っているいくつかのクラスを使ってみました(「HttpClient」クラスのような)古いAPIの一部であるため、そうすることはできません。
このソリューションを使用することはお勧めしませんが、Android Marshmallowで変更されるすべてのことを100%実行するまで、少なくとも一時的にそこで動作するようにアプリを準備する必要があります。クラッシュの形で驚きを望んでいません。
スクリーンショットは次のとおりです。
なぜ発生するのですか?正しく使いましたか?
編集:ここでこの問題について報告しました:
Android Studioは、org.Apache.http
クラスが
org.Apache.http.NameValuePair
org.Apache.http.client.utils.URLEncodedUtils
行方不明でした。
そこで、org.Apache.http.legacy.jar
フォルダーにあるAndroid/Sdk/platforms/Android-23/optional
をapp/libs
に追加しました
また、この行をapp.gradle
ファイルに追加しました
compile files('libs/org.Apache.http.legacy.jar')
しかし、より多くのライブラリを使用している場合は、この方法を使用できます
compile fileTree(dir: 'libs', include: ['*.jar'])
これにより、GoogleがApache HTTPクライアントのサポートを削除したために発生したすべてのエラーが解決しました。
useLibrary 'org.Apache.http.legacy'は、次のようにAndroid Studioプロジェクトのメインbuild.gradleファイルのGradleツールバージョンをアップグレードするまで機能しませんでした。
dependencies {
classpath 'com.Android.tools.build:gradle:1.3.0'
}
ここでは、単純なファイルパスチェックを実行することで完璧なソリューションを提供します。実行することにより
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
}
}
}
以下のようなものが得られます
/Users/"yourname"/Development/Android-sdk-macosx/platforms/Android-MNC/Android.jar /Users/"yourname"/Development/Android-sdk-macosx/platforms/Android-MNC/optional/org.Apache .http.legacy.jar
Jarがありますが、何らかの理由でプロジェクトに追加されませんでした。しかし、いつでも手動で追加できます。
多くのイライラする時間の後、次のように機能しました:
1。 Apache jarを見つけます。次のような場所に配置する必要があります。
C:\Users\<yourname>\AppData\Local\Android\sdk\platforms\Android-23\optional
2。 libsフォルダーにorg.Apache.http.legacy.jar
をコピーします。
Libs-> pasteを右クリックするか、ファイルエクスプローラーを使用してプロジェクトのlibsフォルダーに移動し、貼り付けます。
Libsフォルダーがない場合は、私が行ったように、新しいプロジェクトを作成し、関連するすべてのファイルをそれぞれの場所にインポートします。
3。 ok
をクリックします こちらを参照
4。最も重要なステップ:Apacheフォルダーを右クリックし、Add As Library
を選択します。こちらを参照
これが誰かが自分たちの生活を続けるのに役立つことを願っています。
私はこれが愚かな理由であることを知っていますが、リストで試してみてください...
最近この問題が発生しましたが、これはパスの長さの制限が原因で、最大256文字だと思います。
プロジェクトを再配置すると、ビルドが成功します。この作業を期待してください。
上記の答えは、デバッグビルドを実行し、gradleを使用しているビルドをリリースするのに役立ちます。
レガシーApacheクラスを使用するすべてのプロジェクトインスタンスで、マニフェストファイルのアプリケーションタグ内にこれを挿入します。
<uses-library Android:name="org.Apache.http.legacy" Android:required="false" />
これは、コンパイル中にまだEclipseおよびantスクリプトを使用しているユーザーに役立ちます。
にあるレガシーApacheライブラリ
[Android_SDK]\platforms\Android-23\optional\org.Apache.http.legacy.jar
したがって、プロジェクト内にコピーすることができますlibsまたは単に使用する
compile files("${Android.getSdkDirectory().getAbsolutePath()}" + File.separator + "platforms" + File.separator + "Android-23" + File.separator + "optional" + File.separator + "org.Apache.http.legacy.jar")
あなたの/ app/build.gradle
まず、libsフォルダーでそれを確認する必要があります
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'
}
Sdk/platforms/Android-23/optional/optional.jsonでこれを有効にします
[
{
"name": "org.Apache.http.legacy",
"jar": "org.Apache.http.legacy.jar",
"manifest": false
}
]
削除する
useLibrary 'org.Apache.http.legacy'
build.gradleから、この行をapp.gradleファイルにも追加しました
compile files('libs/org.Apache.http.legacy.jar')
しかし、より多くのライブラリを使用している場合は、この方法を使用できます
compile fileTree(dir: 'libs', include: ['*.jar'])
CoPLaSの回答は私の問題を修正しました。
Android MarshmallowでレガシーApache HTTPクライアントを使用する方法は?
API 23+でApache HTTPクラスを引き続き使用するには:
まず、build.gradle
fにgradle dependencieを追加してください
buildscript {
dependencies {
classpath 'com.Android.tools.build:gradle:2.0.0'
}
}
次に、プロジェクトのbuild.gradle
内に参照を追加します。
Android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary 'org.Apache.http.legacy'
...
}
この問題を解決する簡単な方法は、C:\ Users\username\AppData\Local\Android\sdk\platformsです。ここでAndroid-23を削除し、SDKマネージャーからAPI 23を再度更新します。それはあなたの問題を解決します。