Gradle build для множества проектов Android (включая библиотеки)

У меня есть 2 приложения для Android с 5 модулями Android (проект библиотеки Android). Всего 7 проектов Eclipse. Я хочу включить сборку Gradle для них. я добавил build.gradle в корневой папке и перечислил весь проект в settings.gradle

include ':app1'
include ':app2'
...

Однако я обнаружил, что мне нужно скопировать и вставить раздел ниже в каждом из 7 проектов

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    defaultConfig {
        minSdkVersion 1
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
        ... // and so on like source folders configuration
}

Причина: когда я добавляю apply plugin: 'android' внутри корня build.gradle (см. Не удалось найти метод android() в корне многомодульного проекта),
тогда я не могу apply plugin: 'android-library' для проектов библиотек (см. https://stackru.com/questions/23864292/minimal-gradle-configuration-for-android-library-in-multimodule-project)

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

Как я могу минимизировать эту конфигурацию, чтобы иметь как можно больше вещей в одном build.gradle Конфигурационный файл

2 ответа

Решение

Вы можете использовать свой build.gradle в корне, или вы можете определить некоторые значения в gradle.properties в корневой папке для достижения вашей области.

Например:

корень /build.gradle:

ext {
    compileSdkVersion = 19
    buildToolsVersion = "19.0.3"
}

модуль /build.gradle:

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}

ИЛИ используя свойства

корень /gradle.properties:

VERSION_NAME=1.0.1
VERSION_CODE=11

модуль /build.gradle:

android {

    defaultConfig {
        versionName project.VERSION_NAME
        versionCode Integer.parseInt(project.VERSION_CODE)

    }

Другой вариант был бы, как предложил Питер Нидервизер

либо добавьте некоторую логику в корневой скрипт, чтобы применить нужный плагин к каждому подпроекту (есть разные способы сделать это), либо переместите общие части в скрипт с именем android.gradle и применить этот сценарий к каждому подпроекту после применения правильного плагина для этого проекта (все в сценарии сборки подпроекта).

Связанные документы - Глава 56. Сборки нескольких проектов

Другие вопросы по тегам