카탈로그는 사용안함
app build.gradle 은 고정
plugins {
id("com.android.application") version "8.13.2"
id("org.jetbrains.kotlin.android") version "2.0.21"
}
root build.gradle
plugins {
id("com.android.application") version "8.13.2" apply false
// id("org.jetbrains.kotlin.android") version "2.0.21" apply false
}
plugins {
// id("com.android.application") version "8.13.2" apply false
// id("org.jetbrains.kotlin.android") version "2.0.21" apply false
}
이렇게 app 의 build.gradle 을 고정하고 root build.gradle 만 선택적으로 사용해봤다. 위의 2개는 잘된다.
근데
plugins {
// id("com.android.application") version "8.13.2" apply false
id("org.jetbrains.kotlin.android") version "2.0.21" apply false
}
이 상황에서는 안된다.
Unable to load class 'com.android.build.gradle.api.BaseVariant' com.android.build.gradle.api.BaseVariant
이런 오류발생
id("org.jetbrains.kotlin.android") 을 로드할 때 AGP 관련 클래스가 필요한데 없기 때문이다.
즉 id("org.jetbrains.kotlin.android") 을 로드할려면 id("com.android.application") 가 필요해서 오류가 발생했던것이다.
plugins {
// id("com.android.application") version "8.13.2" apply false
// id("org.jetbrains.kotlin.android") version "2.0.21" apply false
}
이 상황에서 잘 되었던 이유는 로드할게 없고 app 모듈에서 같이 로드를 했긴 때문에 문제가 없던 것 이다.
plugins {
id("com.android.application") version "8.13.2" apply false
id("org.jetbrains.kotlin.android") version "2.0.21" apply false
}
이거의 의미는 application, kotlin 관련 파일들을 가져오지만 현재 프로젝트에 적용하지 않는다.
“Kotlin 플러그인이 로드되려면 AGP가 필요해서” 라기보다는,
정확히는 보통 이거야:
빌드 안의 어떤 플러그인/스크립트(서드파티 또는 커스텀)가 com.android.build.gradle.api.BaseVariant를 참조하고 있는데,
root에서 Kotlin 플러그인만 resolve되면서 그 코드가 먼저 로드/평가되는 타이밍이 생기고,
그때 AGP가 클래스패스에 없어서 BaseVariant 로딩이 실패한다.