Мои файлы gradle.properties.kts имеют следующее содержимое:
build_version=develop
build_version_code=2
include_vas=false
У меня build.gradle.kts выглядит следующим образом:
plugins {
id(Plugins.androidApplication)
kotlin(Plugins.kotlinAndroid)
kotlin(Plugins.kotlinExtensions)
kotlin(Plugins.kapt)
}
android {
compileSdkVersion(Configs.compileVersion)
defaultConfig {
applicationId = Configs.applicationId
minSdkVersion(Configs.minSdkVersion)
targetSdkVersion(Configs.targetSdkVersion)
testInstrumentationRunner = Configs.testInstrumentationRunner
versionCode =
}
buildTypes{
}
repositories {
flatDir {
dirs("libs")
}
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.arr"))))
implementation(Libs.stdLib)
implementation(Libs.sunmiui)
implementation(Libs.slf4j)
implementation(Libs.appCompact)
implementation(Libs.otpView)
implementation(Libs.vectordrawableAnimated)
implementation(Libs.materialComponents)
implementation(Libs.recyclerView)
implementation(Libs.constraintLayout)
implementation(Libs.junit)
implementation(Libs.testRunner)
implementation(Libs.expressoCore)
implementation(Libs.lifecyleExtensions)
implementation(Libs.lifecyleCompiler)
implementation(Libs.roomRuntime)
implementation(Libs.databindingCompiler)
implementation(Libs.rxjava)
implementation(Libs.rxjavaAndroid)
implementation(Libs.glide)
implementation(Libs.glideCompiler)
implementation(Libs.gson)
implementation(Libs.joda)
implementation(Libs.countrycodePicker)
implementation(Libs.timber)
implementation(Libs.daggerandroidSupport)
implementation(Libs.daggerandroidProcessor)
}
Я нахожусь в процессе преобразования моих текущих сценариев gradle в kotlin DSL. Текущая проблема, с которой я сталкиваюсь, заключается в том, что в defaultConfig:
android {
compileSdkVersion(Configs.compileVersion)
defaultConfig {
applicationId = Configs.applicationId
minSdkVersion(Configs.minSdkVersion)
targetSdkVersion(Configs.targetSdkVersion)
testInstrumentationRunner = Configs.testInstrumentationRunner
versionCode =
}
Я имею в виду код версии, определенный в gradle.properties. В приведенном ниже коде это было сделано до преобразования.
defaultConfig
{
multiDexEnabled true
applicationId "jfjfjrjrjr.comn.jejeu"
minSdkVersion 24
targetSdkVersion 28
versionCode build_version_code as Integer
versionName build_version
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Как я могу сделать это в Котлине
Это связано с тем, что это свойство используется при сборке apk в конвейерах сборки Azure.
Нет простого способа получить его, но вы можете использовать интерфейс Проект и использовать его метод имущество() для получения из него ваших переменных gradle.properties.kts, как показано ниже:
project.property('your_variable_name_here')
Для вашего экземпляра:
versionCode project.property('build_version_code')
Вот как вы можете установить все свои переменные из файла свойств.
Я получаю следующее сообщение об ошибке, когда использую описанный выше метод: java.lang.String не может быть приведен к java.lang.Integer Возможные причины этой неожиданной ошибки включают в себя: Кэш зависимостей Gradle может быть поврежден (иногда это происходит после тайм-аута сетевого подключения). .) Повторно загрузите зависимости и синхронизируйте проект (требуется сеть)
Я просто забыл упомянуть, что он вернет тип объекта, хотя вам нужно будет его привести. Используйте так, если переменная имеет значение Integer: versionCode project.property('build_version_code') as Integer
Я применил его, но все равно получаю ту же ошибку: versionCode = project.property("build_version_code") as Int? versionName = project.property("build_version") как строка?
Это все еще исключение приведения или какая-то новая ошибка?
По-прежнему выдает ту же ошибку, о которой говорилось ранее: java.lang.String не может быть приведен к java.lang.Integer Возможные причины этой неожиданной ошибки включают в себя: Кэш зависимостей Gradle может быть поврежден (иногда это происходит после тайм-аута сетевого подключения). загрузить зависимости и синхронизировать проект (требуется сеть)
В итоге я сделал следующее, как предложил @Jeel Vankhede:
defaultConfig {
multiDexEnabled = true
applicationId = Configs.applicationId
minSdkVersion(Configs.minSdkVersion)
targetSdkVersion(Configs.targetSdkVersion)
var value = Integer.parseInt(project.property("build_version_code") as String?)
versionCode = value
versionName = project.property("build_version") as String?
testInstrumentationRunner = Configs.testInstrumentationRunner
}
Начиная с v0.16.3 Gradle Kotlin DSL (включенного в Gradle v4.7), можно использовать делегаты свойств для значений, объявленных в gradle.properties
, следующим образом:
val yourVariable: TypeOfYourVariable by project
Ваш пример будет выглядеть так:
val build_version_code: String by project
defaultConfig {
...
versionCode = build_version_code
...
}
ох, это довольно отстойно, все было проще, когда можно было просто сделать findProperty("build_version_code")
пример делегатов свойств: docs.gradle.org/current/userguide/…
Вы можете получить доступ к переменной проекта, например к порту, с помощью:
val port: String by project
Вышеприведенное не удастся, если порт не установлен. Если не уверены, используйте
val port: String? by project
Тогда вы можете сделать:
if (port != null) {...}
Почему бы вам не перенести его в файл доб., а не в файл gradle.properties.kts