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 모두 해결책이 없으므로이 질문이 미래의 검색 자에게 도움이되기를 바랍니다.
더 이상 사용되지 않는 Apache HttpClient를 새로운 HttpURLConnection으로 바꾸는 것이 좋습니다.
그것은 더 깨끗한 솔루션이며 마이그레이션하기가 쉽고 일반적으로 해킹 / 패치 / 해결 방법을 시도하는 것보다 최신 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 단계 비스
int status = response.getStatusLine().getStatusCode();
된다 :
int status = urlConnection.getResponseCode();
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'
자세한 내용은이 링크를 따르십시오
이 문제가 발생하여 다음 페이지를 찾았습니다. 여기서 아파치 라이브러리가 더 이상 사용되지 않지만 제거되지 않았으므로 작동해야합니다. 그렇지 않습니다.
참조하십시오 .
여기에서 프로젝트에 아파치 라이브러리를 포함시키는 방법을 볼 수 있습니다
참조하십시오 .
두 번째 링크에서 권장하는대로 build.gradle 파일에 다음을 추가하여 문제를 해결했습니다.
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'
}
폴더에 org.apache.http.legacy.jar
있는 복사Android/Sdk/platforms/android-23/optional
app/libs
이 줄을 app.gradle 파일에 추가했습니다.
compile files('libs/org.apache.http.legacy.jar')
그러나 더 많은 jar 라이브러리를 사용하는 경우이 방법을 사용할 수 있습니다
compile fileTree(dir: 'libs', include: ['*.jar'])
기본적으로 추가해야 할 것은 다음과 같습니다.
useLibrary 'org.apache.http.legacy'
당신에 build.gradle
파일.
나는 같은 문제에 부딪쳤다. Daniel Nugent의 답변은 약간의 도움이되었습니다 (자신의 조언 HttpResponse
을 찾은 HttpClient
후에도 여전히 누락되었습니다).
그래서 나를 위해 고친 것은 다음과 같습니다.
- (아직 완료하지 않은 경우 이전의 수입 명세서를 칭찬하십시오)
- http://hc.apache.org/downloads.cgi를 방문하십시오 .
4.5.1.zip
이진 섹션에서 가져옵니다- 압축을 풀고 및 붙여 넣기
httpcore-4.4.3
&httpclient-4.5.1.jar
의project/libs
폴더 - jar을 마우스 오른쪽 단추로 클릭하고 라이브러리로 추가를 선택 하십시오 .
도움이 되길 바랍니다.
비슷한 문제가 발생하여 비슷한 방법으로 작동시킬 수 있습니다.
첫째, 현재의 구성이 시도 제외 httpclient
에서 httpmime
:
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에서 제외 httpclient
에서 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'
}
Jinu와 Daniel의 완벽한 답변
compileSdkVersion이 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'
그렇지 않으면 compileSdkVersion이 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 (module : app)에 추가
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
2 단계 : 프로젝트 동기화 및 완료
재고 안드로이드에 제공되는 아파치 HTTP 클라이언트의 버전은 매우 오래되었습니다 .
Google Android 1.0은 Apache HttpClient의 베타 이전 스냅 샷과 함께 출시되었습니다. 첫 번째 Android 릴리스와 일치하려면 Apache HttpClient 4.0 API를 조기에 중지해야했지만 많은 인터페이스와 내부 구조는 아직 완전히 해결되지 않았습니다. Apache HttpClient 4.0이 성숙함에 따라 프로젝트는 Google이 최신 코드 개선 사항을 코드 트리에 통합 할 것으로 기대했습니다. 불행히도 그것은 일어나지 않았다.
해결 방법 (@Jinu 및 다른 사람들이 제안)을 통해 더 이상 사용되지 않는 오래된 라이브러리를 계속 사용할 수 는 있지만 useLibrary 'org.apache.http.legacy'
실제로 총알을 물고 다른 것 (예 : 기본 Android HttpUrlConnection
) 또는 업데이트가 필요하지 않은 경우, 당신은 사용할 수 있습니다 OkHttp 라이브러리 무엇입니까 HttpUrlConnection
되어 내부에 근거 어쨌든.
OkHttp는 실제로 Apache 클라이언트와 동일한 API를 사용 하는 호환성 계층 을 가지고 있지만 동일한 기능을 모두 구현하지는 않으므로 마일리지가 다를 수 있습니다.
@MartinPfeffer에서 제안한대로 최신 버전의 Apache 클라이언트를 가져올 수는 있지만 이전에 사용했던 대부분의 클래스와 메소드는 더 이상 사용되지 않으며 업데이트로 인해 버그가 발생할 위험이 매우 높습니다 코드에서 (예를 들어 이전에 프록시 뒤에서 작동했던 일부 연결이 더 이상 작동하지 않는 것을 발견했습니다) 따라서 이것은 훌륭한 해결책이 아닙니다.
주제에 며칠을 보낸 후 마침내 문제를 해결했습니다. 불행하게도 확장 파일을 사용하려면 필요합니다. 이 솔루션은 몇 명의 사람들에 의해 제공되었지만 저에게 많은 시간을 절약 할 수있는 약간의 세부 사항이 누락되었습니다. 소중한 시간을 절약하기 위해 저와 같은 초보자를위한 일련의 이벤트가 있습니다.
먼저 D : \ Users \ Imre \ AppData \ Local \ Android \ sdk1 \ extras \ google \ play_licensing에서 "library"폴더를 File, New, Import Module로 이동하여 "library"폴더로 이동하여 프로젝트로 가져 왔습니다. SDK 관리자를 열고 팝업 화면 하단에서 "Launch Standalone SDK Manager"를 클릭하면 하단의 "Extras"폴더 위에 포인터를 놓으면 작은 노란색 정보가 나타납니다. 가져와야 할 패키지.
이 작업이 완료되면 "프로젝트"가있는 왼쪽 창의 "라이브러리"섹션으로 이동하여 "Android"탭을 엽니 다. 라이브러리의 java 섹션을 열고 APKExpansionPolicy 클래스를여십시오. 오류가 있고 가져 오기 org.apache.http.NameValuePair 및 가져 오기 org.apache.http.client.utils.URLEncodedUtils가 옅은 회색 인 경우 build.gradle (Project : whatever)을 열고 "buildscript"에 있는지 확인하십시오. "dependancies"아래에 "classpath 'com.android.tools.build:gradle:1.5.0"이 포함되어 있습니다. 귀하의 경우 1.5.0이 다를 수 있습니다. Studio 버전에 따라 다릅니다. 광산은 1.5.1입니다. 최신 버전 인 경우 번호를 업데이트하라는 메시지가 표시됩니다.
그런 다음 "build.gradle (Module : library)로 이동하여"useLibrary 'org.apache.http.legacy "를"android "섹션에 포함하십시오. 지금 동기화 (R / H 상단 모서리)가 제공되어야합니다. 해.
추가 오류 메시지가 표시되면 (다른 방법으로 수행했기 때문에 알 수 없음) Apache가 더 이상 지원되지 않으므로 Apache 파일이 프로젝트에서 누락되었을 수 있습니다. C / D : Users / Yourname / AppData / Local / Android / Sdk / platforms / android-23 / optional에서 찾은 다음 프로젝트 / app / libs 폴더에 복사 / 붙여 넣기하십시오. 거기에 optional.json과 org.apache.http.legacy.jar 파일이 있어야합니다. 당신은 아파치의 웹 사이트에 가서 최신 버전을 dowloading 더 나을 수 있습니다 것은 : http://hc.apache.org/downloads.cgi 은 어디서든 당신이 원하는 압축 해제를 열고, "LIB"로 이동 HttpClient를-4.5.1 복사 .jar 파일로 바꾸고 org.apache.http.legacy.jar 파일로 바꾸십시오.
프로젝트를 동기화 및 재 구축 / 정리하십시오.
만약을 대비하여, 터미널 (Android Studio의 L / H 하단)을 열고 "gradlew clean"을 입력하십시오. 몇 가지를 설치합니다. 완료되면 "gradlew assemble"을 입력하십시오. 완료하는 데 몇 분이 걸리지 만 물론 있다면 오류가 발생합니다. 터미널에 아무 것도 입력 할 수 없으면 명령 프롬프트 (Windows 버튼 + R)를 시작하고 cmd를 입력 한 다음 확인을 누르고 작은 검은 색 팝업 화면 제목 (C : \ WINDOWS \ system32 \ cmd.exe)을 마우스 오른쪽 버튼으로 클릭하십시오. , 속성, 옵션, 창 하단에서 "레거시 콘솔 사용"이 두껍게 표시되어 있는지 확인하십시오. A.Studio를 다시 시작하십시오.
행운을 빕니다!
위의 답변 중 어느 것도 나를 위해 완전히 효과가 없었기 때문에 게시해야했습니다.
Android Studio를 사용하고 있습니다
classpath 'com.android.tools.build:gradle:1.5.0'
compileSdkVersion 23
buildToolsVersion "23.0.3"
1 단계 : 최신 jar 파일 다운로드 ( http://www-eu.apache.org/dist//httpcomponents/httpclient/binary/httpcomponents-client-4.5.2-bin.zip )
2 단계 : .jar 파일을 모듈의 libs 폴더에 붙여 넣기 (아직 존재하지 않는 경우 작성) (앱 또는 라이브러리 일 수 있음)
3 단계 : 항아리를 마우스 오른쪽 버튼으로 클릭하고 "라이브러리로 추가". jar 파일을 모듈의 gradle 파일에 종속성으로 자동 추가합니다.
4 단계 : 이제 자동으로 문제가 해결되지만 앱에서 proguard를 사용하는 경우 중복 클래스 파일에 대한 경고가 표시되어 빌드 할 수 없습니다. 알려진 버그이며 보호 규칙에 다음을 추가해야합니다.
-dontwarn org.apache.commons.**
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
행운을 빕니다!
제 경우에는 안드로이드 프로젝트에서 라이브러리 중 하나를 업데이트했습니다.
캐시 저장 솔루션으로 Reservoir를 사용하고 있습니다 : https://github.com/anupcowkur/Reservoir
나는 갔다 :
compile 'com.anupcowkur:reservoir:2.1'
에:
compile 'com.anupcowkur:reservoir:3.1.0'
라이브러리 작성자가 repo에서 commons-io 라이브러리를 제거해야 내 앱이 더 이상 작동하지 않습니다.
이것을 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
'IT' 카테고리의 다른 글
핸들 막대의 인덱스를 사용하여 액세스 배열 항목에 어떻게 액세스합니까? (0) | 2020.04.02 |
---|---|
.gitignore에 나열되었지만 여전히 저장소에있는 파일을 제거하는 방법은 무엇입니까? (0) | 2020.04.02 |
한 서버에서 새로운 서버로 GIT 저장소를 마이그레이션하는 방법 (0) | 2020.04.02 |
bash 명령으로 CPU 스파이크를 만드는 방법 (0) | 2020.04.02 |
T-SQL을 사용하여 일 월과 연도의 날짜를 만듭니다. (0) | 2020.04.02 |