본문 바로가기

Android/Tips

(에러) cleartext http traffic to not permitted 문제 해결

Android 9 (Pie) 부터 http 접근이 기본적으로 제한되도록 변경되었습니다. https 가 이제는 거의 기본인듯 하네요.

해당 내용은 해당 링크에서도 확인하실 수 있습니다. (하단 스크린샷 참고) 

https://developer.android.com/about/versions/pie/android-9.0-changes-28?hl=ko

 

동작 변경사항: API 레벨 28+를 타겟팅하는 앱  |  Android 개발자  |  Android Developers

Android 9(API 레벨 28)에서는 Android 시스템에 많은 변경사항이 도입됩니다. 다음과 같은 동작 변경사항은 API 레벨 28 이상을 타겟팅하는 앱에만 적용됩니다. targetSdkVersion이 API 레벨 28 이상으로 설정된 앱은 이러한 동작을 적절히 지원하도록 앱을 수정해야 합니다. Android 9에서 실행되는 모든 앱에 영향을 미치는 변경사항의 경우 타겟팅하는 API 레벨에 상관없이 동작 변경사항: 모든 앱을 참조하세요. 포그라운

developer.android.com

 

이에 따라 기존에 Api 서버 또는 이미지 서버가 Http 로 되어있을 경우 cleartext http traffic to not permitted 에러와 함께 정상적으로 응답을 받지 못하게 됩니다. (단, targetSdk 가 28 (Android Pie) 미만인 경우에는 사용하더라도 정상동작 합니다.) 

 

이에 맞는 대처방법으로는 AndroidManifest.xml 파일의 <application> 수정을 통해 쉽게 http 허용이 가능합니다. 

 

<방법> 4가지의 방법 중에 자신의 프로젝트에 맞게 1개의 방법만 수행하시면 됩니다. 

 

- AndroidManifest.xml 파일 내의 <application> 부분에 android:usesCleartextTraffic="true" 로 설정

AndroidManifest.xml

- 별도의 res/xml/netsork_security_config.xml 생성. 이 방법은 내가 원하는 host 만 http 를 허용할 경우에 사용합니다. 

AndroidManifest.xml
res/xml/network_security_config.xml

- targetSdk를 28미만으로 지정한다. 해당 방법은 그렇게 추천하지 않습니다. 버전이 낮아지면 Android 버전 업그레이드에 따른 좋은 기능을 사용하지 못하므로 앞의 방법들을 추천 

 

- (추가)AndroidManifest.xml 파일 내에 targetSandboxVersion = 1  로 설정. 해당 값은 2 이상부터는 기본값으로 usesCleartextTraffix=false 로 변경됩니다. 이 속성의 숫자가 높을수록 보안이 높아집니다. 제한사항으로 Android 8.0(API 26) 이상을 target 하는 Instant App 의 경우는 속성값을 2로 설정해야 합니다.  그리고 해당 값은 앱 업데이트 진행시 값의 다운그레이드는 불가하다고 하니 각자의 상황에 맞게 쓰셔야 할 듯 하네요.

저의 경우는 Instant App 도 아니고 해서 첫번 째 또는 두번 째 방법이 더 간편한 것 같네요. 

 

 

대부분은 아시겠지만 알면서도 잊어먹고 꼭 에러를 보고서야 고치곤 합니다. 습관화가 되었으면 하는 바램입니다. 

모두 즐거운  개발 하시길~~!!