Типы сборки Gradle перекрывают друг друга - PullRequest
0 голосов
/ 05 декабря 2018

Я хочу установить разные значения для свойства в зависимости от того, какой buildType был выбран.Но я понял, проверив консоль Gradle, что на этапе настройки выполняются все 3 типа buildTy, а значение последней сборки остается в свойстве.Я думаю, что это не так, как это должно работать.Я сделал что-то не так?

android {
    signingConfigs {
        ...
    }
    compileSdkVersion 28
    defaultConfig {
        ...
    }

    productFlavors {
        normal {
            manifestPlaceholders = [appName: "@string/app_name"]
            signingConfig signingConfigs.configNormalRelease
        }
    }
    buildTypes {
        release {
            println("app release build")
            rootProject.ext.test = false
        }
        debug {
            println("app debug build")
            rootProject.ext.test = false
        }
        staging {
            println("app staging build")
            rootProject.ext.test = true
        }
    }
    sourceSets {
        main {
            aidl.srcDirs = ['src/main/aidl']
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    lintOptions {
        checkReleaseBuilds true
        abortOnError false
    }
    flavorDimensions 'tier'
    productFlavors {
        normal {
            dimension "tier"
        }
    }
}

Вывод

app release build
app debug build
app staging build

Значение свойства 'test' всегда истинно, независимо от того, я вызываю ассемблерRelease, assemblyDebug, assemblyStaging

Почему я вижу везде, что люди помещают API-ключи, URL-адреса и другие пользовательские вещи в buildTypes, когда они переопределяются последним?Я понимаю, что gradle может вызывать все типы сборки на этапе настройки, но где поставить вышеупомянутые значения, тогда?

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы хотите получить значение test из исходного кода в вашем проекте, вы можете установить переменную:

buildTypes {
    release {
        buildConfigField 'boolean', 'test', 'false'
    }
    debug {
        buildConfigField 'boolean', 'test', 'false'
    }
    staging {
        buildConfigField 'boolean', 'test', 'true'
    }
}

И затем вы можете получить это поле из своего кода, используя класс BuildConfig (Поле test будет сгенерировано в BuildConfig).Получите это через BuildConfig.test.

И если вы действительно хотите изменить переменную gradle для любых buildTypes, вы можете попробовать сделать это:

android.applicationVariants.all { variant ->
  boolean isStaging = gradle.startParameter.taskNames.find {it.contains("staging") || it.contains("Staging")} != null
  if (isStaging) {
    rootProject.ext.test = true
  } else {
    rootProject.ext.test = false
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...