Подтвердить что ты не робот

Как определить общие свойства Android для всех модулей с помощью gradle

Я создаю простой проект в AndroidStudio с несколькими модулями. Каждый модуль gradle script содержит следующий код:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }
}

Как перенести этот код на главный build.gradle script (проект script)? Этот код является общим для всех подмодулей.

4b9b3361

Ответ 1

В build.gradle основного проекта вы должны написать что-то вроде следующего:

project.extensions.add("buildToolsVersion", "19.0.3")

В подпроекте вы можете использовать эти расширения:

buildToolsVersion rootProject.buildToolsVersion

Дополнительную информацию вы можете найти здесь

Ответ 2

Вы можете создать build.gradle в корне вашего проекта (т.е. папку, содержащую все ваши модули), и использовать ее для настройки rootProject.

Например, если у вас есть:

MyApp
  - Module1/
      - build.gradle
  - Module2/
      - build.gradle
  - settings.gradle

Вы можете добавить build.gradle рядом с settings.gradle.

В приведенном выше примере у вас есть 3 проекта Gradle: Module1, Module2 и rootProject.

Итак, внутри этого build.gradle вы можете сделать:

// use the ext object to add any properties to the project
project.ext {
   compileSdkVersion = 18
}

Затем в ваших модулях вы можете:

android {
    // here we reference the root project with the "rootProject" object.
    compileSdkVersion rootProject.ext.compileSdkVersion
}

Ответ 3

Определение этого в самом верхнем файле build.gradle работает

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 22
                buildToolsVersion '22.0.1'
            }
        }
    }
}

Ответ 4

Это работает для меня в Android Studio 0.8.9. используя обертку по умолчанию gradle 1.12-all.

App - это библиотека, используемая Lite и Pro, где Lite/Pro - это два разных вкуса приложения, которое я создаю. Я хотел поделиться конфигурацией между всеми модулями. Глобальная конфигурация находится в корневом файле gradle.build, и все подпроекты/модули могут читать эти свойства.

Моя структура проекта:

Project/
 gradle.build
 settings.gradle
 App/
  gradle.build
 Lite/
  gradle.build
 Pro/
  gradle.build

В проекте / gradle.build Я добавил конфигурацию подпроектов:

subprojects {
    ext.global_compileSdkVersion = 19
    ext.global_buildToolsVersion = "20.0.0"
    ...
}

ext. [var name] добавляет переменные, которые могут быть прочитаны в подпроектах. Я добавил префикс "global_", ​​так что будет легче увидеть мои свойства. (Также обратите внимание, что я использую знак равенства, чтобы присвоить значение переменной)

В каждом подпроекте/модуле файл gradle выглядит следующим образом:

android {
    compileSdkVersion global_compileSdkVersion
    buildToolsVersion global_buildToolsVersion
    ...
}

Примечание

Интеллектуальная среда Android Studio, похоже, не знает о "ext" в подпроектах, но gradle делает. Таким образом, это отображается как предупреждение при просмотре файлов gradle, но сборки все равно будут работать. Поскольку он не знает о "ext", он, похоже, не знает о добавленных вами переменных, поэтому они также будут подчеркнуты в среде IDE в качестве предупреждений. Но он работает:)

Ответ 5

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

определить в root build.gradle, как и все:

buildscript {
    ext {
        projectAppCompatVersion = 'com.android.support:appcompat-v7:23.3.0'
        projectSupportVersion = 'com.android.support:support-v4:23.3.0'
        projectCompileSdkVersion = 23
        projectMinSdkVersion = 22      // 15 android 4.0.3 for release
        projectTargetSdkVersion = 23   //23 requires permission requests , 22 for release
        projectBuildToolsVersion = "24.0.0rc2"
    }
 }

и для доступа без предупреждений:

compileSdkVersion project.properties.projectCompileSdkVersion
buildToolsVersion project.properties.projectBuildToolsVersion

но выполнение кода и изменение переменных не работают, как я ожидал бы для студии android.

Ответ 6

Создайте собственное свойство для своего проекта. Чтобы установить одно свойство, используйте:

project.ext.compileSdkVersion = 21

для установки нескольких свойств:

project.ext {
    compileSdkVersion = 21
    buildToolsVersion = "21.0.1"
    targetSdkVersion = 21
}

Ответ 7

Простое упоминание о закрытии "android" из сборки верхнего уровня не работает, если сборка верхнего уровня не является сборкой Android. Метод "android" доступен только после оценки. Первоначально у меня было рабочее решение, основанное на настройке конфигурации afterEvaluate, но оно больше не работает (Android Studio 0.6.0):

Задачи Android уже созданы.   Это происходит при вызове android.applicationVariants,   android.libraryVariants или android.testVariants.   После вызова этих методов невозможно   продолжить настройку модели.

Ответ 8

В обновленном Android Studio появился новый способ более простой способ. У вас есть файл с именем "gradle.properties" в верхней иерархии проектов именно для этого. Просто определите свои параметры там:

common_parameter='I am common"

И используйте его в файлах gradle модулей (build.gradle) как таковых:

module_parameter = common_parameter

Что это.