티스토리 뷰

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.

이 문제는 androidx와 관련된 문제이다

아무 문제 없이 빌드하다가 어느 순간 나타난 오류로 발생 이유를 추측하기 어렵다

 

구글링을 통해 여러 자료들을 본 후 결론은 앞으로 안드로이드 프로그래밍에 androidx를 표준으로 만들려 하는 것으로 추측된다

안드로이드가 업데이트를 하면서 androidx로 바꿔야 할 것 같아 미리 대부분의 것들을 androidx로 바꾸었다

바꾸는 과정은 안드로이드 스튜디오에서 지원하여 생각보다 간단하게 진행했다

Refactor - Migrate to AndroidX... 를 통해 자동으로 변환이 가능하다

 

이후에도 오류가 사라지지 않아 코드를 전부 확인해봤더니 아직 v7 또는 v4의 Widget들이 import되어 있었다

이러한 것들을 모두 지운 후 androidx로 import를 다시 했다

 

하지만 그럼에도 사라지지 않는 오류..

안드로이드 레퍼런스를 찾아봤더니 xml 파일의 태그가 androidx 버전은 달라진 것을 확인할 수 있었다

대표적으로 ConstraintLayout이 어떻게 바뀌었는지 보면

androidx.constraintlayout.widget.ConstraintLayout

으로 바뀌었다

이렇게 바뀐 태그들을 모두 수정하고 실행했더니 오류가 사라지고 잘 빌드되는 것을 확인할 수 있었다

 

추가로 gradle.properties에 두 줄의 코드를 추가한다

android.useAndroidX=true
android.enableJetifier=true