Как получить buildtype в build.gradle РАНЬШЕ ВКЛ - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть приложение React Native, и я пытаюсь указать папку для хранения сгенерированной исходной карты в project.ext.react примерно так (мне нужно это для реализации библиотеки, которая поможет мне отлаживать ошибки JS)

project.ext.react = [
        ...
        extraPackagerArgs    : [ "--sourcemap-output", "$buildDir/intermediates/assets/$buildType/index.android.bundle.map" ]
]

Как видно, путь должен быть примерно таким: <buildDir>/intermediates/assets/<buildType>/index.android.bundle.map

(например, <buildDir>/intermediates/assets/release/index.android.bundle.map в случае выпуска и <buildDir>/intermediates/assets/debug/index.android.bundle.map в случае отладки)

После обращения кнесколько ответов о StackOverflow и за его пределами. Я получаю buildType в build.gradle, сначала объявив его, а затем присвоив ему:

//3rd line of build.gradle
def buildType
....
//much later
   applicationVariants.all { variant ->
    buildType = variant.buildType.name 
....

Однако это приводит к проблеме, когда buildTypeинициализируется много раз после того, как он используется, и поэтому выходной путь становится чем-то вроде <buildDir>/intermediates/assets/null/index.android.bundle.map, тем самым проваливая весь процесс для меня.Есть ли способ получить тип сборки ранее?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Я наконец нашел способ (хотя и не очень чистый) для просмотра массива задач:

def buildType = gradle.startParameter.taskNames.any{it.toLowerCase().contains("debug")}?"debug":"release"
0 голосов
/ 12 ноября 2018

У нас в конфигурации buildTypes внутри app.gradle что-то вроде этого:

android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        //def newApkName = "${APP_NAME}-${variant.name}-${variant.versionName}.apk"
        def newApkName = "${APP_NAME}-${variant.name}-r${COMMIT_SHA}-${BRANCH_NAME}-v${variant.versionName}-${BUILD_NUMBER}.apk"

        variableFile.withWriterAppend { out ->
            out.writeLine("${APP_NAME}-${variant.name}=${APP_NAME}-${variant.name}-r${COMMIT_SHA}-${BRANCH_NAME}-v${variant.versionName}-${BUILD_NUMBER}")
            out.writeLine("${APP_NAME}-${variant.name}versionCode=${VERSION_CODE}")
            out.writeLine("${APP_NAME}-${variant.name}versionName=${variant.versionName}")
        }

        output.outputFile = new File(output.outputFile.parent, newApkName)
    }
}

Устанавливает имя apk и выходную папку для каждого buildType, определенного в gradle. У нас есть buildTypes:

buildTypes {
    debug {
        buildConfigField('String', 'BUILD_ENV', '"Development"')
        minifyEnabled false
    }
    qa {
        signingConfig signingConfigs.release
        minifyEnabled true
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        buildConfigField('String', 'BUILD_ENV', '"QA"')
    }
    release {
        signingConfig signingConfigs.release
        minifyEnabled true
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        buildConfigField('String', 'BUILD_ENV', '"Production"')
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...