본문 바로가기

안드로이드/Report

Android: ERR_CLEARTEXT_NOT_PERMITTED 오류

웹뷰를 사용하다 보면 'ERR_CLEARTEXT_NOT_PERMITTED' 를 볼 수 있다.

원인은 앱이 cleartext를 허용하지 않았기 때문인데, 

앱이 안드로이드 9(Pie, API 28)이상을 타겟팅하는 경우 기본적으로 usesCleartextTraffic 속성 기본값이 false이다.

따라서 TLS를 사용하지 않는 도메인의 경우, 네트워크 통신이 기본적으로 불가능하다.

아래의 방법 중 하나를 사용해서 처리를 해주면 정상적으로 통신이 가능하다.

 

1. useCleartextTraffic 속성값 변경

AndroidManifest.xml에서 <application>의 useCleartextTraffic 속성값을 true로 변경한다.

해당 방법은 매우 간단하지만 Android Developer에서는 추천하지 않는 방법이다. 모든 도메인에 대한 접근이 가능하도록 설정하는 것은 보안상 적절하지 않다는 뜻이다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="...">
	
    ...

    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
	
    ...
    
    </application>
</manifest>

2. networkSecurityConfig 설정

해당 속성은 AndroidManifest.xml에서 <application>의 속성으로 접근을 허용할 도메인에 대한 설정을 해줄 수 있는 방법으로 Android 7.0(Nougat, API 24)에 추가되었다.

config파일을 생성한 후에 AndroidManifest.xml에 속성값으로 추가해주면 된다.

 

 

network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your domain</domain>
    </domain-config>
</network-security-config>

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="...">
	
    ...

    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
	
    ...
    
    </application>
</manifest>

 

참고 링크:

https://developer.android.com/about/versions/pie/android-9.0-changes-28

 

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

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

developer.android.com

https://developer.android.com/training/articles/security-config.html

 

네트워크 보안 구성  |  Android Developers

앱 개발자가 안전한 구성 파일에서 네트워크 보안 설정을 사용자설정할 수 있는 기능입니다.

developer.android.com