홍드로이드의 야매코딩

[Android Kotlin] Kotlin Extension 기능으로 findViewById 생략하기 (구글 지원중단) 본문

Android Honey Tip

[Android Kotlin] Kotlin Extension 기능으로 findViewById 생략하기 (구글 지원중단)

홍드로이드 2020. 11. 2. 06:09

안녕하세요 홍드로이드 입니다 :))



이번 시간에는 기존에 Java에서 변수에 xml id를 연동할 때 필수적으로 적어줬던

findVIewById 라는 녀석에 대해서 Kotlin Extension을 사용하여 

Android Studio 에서 더이상 그 구문을 적지 않아도 되는 편의기능을 사용할 수 있게 하기 위해 이 글을 작성합니다 !


해당 내용은 안드로이드 스튜디오 버전 4.1 기준으로 작성되었습니다 !


(2021-01-11 글 수정 안내)

해당 코틀린 익스텐션 기능은 공식적으로 해결되지못한 버그나 이슈사항들이 존재하여 구글에서 더이상 지원을 하지않습니다.

사실 나온지가 오래됬었는데 제 무지로 인하여, 블로그 방문자들에게 새 기능이 생긴 것 처럼 혼란을 초래하였습니다. 이점 진심으로 사과드립니다. 이 게시글에 나오는 내용은 현 시점에서도 임시 대책으로 사용은 가능하오나, 권장드리지 않습니다.



코틀린 익스텐션과 동일한 기능을 이용하시려면 구글 권장 사항인 '뷰 바인딩' 을 이용해주세요

뷰 바인딩 하는 방법 링크 - https://duckssi.tistory.com/42


먼저 안드로이드 스튜디오에서 좌측에 Project 폴더와 파일들이 보여지는 곳에서

1. Gradle Scripts 폴더 안에있는 build.gradle (Project: 프로젝트명) 으로 되어있는 파일을 더블클릭해서 엽니다.







2. 노란색 글씨 바로 밑줄에 있는 다음 사항들을 추가해줍시다 ! ( 찾기 쉽게 일부러 글씨 크기를 크게 했습니다.)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
//TODO: 밑에 줄이 추가가 되어있는지 확인해주세요.. !
ext.kotlin_version = '1.3.61'
repositories {
google()
jcenter()

}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
//TODO: 밑에 줄이 추가가 되어있는지 확인해주세요.. !
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
google()
jcenter()

}
}

task clean(type: Delete) {
delete rootProject.buildDir
}



ext.kotlin_version = '1.3.61'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"






3. 다음에는 방금 진입한 파일 바로밑에 build.gradle (Moduile: 프로젝트명.app) 으로 되어있는 파일을 더블클릭하여 엽니다.







4. 다른 구문들은 신경쓰지마시고 저처럼 노란색으로 제가 메모한 줄 바로 밑에 구문을 추가해줍시다. (글씨크기 크게 해놨습니다.)

apply plugin: 'com.android.application'

//TODO: 밑에 줄이 추가가 되어있는지 확인해주세요.. !
apply plugin: 'kotlin-android'

//TODO: 밑에 줄이 추가가 되어있는지 확인해주세요.. !
apply plugin: 'kotlin-android-extensions'

android {
compileSdkVersion 29
buildToolsVersion "29.0.3"

defaultConfig {
applicationId "com.hongdroid.textviewkt"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

//TODO: 밑에 줄이 추가가 되어있는지 확인해주세요.. !
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}


apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"





5. 이 사항들을 모두 마치고 나면 우측 위에 Sync Now 라는 링크텍스트 버튼이 뜨게 되는데 눌러주셔서 gradle 수정사항을 반영해주셔야 합니다.



모든 과정이 마무리 되었으니 이제 사용할 수 있습니다. 테스트로 MainActivity.kt 파일로 이동하셔서 xml의 id 값을 이용하여 kotlin extension을 써먹어 보겠습니다.





6. xml에서 선언해둔 id를 입력하게되면 MainActivity.kt에서는 변수를 선언한적이 없으니 에러가 뜰텐데요.

기존에는 당연히 에러문이겠지만. 이제 해당 빨간색글씨에 마우스 커서를 두시고 Alt+Enter - > import를 해줍니다.







7. 다음과 같이 에러가 사라지면서 import kotlinx.android.syntehtic.main.... 관련 구문이 import 되어있는 모습을 확인하실 수 있습니다 !

이후 부터는 여러분들은 findViewById를 사용하실필요가 없습니다 !



Comments