Первые шаги Gradle в Android Studio

Поскольку некоторые, возможно, смотрели ввод-вывод Android Studio Gradle, Ксавье Дюкроэ упомянул в своем быстром выступлении, как использовать систему сборки Android Gradle. Моя проблема в том, что в документации и презентации не хватает информации для быстрого старта. или по крайней мере для меня. В моем следующем коде я попытался решить, как использовать систему плагинов gradle для Android, и я уверен, что некоторые шаги были неправильными, а некоторые правильными. (я не использовал ant или maven много)

Может быть, я пройду это шаг за шагом с тем, что я сделал до сих пор.

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16

        signingStoreLocation = "debug.keystore"
        signingStorePassword = "***************"
        signingKeyAlias = "***************"
        signingKeyPassword = "**************"
    }

Сначала я настраиваю параметры по умолчанию для отладочной сборки (или каждой сборки, которая использует параметры по умолчанию. Это означает отсутствие типов сборки или вкусов?)

наборы источников:

    sourceSets {

        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject']
            res.srcDirs = ['res', 'resfromotherprojectusingpartsofsamecode']
            assets.srcDirs = ['assets']
        }
    }

На этом шаге я определил наборы источников. Тут у меня первый вопрос. Если у меня есть один и тот же код, который я хочу использовать для двух проектов, возможно ли/или следует ли это сделать, определив больше исходных наборов, таких как -->

    sourceSets {

        main {...}
        srcsetforanotherproject {...}
    }

... в зависимости от базовых папок src? Или следует сделать определение для sourceSets, как в моем первом объявлении sourceSets, путем определения набора различных папок, например res, как упоминал Ксавье Дюкроэ? (Также неясно, могу ли я сделать это только для папок res таким образом или также для папок кода java src, таких как java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject'].

подписываниеКонфигурации:

    signingConfigs {
        debugRelease {
            storeFile file("debug.keystore")
        }

        release {
            storeFile file("release.keystore")
        }

        testflight {
            storeFile file("testflight.keystore")
        }
    }

На этом шаге я определил разные ключи, используемые для разных выпусков. должно быть в порядке...

Типы сборки:

    buildTypes {

        debugRelease.initWith(buildTypes.release)
        testflight.initWith(buildTypes.release)

        sourceSets.debugRelease.setRoot("src/release")
        sourceSets.debugRelease.setRoot("src/release")
        sourceSets.debugRelease.setRoot("src/release")

        debugRelease {
            packageNameSuffix ".debugRelease"
            versionNameSuffix "-DEBUG"
            debuggable true
            signingConfig signingConfigs.debug
        }

        testflight {
            packageNameSuffix ".testflight"
            versionNameSuffix "-TESTFLIGHT"
            signingConfig signingConfigs.testflight
        }

        release {
            packageNameSuffix ".release"
            versionNameSuffix "-RELEASE"
            runProguard true
            proguardFile getDefaultProguardFile('proguard-android.txt')
            signingConfig signingConfigs.release
        }
    }

Этот шаг был объяснен более четко, чем любой другой шаг для плагина Gradle для Android. За исключением того, что я не знаю, есть ли предопределенные настройки выпуска или отладки, работающие в фоновом режиме... мне все равно нужно это уточнять... по крайней мере, я так думаю из-за использования суффиксов имен, proguard или объявления ключ к этой сборке (signingConfig).

Вкусы:

    flavorGroups "abi", "version"

    productFlavors {

        arm {
            flavorGroup "abi"
        }

        standardproject1 {
            flavorGroup "version"
            minSdkVersion 7
            targetSdkVersion 14
            packageName "com.project.maingradle.normal"
            sourceSet sourceSets.main
        }

        standardproject2 {
            flavorGroup "version"
            minSdkVersion 6
            targetSdkVersion 14
            packageName "com.otherproject.normal"
            sourceSet sourceSets.main
        }

        testflightproject1 {
            flavorGroup "version"
            minSdkVersion 7
            targetSdkVersion 14
            packageName "com.project.maingradle.testflight"
            sourceSet sourceSets.main
        }

        testflightproject2 {
            flavorGroup "version"
            minSdkVersion 6
            targetSdkVersion 14
            packageName "com.otherproject.testflight"
            sourceSet sourceSets.main
        }
    }
}

Лично я думаю, что вкусы - самая интересная часть. Ксавье Дюкроэ сказал, что вам не следует определять ключ в типе сборки (вместо этого объявлять в вариантах), если вы хотите использовать разные ключи для разных сборок вариантов? не знаю, правильно ли я это понял.

В любом случае... то, что я пытался здесь сделать, это определить разные варианты, которые должны быть собраны с разными настройками, такими как управление версиями sdk для разных систем, эксклюзивное имя пакета и установка зависимого исходного набора, как вы видите в примере. в чем я не уверен, так это в том, как типы сборки зависят от вкусов ... они просто умножают каждый вкус на каждый тип сборки? И... можно ли установить исходный набор (если возможно установить больше исходных наборов), как это в аромате?


person MadExHatter    schedule 18.06.2013    source источник
comment
Я пробовал нечто подобное. Какую команду вы запускаете для подписания вашего релиза apk, gradle build? Я вижу только неподписанный файл apk в моей папке build/apk.   -  person Jan-Terje Sørensen    schedule 19.08.2013
comment
отличный вопрос, документы Gradle просто ужасны   -  person Piotr    schedule 12.06.2014
comment
Повторение sourceSets.debugRelease.setRoot(src/release) три раза преднамеренно?   -  person Alex Bravo    schedule 13.10.2016


Ответы (1)


Как типы сборки зависят от вкусов... они просто умножают каждый вкус на каждый тип сборки?

Да, Gradle будет генерировать любую комбинацию типов сборки и вкусов продукта. Согласно Руководство пользователя подключаемого модуля Gradle, каждая комбинация типа сборки и вкуса продукта называется вариантом сборки.

Можно ли установить исходный набор (если возможно установить больше исходных наборов), например, в варианте?

Конечно! Варианты продуктов (и варианты сборки) также автоматически включают собственные исходные коды из src/myFlavorName в соответствии с Документация по Sourcesets and Dependencies.

person Bryan Herbst    schedule 04.10.2013