Cannot resolve DataBindingComponent after migrate to AndroidX

문제

Databinding + Kotlin을 사용하는 Android Studio 버전을 3.2로 올리고 ‘Migrate to AndroidX’ 를 실행하면 DataBindingComponent 객체를 찾을 수 없다면서 아래와 같은 로그가 뜬다.

error: cannot generate view binders java.lang.NullPointerException
  	at android.databinding.tool.store.SetterStore.getMatchingMultiAttributeSetters(SetterStore.java:615)
  	at android.databinding.tool.store.SetterStore.getMultiAttributeSetterCalls(SetterStore.java:502)
  	at android.databinding.tool.BindingTarget.resolveMultiSetters(BindingTarget.java:220)
  	at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:257)
  	at android.databinding.tool.DataBinder.<init>(DataBinder.java:58)
  	at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:114)
  	at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:348)
  	at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:233)
  	at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:128)
  	at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:212)
  	at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:197)
  	at android.databinding.annotationprocessor.ProcessDataBinding.doProcess(ProcessDataBinding.java:98)
  	at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:73)
  	at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:99)

해당 DataBindingComponent 객체는 프로젝트에 Databinding이 활성화 되있고, @BindingAdapter 어노테이션을 사용할 경우에 생성되는 클래스이다.
이 문제는 AndroidX 를 적용한 프로젝트 A와 A가 의존성을 가지는 라이브러리 프로젝트에서 AndroidX를 사용하지 않아 발생하는 문제로, 쉽게 말해 패키지 충돌이라 보면 된다.

실제로 AndroidX를 사용하지 않을 경우 DataBindingComponent 의 패키지는 android.databinding.DataBindingComponent 이고, AndroidX를 사용할 경우에는 androidx.databinding.DataBindingComponent가 된다.

해결 방법

Studio 에서 Project View를 ‘Project’에 맞춘 다음, ‘External Libraries’ 항목을 클릭하면 해당 프로젝트가 의존하고 있는 모든 라이브러리 프로젝트가 나온다. 이 라이브러리 중 Databinding를 활성한 라이브러리를 찾고, 그 중 AndroidX를 사용하지 않는 라이브러리를 찾으면 된다.

이 방법이 번거로운 경우에는, 해당 모듈의 build.gradle 에서 하나씩 지워보면서 확인해도 된다.

본인 같은 경우에는 두 개의 라이브러리가 이 대상이 되었는데, 하나는 프로젝트의 코어 프로젝트인 BaseApp 와 다른 하나는 WindSekirun/BindAdapters 에서 발생하고 있었다.
따라서 두 개의 라이브러리 코드에서 AndroidX로 마이그레이션하고, 마이그레이션한 버전을 다시 해당 프로젝트에 적용시키니 적용이 되었다.