programing

Android Gradle Apache HttpClient가 존재하지 않습니까?

mailnote 2023. 9. 8. 21:39
반응형

Android Gradle Apache HttpClient가 존재하지 않습니까?

IntelliJ 프로젝트를 Android Studio의 Gradle 시스템으로 변환하려고 하는데 Apache HttpClient에서 오류가 발생하고 있습니까?제가 뭔가를 놓쳤나요? 오류는 다음과 같습니다.

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

내 build.gradle 파일은 다음과 같은 종속성을 가집니다.

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')
}

많은 사람들이 비슷한 문제를 겪고 있는 것 같지만 SO나 Google 모두 해결책이 없기 때문에 이 질문이 미래의 검색자들에게 도움이 되기를 바랍니다.

target sdk를 23으로 사용하는 경우 build.gradle에 아래 코드를 추가합니다.

android{
    compileSdkVersion 23
    buildToolsVersion '23.0.1'
    useLibrary  'org.apache.http.legacy'
}

빌드 스크립트를 다음으로 변경합니다.

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

자세한 내용은 이 링크를 참조하십시오.

이런 문제가 있었는데 다음 페이지를 찾았습니다.여기서 apache 라이브러리는 더 이상 사용되지 않지만 제거되지 않으므로 작동할 수 있습니다.그렇지 않아요.

보세요.

그리고 여기서는 프로젝트에 Apache 라이브러리를 포함하는 방법을 볼 수 있습니다.

보세요.

두번째 링크에서 추천하는 대로 build.gradle 파일에 following을 추가하여 문제를 해결하였습니다.

android {
    useLibrary 'org.apache.http.legacy'
}

그러나 gradle 1.3.0-beta2 이상을 사용하는 경우에만 작동하므로 하위 버전의 경우 스크립트 종속성을 구축하기 위해 이를 추가해야 합니다.

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

이 라이브러리를 에 추가합니다.build.gradle

 android {
      useLibrary 'org.apache.http.legacy'
 }

사용하지 않는 Apache HttpClient를 새 Http로 교체할 것을 제안합니다.URL 연결.

이것은 더 깨끗한 해결책이며, 마이그레이션이 상당히 쉬우며, 일반적으로 해킹/패치/해결을 시도하는 것보다 최신 SDK 변경 사항을 고수하는 것이 좋습니다. 대개 나중에 후회하게 됩니다. :)

1단계

HttpGet httpGet = new HttpGet(url);

다음이 됩니다.

URL urlObj = new URL(url);

2단계

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

다음이 됩니다.

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

2단계 bis

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

다음이 됩니다.

int status = urlConnection.getResponseCode();

알았다.org.apache.http.legacy.jarAndroid/Sdk/platforms/android-23/optional를로app/libs

그리고 이 행을 app.gradle 파일에 추가했습니다.

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

하지만 독 라이브러리를 더 많이 사용하는 경우 이 방법을 사용할 수 있습니다.

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

기본적으로 다음을 추가하기만 하면 됩니다.

useLibrary  'org.apache.http.legacy'

의 에게build.gradle파일.파일.

저도 비슷한 문제에 부딪혔는데, 비슷한 방법으로 해결하실 수 있을 겁니다.

으로 해 해 으로를 제외하고 시도해 보십시오.httpclienthttpmime:

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'
} 

제 경우에는 다음과 같은 항아리를 이용하여 고쳤습니다.

build.gradle 을 합니다 에서 합니다 을 에서 httpclienthttpmime:

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'
}

저도 같은 문제에 부딪혔어요.다니엘 누젠트의 대답이 조금 도움이 되었습니다 (그의 충고를 따라간 후)HttpResponse발견되었습니다 - 하지만HttpClient여전히 행방불명).

그래서 이것이 저를 위해 고쳐준 것입니다.

  1. (아직 완료되지 않은 경우 이전 수입 명세서를 추천합니다.)
  2. http://hc.apache.org/downloads.cgi 를 방문합니다.
  3. 4.5.1.zip터em법ny
  4. 붙여넣기 를 httpcore-4.4.3&httpclient-4.5.1.jar인에project/libs
  5. jar를 마우스 오른쪽 단추로 클릭하고 Add as library(라이브러리로 추가)를 선택합니다.

도움이 되길 바랍니다.

지누와 다니엘의 완벽한 대답

여기에 completeSdkVersion이 19(IN MY CASE)인 경우 이를 사용하여 문제를 해결했습니다.

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'

completeSdkVersion이 23이면 를 사용합니다.

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'
    }
}

이것이 제가 한 일이고, 저에게는 효과가 있습니다.

1단계: 이것을 build.grade에 추가합니다(파일명: app)

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

2단계: 프로젝트를 동기화하고 완료합니다.

그 주제에 대해 며칠을 보낸 후에, 저는 마침내 그것을 풀 수 있었습니다.아쉽게도 확장 파일을 사용하려면 필요합니다.여기 계신 몇몇 분들이 해결책을 제시했지만, 저에게는 시간을 많이 절약할 수 있는 몇 가지 사소한 세부 사항이 빠져 있었습니다.여러분의 소중한 시간을 절약하기 위해 저와 같은 초보자들을 위한 일련의 사건들을 소개합니다.

먼저 D에서 "library" 폴더를 가져왔습니다.\Users\Imre\AppData\Local\Android\sdk1\extra\google\play_licensing은 파일, 새로 만들기, 가져오기 모듈로 이동하고 "library" 폴더로 이동하여 프로젝트에 대한 라이센스를 부여합니다.SDK Manager를 열고 팝업 화면 하단의 "Standalone SDK Manager 실행"을 클릭하면 포인터를 하단의 "Extras" 폴더 위에 올려 놓을 수 있으며 노란색 작은 정보를 통해 가져올 패키지를 찾을 수 있습니다.

이 작업을 마치면 왼쪽 창에서 "프로젝트"가 있는 "라이브러리" 섹션으로 이동하고 그 안에서 "Android" 탭을 엽니다.라이브러리의 java 섹션을 열고 APK 확장 정책 클래스를 엽니다.오류가 있는 경우 org.apache.http를 가져옵니다.값 쌍과 가져오기 org.apache.http.client.utils의 이름을 지정합니다.URLEncodedUtils는 옅은 회색이며 build.gradle(프로젝트: 무엇이든 간에)을 열고 "dependancements(의존 관계)" 아래의 "buildscript(빌드스크립트)"에 "classpath" com.android(클래스 경로)가 있는지 확인합니다.tools.build:gradle:1.5.0"이 포함되어 있습니다.당신의 경우에는 1.5.0이 다를 수 있습니다.스튜디오 버전에 따라 다를 것 같습니다.저는 1.5.1입니다.최신 버전인 경우 번호를 업데이트하라는 메시지가 나타납니다.

그런 다음 "build.gradle(Module:library)"로 이동하여 "android" 섹션에 "used Library 'org.apache.http.legacy'를 포함합니다.지금 동기화(R/H 상단 모서리)를 제공해야 합니다.해요.

오류 메시지가 더 나오면(반대로 했기 때문에 알 수 없습니다) Apache가 더 이상 지원되지 않으므로 프로젝트에서 Apache 파일이 누락될 수 있습니다.C/D에서 찾기:사용자/사용자 이름/AppData/Local/Android/Sdk/platforms/Android-23/옵션을 사용하여 프로젝트/App/libs 폴더에 복사/붙여넣습니다.옵션인 .json과 org.apache.http.legacy.jar 파일이 있어야 합니다.http://hc.apache.org/downloads.cgi 원하는 곳에서 압축을 풀고 열고 "lib"로 이동한 후 httpclient-4.5.1.jar 파일을 복사한 후 org.graphics.jar 파일로 대체하는 것이 좋습니다. un 원하는 곳에서 압축을 풀고 열어 "lib"로 이동합니다.

프로젝트를 동기화하고 재구성/정리하면 좋습니다.

만일의 경우를 대비하여 단말기(Android Studio의 L/H 하단)를 열고 "gradlew clean"을 입력합니다.그것은 몇 가지를 설치할 것입니다.작업이 완료되면 "gradlew assembly"를 입력합니다.완료하는 데는 몇 분 정도 걸리겠지만, 물론 오류가 있으면 오류가 발생합니다.터미널에 아무것도 입력할 수 없으면 명령 프롬프트(Windows button+R)를 실행하고 cmd를 입력한 후 확인을 누른 후 검은색 작은 팝업 화면의 제목을 마우스 오른쪽 버튼으로 클릭합니다(C:\WINDOWS\system32\cmd.exe), 윈도우 하단의 Properties, Options에서 "Use legacy console"(레거시 콘솔 사용)이 두껍게 표시되는지 확인합니다.A을(를) 다시 시작합니다.스튜디오.

행운을 빕니다.

재고 안드로이드에서 제공되는 Apache HTTP 클라이언트의 버전은 매우 오래되었습니다.

Google Android 1.0은 Apache HttpClient의 사전 BETA 스냅샷과 함께 출시되었습니다.첫 번째 Android 릴리스와 일치하기 위해 Apache HttpClient 4.0 API를 조기에 동결해야 했지만, 많은 인터페이스와 내부 구조는 여전히 완전히 해결되지 않았습니다.Apache HttpClient 4.0이 성숙해 갈 때 프로젝트는 Google이 최신 코드 개선 사항을 코드 트리에 통합할 것으로 예상했습니다.불행하게도 그것은 일어나지 않았습니다.

사용하지 않는 오래된 라이브러리를 계속 사용할 수 있는 동안useLibrary 'org.apache.http.legacy'(@Jinu 등이 제안하는) 해결책, 당신은 정말로 힘든 일을 겪고 네이티브 안드로이드와 같은 다른 것으로 업데이트해야 하거나, 만약 그것이 당신의 요구를 충족시키지 못한다면, 당신은 OkHttp 라이브러리를 사용할 수 있습니다.HttpUrlConnection어쨌든 내부적으로 근거를 두고 있습니다.

OkHttp에는 Apache 클라이언트와 동일한 API를 사용하는 호환성 계층이 있지만, 동일한 기능을 모두 구현하는 것은 아니므로 마일리지가 달라질 수 있습니다.

@MartinPfefer에서 제안한 대로 Apache 클라이언트의 최신 버전을 가져올있지만, 이전에 사용하던 클래스 및 메서드의 대부분이 더 이상 사용되지 않았을 가능성이 있으며 업데이트하면 코드에 버그가 발생할 위험이 상당히 큽니다(예: pr 뒤에서 작동했던 연결을 찾았습니다).oxy가 더 이상 작동하지 않음), 그래서 이것은 좋은 해결책이 아닙니다.

위의 답변들 중 어느 것도 저에게 완전히 맞지 않아 글을 올려야 했습니다.

안드로이드 스튜디오를 사용하고 있습니다.

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

compileSdkVersion 23
buildToolsVersion "23.0.3"

1단계: lastest jar 파일 다운로드(http://www-eu.apache.org/dist/ /download components/download components/download components/download components/download components-client-4.5.2-bin.z

2단계: .jar 파일을 모듈의 libs 폴더(이미 존재하지 않는 경우 생성)에 복사(앱 또는 라이브러리일 수 있음)

3단계: 병을 마우스 오른쪽 단추로 클릭하고 "Add as Library"(라이브러리로 추가).자동으로 jar 파일을 모듈의 gradle 파일에 종속성으로 추가합니다.

4단계: 이제 문제가 자동으로 해결되지만 앱에서 proguard를 사용하는 경우 중복된 클래스 파일에 대한 경고를 제공하고 빌드할 수 없습니다.알려진 버그이며 프로가드 규칙에 다음을 추가해야 합니다.

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

행운을 빕니다.

저의 경우 안드로이드 프로젝트에서 제 라이브러리 중 하나를 업데이트했습니다.

캐시 스토리지 솔루션으로 리저버(https://github.com/anupcowkur/Reservoir )를 사용하고 있습니다.

나는 다음에서 왔습니다.

compile 'com.anupcowkur:reservoir:2.1'

받는 사람:

compile 'com.anupcowkur:reservoir:3.1.0'

도서관 저자가 레포에서 커먼시오 도서관을 제거해서 내 앱이 더 이상 작동하지 않게 했음에 틀림없습니다.

gradle에 이 내용을 추가하여 commons-io를 수동으로 포함시켜야 했습니다.

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

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

나는 다음을 복제했습니다: https://github.com/google/play-licensing

그런 다음 프로젝트에 그것을 들여왔습니다.

언급URL : https://stackoverflow.com/questions/31433687/android-gradle-apache-httpclient-does-not-exist

반응형