본문 바로가기

소프트웨어/안드로이드

http프로토콜 안드로이드 not permitted by network security policy

안드로이드 개발 시 Retrofit 2 HTTP 접근시 핸드폰 다운로드 후 실행 안되는 현상


# Retrofit2 #Retrofit2 HTTP접근 #Retrofit2 오류 #Retrofit2 network security policy #안드로이드 HTTP접근 #android http 접근 #Retrofit2 JSON


Retrofit 2를 이용하여 URL에 접근하여 JSON 형태의 데이터를 가져오려고 코드를 다 작성해보았다.


안드로이드 스튜디오를 이용해서는 데이터가 가져와 지는데..핸드폰으로 다운로드 하면 데이터를 못가져오는 현상 발생..


콘솔창을 보니...에러가 발생되어져 있다.




W/System.err: java.net.UnknownServiceException: CLEARTEXT communication to est-2.compute.amazonaws.com not permitted by network security policy

W/System.err:     at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:147)

W/System.err:     at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257)

W/System.err:     at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135)

W/System.err:     at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)

W/System.err:     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)


생각해보니 안드로이드스튜디오는 API LV24로 개발중이고 실제 핸드폰은 갤럭시 S10으로 안드로이드 10 (API LV29) 이다.


Android9 (API LV28) 부터는 HTTP 프로토콜은 보안상의 이유로 더이상 연결이 안되는 것으로 되어있다. 즉 HTTPS 프로토콜만 허용한다는 것이다.


해결방법은 늘 존재한다. 아래와 같이 입력을 하면 모든 것이 해결된다.


AndroidManifest.xml 파일의 <application>android:usesCleartextTraffic="true" 로 설정



cleartext HTTP와 같은 cleartext 네트워크 트래픽을 사용할지 여부를 나타내는 flag로 이 플래그가 false로 되어 있으면, 플랫폼 구성 요소 (예 : HTTP 및 FTP 스택, DownloadManager, MediaPlayer)는 일반 텍스트 트래픽 사용에 대한 앱의 요청을 거부하기 때문에 true 변경해주면 된다.


이밖에도 다른 해결방안이 존재하지만 가장 간단한 방법을 적용하는 것이 가장 좋은 방법이니 위와 같이 적용해보자.