2014-01-09 3 views
9

Вместо того, чтобы дублировать андроид блок конфигурации в каждом из подпроектов:Как настроить Android для каждого подпроекта с помощью Gradle?

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 14 
    } 
} 

я предпочел бы сделать это в верхнем уровне/корневой файл Gradle сборки, как:

subprojects{ 
    android { 
     compileSdkVersion 19 
     buildToolsVersion "19.0.0" 

     defaultConfig { 
      minSdkVersion 9 
      targetSdkVersion 14 
     } 
    } 
} 

Однако, это не работает. :(

Ошибка: "не ..Could найти метод андроида() для аргументов ..."

ответ

15

Решение этой проблемы оказалось:

subprojects{ 
    afterEvaluate { 
     android { 
      compileSdkVersion 19 
      buildToolsVersion "19.0.0" 

      defaultConfig { 
       minSdkVersion 9 
       targetSdkVersion 14 
      } 
     } 
    } 
} 

Насколько я знаю , это связано с тем, что для обработки/использования андроида {...} во время оценки означает, что он должен присутствовать (т. е. явно написан или включен как часть «применить плагин»), как только он попадает под подпроекты в корневой сборке и, что более точно, это означает, что проект верхнего уровня должен быть определен (что, вероятно, не потому, что это может быть не сама сборка «андроид» или «андроид-библиотека»). Однако, если мы отталкиваем его после оценки, тогда он может использовать то, что доступно в каждом подпроекте, напрямую.

Этот вопрос + решение также предполагает, что все подпроекты представляют собой некоторую форму проекта android (в моем случае true, но не обязательно для других). Безопаснее ответ будет использовать:

subprojects{ 
    afterEvaluate { 
     if(it.hasProperty('android')){ 
      android { 
       compileSdkVersion 19 
       buildToolsVersion "19.0.0" 

       defaultConfig { 
        minSdkVersion 9 
        targetSdkVersion 14 
       } 
      } 
     } 
    } 
} 
+0

Это работает иначе красиво, но этот способ не подпроект не может переопределить значение по умолчанию. Перед установкой значений вы должны проверить существование compileSdkVersion и buildToolsVersion. –

+0

Правда, но с другой стороны, если кто-то случайно пытается переопределить вещи в подпроекте, им это не удастся;) – CasualT

Смежные вопросы