IT박스

Android 지원 중단 아파치 모듈 (HttpClient, HttpResponse 등)

itboxs 2020. 12. 8. 07:52
반응형

Android 지원 중단 아파치 모듈 (HttpClient, HttpResponse 등)


Android는 API 레벨 22부터 Apache 모듈을 더 이상 사용하지 않으므로 제 질문은 예를 들어 HttpResponseAndroid SDK가 아닌 Apache 라이브러리에서 어떻게 사용  합니까? 문제는 두 패키지 모두 동일하다는 것입니다.

그러나 예를 들어 Apache HttpGet에서 호출되기 때문에 괜찮습니다 HttpGetHC4.


HttpClient 메서드는 더 이상 사용되지 않습니다. 이제이 예제에서 볼 수있는 것처럼 URLConnection을 사용할 수 있습니다.

private StringBuffer request(String urlString) {
    // TODO Auto-generated method stub

    StringBuffer chaine = new StringBuffer("");
    try{
        URL url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setRequestProperty("User-Agent", "");
        connection.setRequestMethod("POST");
        connection.setDoInput(true);
        connection.connect();

        InputStream inputStream = connection.getInputStream();

        BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream));
        String line = "";
        while ((line = rd.readLine()) != null) {
            chaine.append(line);
        }
    }
    catch (IOException e) {
        // Writing exception to log
        e.printStackTrace();
    }
    return chaine;
}

이것이 누군가를 돕고 있기를 바랍니다.


Apache의 모듈을 사용하는 데 나쁜 것은 없습니다. Google은 성공적인 포크를 만들지 못했기 때문에 큰 혼란을 겪었습니다. Google과 Apache 통합은 Jesse Wilson이 감독했습니다. 그는 Google에서 일하고 모든 것을 엉망으로 만든 다음 광장에서 작업하는 동안 자신의 라이브러리 (OkHttp)를 만들었습니다. 정말 추한 이야기입니다.

개선 및 버그 수정이없는 이전 버전의 Apache 라이브러리가 포함되어 있기 때문에 레거시 JAR 파일을 사용하지 않는 것이 좋습니다 (아주 오래된 베타 이전 스냅 샷임 ). Apache 구성 요소 공식 페이지 에서 볼 수 있듯이 모든 Android 버전과 호환되는 새로운 4.4 버전이 있습니다. 이전 버전과의 충돌을 피하기 위해 다른 네임 스페이스에서 다시 패키징해야했습니다.

Maven 에서 종속성을 추가 하거나 GitHub에서 릴리스를 다운로드 할 수 있습니다 .

dependencies {
    compile "cz.msebera.android:httpclient:4.4.1.2"
}

그리고 교체 org.apache.http와 함께 cz.msebera.android.httpclient당신의 수입이 어떻게 있도록 :

import cz.msebera.android.httpclient.Header;
import cz.msebera.android.httpclient.HttpHost;
import cz.msebera.android.httpclient.HttpResponse;

예, 작업 코드를 다시 작성하는 데 시간을 낭비하지 않고 Apache 라이브러리를 계속 사용할 수 있습니다!

Apache 구성 요소와 HttpURLConnection 사용의 차이점은 HttpURLConnection은 응답 캐싱을 사용합니다. 그리고 그게 다입니다. 나는 당신이 정말로 그것을 원하는지 확신하지 못하며 또한 언제든지 직접 구현할 수 있습니다.

그건 그렇고, HttpURLConnection과 같은 대안을 시도했습니다. Apache의 힘과 단순성에 가깝지 않습니다.


Android Marshmallow (sdk 23)에서 다음을 추가 할 수 있습니다.

useLibrary 'org.apache.http.legacy'

android {}해결 방법으로 섹션의 build.gradle . 이것은 Google의 일부 gms 라이브러리에 필요한 것 같습니다!


내가 당신이라면 HttpClient다음과 같은 이유로 사용하지 않습니다 .

Apache HTTP 클라이언트는 Eclair 및 Froyo에 버그가 적습니다. 이 릴리스에 가장 적합한 선택입니다.

Gingerbread 이상에서는 HttpURLConnection이 최선의 선택입니다.

참고

Use OKHttp or HttpUrlConnection. And also I recommend not using the Apache library, because it may not be efficient for Android.


I guess you could use the Apache libraries directly in your project, and not the ones shipped with Android (you can get more control this way - and compile with an older SDK version if you need to).

In your build.gradle, add this line :

dependencies {
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

To prevent warnings, add these lines as well :

android {

     -- YOUR EXISTING LINES --

     packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }

}

Add this to the dependencies of your app, and then it will work correctly:

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

If still want to use httpclient library, you should add some description to the build.gradle file. And it seems that the content added to build.gradle file is determined by the target Android project build for.

if targeted for API22 and older, then should add the following line into build.gradle

dependencies {
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

if targeted for API23 and later, then should add the following line into build.gradle

dependencies {
    compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1'
}

Here is the reference link


Use openConnection().

The HttpClient documentation suggests that.

Refer this answer.

참고URL : https://stackoverflow.com/questions/29294479/android-deprecated-apache-module-httpclient-httpresponse-etc

반응형