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

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

android { compileSdkVersion 18 buildToolsVersion "18.1.1" defaultConfig { minSdkVersion 7 targetSdkVersion 18 } } 

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

Вы можете создать 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 } 

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

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

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

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

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

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

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

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

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

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

 android { compileSdkVersion global_compileSdkVersion buildToolsVersion global_buildToolsVersion ... } 

Заметка!

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

Хм интересно, что я не нашел решение, которое работает, поскольку я его истечет в 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.

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

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

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

 buildToolsVersion rootProject.buildToolsVersion 

Больше информации вы можете найти здесь

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

 project.ext.compileSdkVersion = 21 

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

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

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

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

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

 common_parameter='I am common" 

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

 module_parameter = common_parameter 

Вот и все.

Intereting Posts