Я работаю над переносом файлов сборки Gradle на Kotlin DSL, и у меня возникла проблема.
На моем родительском build.gradle
у меня есть следующий фрагмент кода
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${Version.kotlin}"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
subprojects {
afterEvaluate { project ->
if (project.plugins.findPlugin('com.android.application') ?:
project.plugins.findPlugin('com.android.library')) {
android {
compileSdkVersion = Android.SDK_COMPILE
defaultConfig {
minSdkVersion Android.SDK_MIN
targetSdkVersion Android.SDK_TARGET
versionCode = Android.VERSION_CODE
versionName = Android.VERSION_NAME
}
...
}
}
}
}
Это позволяет мне настраивать только в одном месте все модули, которые являются приложениями или библиотеками Android.
Однако, когда я перешел на kotlin, похоже, это не сработало:
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath(Dependency.androidGradle)
classpath(Dependency.kotlinGradle)
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
subprojects {
afterEvaluate {
if (project.plugins.findPlugin("com.android.application") != null ||
project.plugins.findPlugin("com.android.library") != null) {
android { <<<<------------ Unresolved reference: android
compileSdkVersion(Android.SDK_COMPILE)
defaultConfig {
minSdkVersion(Android.SDK_MIN)
targetSdkVersion(Android.SDK_TARGET)
versionCode = Android.VERSION_CODE
versionName = Android.VERSION_NAME
}
...
}
}
}
}
Ошибка Unresolved reference: android
, и похоже, что блок android{}
не распознается компилятором сценария.
Моя теория заключается в том, что проверки if
для типа подпроекта недостаточно, и мне, возможно, придется преобразовать или получить ссылку на какой-то объект, в котором я могу вызвать блок android{}
, но, честно говоря, я не знаю достаточно.
Какие-нибудь подсказки?
afterEvaluate
блок? За исключением того, что вы возитесь с задачами компиляции или что-то еще, вам не нужен блокafterEvaluate
. Просто используйтеproject.plugins.withId("<plugin-id>") { ... }
- person efemoney   schedule 25.08.2019