3일 전까지 문제없이 잘 돌아가던 안드로이드 프로젝트에서 갑자기 빌드가 안되는 문제가 발생하였습니다.

주말이 지났을 뿐인데 아래와 같은 로그와 함께 gradle sync도 안되는 문제였습니다.

org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':mymodule'.
...
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'assemble' for task ':mymodule:assembleDebug' of type org.gradle.api.DefaultTask.

혹시나 하는 마음에 소스를 1년 전 껄로 돌려보아도 동일하고, 딱히 형상관리에 문제도 없어 보였죠.

gradle 살펴보던 중 가변적인 요소가 하나 눈에 들어왔고, 그 부분이 원인이었습니다.

classpath 'io.fabric.tools:gradle:1.+'

앱 최상위에 있는 build.gradle에 정의된 Fabric 설정이 문제였습니다.

혹시나 해서 Fabric 쪽 릴리즈 페이지를 찾아보이 3월 15일에 업데이트가 있었네요.

https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin

그 전 버전인 1.27.1 버전으로 수정 후 정상동작을 확인하였습니다.

//classpath 'io.fabric.tools:gradle:1.+'
classpath 'io.fabric.tools:gradle:1.27.1'


Android OS 9 Pie 버전부터는 WebView에 일반적인 텍스트로 "http://" URL 접근이 막혔습니다. 

(tagetSdkVersion 28 이상일 경우)

증상 : WebView에서 Webpage not availablenet::ERR_CLEARTEXT_NOT_PERMITTED 오류 발생

참고 : https://developer.android.com/training/articles/security-config#CleartextTrafficPermitted

검색해보니 이를 수정하기 위해서는 3가지 방법이 있습니다. 

(https://stackoverflow.com/questions/45940861/android-8-cleartext-http-traffic-not-permitted)

  • res/xml/network_security_config.xml 추가

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">ebookfrenzy.com</domain>
        </domain-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">amazon.com</domain>
        </domain-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">nytimes.com</domain>
        </domain-config>
    </network-security-config>

    위 파일 추가 후 AndroidManifest.xml 에서 application에 networkSecurityConfig속성 추가

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ...>
        ...
        <application
            ...
            android:networkSecurityConfig="@xml/network_security_config" 

    이 방법은 network_security_config.xml 파일에 앱 내 텍스트로 사용할 URL들이 정의되어 있어야 함.

    cleartextTrafficPermitted 속성이 true일 경우 동작을 함.


  • AndroidManifest.xml 에서 application 의 usesClearTextTraffic 속성 수정

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ...>
        ...
        <application
            ...
            android:usesCleartextTraffic="true"

    이 방법은 텍스트 URL 을 무조건 허용하게 됨.


  • Android Manifest.xml에서 manifet의 targetSandboxVersion 속성을 사용 중일 경우 관련 내용 : https://developer.android.com/guide/topics/manifest/manifest-element#targetSandboxVersion

    위 관련 내용에 따르면 속성 값이 높을수록 보안 수준이 높아지며, 2일 경우 usesCleartextTraffic의 기본 값이 false가 됨. 그래서 이 속성의 값을 1로 변경해야함. 다만 Android 8.0 (API 26) 이상을 타겟팅하는 Android Instant Apps의 경우 이 속성을 2로 설정해야 함.

    <?xml version="1.0" encoding="utf-8"?>
    <manifest android:targetSandboxVersion="1">
        ...


+ Recent posts