ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] kotlin-android-extensions deprecated
    안드로이드 2021. 8. 4. 11:59
    반응형

    개요

    kotlin plugin extension이 deprecated 됐다. 그래서 다른 방법으로 처리를 해야한다. 안드로이드 개발자 사이트에 의하면 viewBinding을 통해 마이그레이션을 하라고 하고 있다.

     

    Gradle 수정

    android > buildFeatures > viewBinding을 true로 설정해준다.

    android {
        ...
        buildFeatures {
            viewBinding = true
        }
    }

    아래의 kotlin-android-extensions plugin 구문을 삭제해준다.

    plugins {
        kotlin("android.extensions")
    }

    또는

    plugins {
        id "kotlin-android-extensions"
    }

    그리고 아래와 같이 kotlin-parcelize를 추가해준다.

     

    plugins {
        id 'kotlin-parcelize'
    }

     Gradle을 모두 수정했다면 Gradle sync를 한번 해준다.

     

    Activity, Fragment 클래스 수정

    1. kotlinx.android.synthetic의 import를 모두 삭제해준다.
    2. 아래와 같이 binding을 선언해준다.
      private lateinit var binding: ActivityLoginBinding
      
      override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
      
              binding = ActivityLoginBinding.inflate(layoutInflater)
      
              val view = binding.root
              setContentView(view)
      }​

      Fragment에서는 onCreateView() 메소드에서 인스턴스를 생성해준다.

    3. view를 synthetic 속성으로 참조했던 대신 binding 클래스를 사용해 참조하도록 변경한다.
      // "name" TextView를 synthetic 속성을 이용해 참조.
      name.text = viewModel.nameString
      
      // "name" TextView를 binding 클래스 인스턴스를 사용해 참조.
      binding.name.text = viewModel.nameString​
      위 코드의 주석처럼 앞에 binding.을 추가하여 binding 인스턴스를 사용하여 참조하도록 수정해준다.

     

    마치며

    kotlin-android-extension이 deprecated 됐다는 warning 메시지가 떠서 수정을 했더니 synthetic을 사용할 수 없다는 에러가 나와 당황했었다. 그래서 찾아보니 위와 같이 안드로이드 개발자 사이트에 잘 정리가 되어있어 정리를 해봤다. 이제 한 Activity를 마이그레이션이 끝났으니 남은 Fragment와 Activity를 모두 수정해야겠다.

     

    반응형

    댓글

Designed by Tistory.