2013-08-12 1 views
99

Я конвертирую одно из моих приложений в Gradle и хотел бы использовать новые функции вкуса сборки, чтобы иметь платный и бесплатный рекламный аромат.Как определить различные зависимости для разных вкусов продукта

Я хочу, чтобы только версия на основе рекламы зависела от admob SDK.

Моего файл сборка выглядит следующим образом:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.+' 
    } 
} 
apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.0.1" 

    defaultConfig { 
     minSdkVersion 10 
     targetSdkVersion 18 
    } 

    productFlavors { 
     Pro { 
      packageName "de.janusz.journeyman.zinsrechner.pro" 
     } 
     Free { 
      dependencies { 

      } 
     } 
    } 
} 

dependencies { 
    compile 'com.android.support:support-v4:18.0.+' 
    compile 'com.actionbarsherlock:actionbarsherlock:[email protected]' 
    compile fileTree(dir: 'libs', include: '*.jar') 
} 

Есть ли способ настроить зависимость в свободном вкусе продукта, чтобы иметь свою собственную папку ЛИЭСА, которая объединена с основной папкой Libs, которая содержит общие библиотеки для оба вкуса?

Если это возможно, как бы определить эту папку?

+0

посетить эту тему: http://stackoverflow.com/questions/24860659/multi-flavor-app-based-on-multi-flavor-library-in-android-gradle/24910671#24910671 – Ali

ответ

131

Чтобы определить зависимую от вкуса зависимость, вы можете использовать proCompile вместо compile в разделе зависимости. Когда вы запускаете свойства градиента, вы получаете обзор автоматически созданных конфигураций.

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

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.2.3' 
    } 
} 
apply plugin: 'com.android.application' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     minSdkVersion 10 
     targetSdkVersion 22 
    } 

    productFlavors { 
     pro { 
      packageName "de.janusz.journeyman.zinsrechner.pro" 
     } 
     free { } 
    } 
} 

dependencies { 
    compile 'com.android.support:support-v4:22.2.0' 
    freeCompile 'com.google.android.gms:play-services-ads:7.5.0' 
} 
+2

I 'm пытается это и получить эту ошибку, 'Ошибка: (28, 0) Ошибка сценария сборки, неподдерживаемый метод Gradle DSL найден:' glassCompile() '!' (Аромат, который я пытаюсь добавить, зависит от "стекла" .) – nmr

+13

Ahh, похоже, вам нужно переместить блок 'dependencies' под блоком' android'. Как интуитивно. – nmr

+8

Обратите внимание, что генерации 'xxxCompile' Gradle не будут работать, если название аромата начинается с заглавной буквы. –

5

Edit: Я рекомендую использовать один из других методов!

Альтернатива принятой ответ таков:

ext { 
     flavorType = "" 
    } 


    gradle.startParameter.getTaskNames().each { task -> 

     if(task.contains("flavor1")){ 
      flavorType = "flavor1" 
     } else if (task.contains("flavor2")){ 
      flavorType = "flavor2" 
     } else { 
      flavorType = "flavor3" 
     } 

    } 

if(flavorType == 'flavor1' || flavorType == 'flavor2') { 
     compile 'com.android.support:support-v4:18.0.+' 
    } 
+0

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

+2

это в блоке зависимостей? – user1743524

+1

Является ли этот блок зависимым? – Karacago

5

Вам необходимо вручную добавить конфигурацию для каждого аромата. Пример

configurations { 
    proCompile 
    freeCompile 
} 

dependencies { 
    compile 'com.parse.bolts:bolts-tasks:1.3.0' 

    proCompile 'com.android.support:design:23.1.1' 
    freeCompile 'com.parse:parse-android:1.12.0' 
} 
+0

Как это сделать? Как активировать различные конфигурации? Это относится только к сборке Android? Возможно ли это с не-Android-сборками? – koppor