Как определить общие свойства Android для всех модулей с помощью gradle
Я создаю простой проект в AndroidStudio с несколькими модулями. Каждый модуль gradle script содержит следующий код:
android {
compileSdkVersion 18
buildToolsVersion "18.1.1"
defaultConfig {
minSdkVersion 7
targetSdkVersion 18
}
}
Как перенести этот код на главный build.gradle script (проект script)? Этот код является общим для всех подмодулей.
Ответы
Ответ 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
Что это.