Ik converteer een van mijn apps naar Gradle en wil de nieuwe build-smaakfuncties gebruiken om een betaalde en een gratis op advertenties gebaseerde smaak te hebben.
Ik wil dat alleen de op advertenties gebaseerde versie afhankelijk is van de admob-SDK.
Mijn buildbestand ziet er als volgt uit:
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:4.4.0@aar'
compile fileTree(dir: 'libs', include: '*.jar')
}
Is er een manier om de afhankelijkheid in de gratis product-smaak te configureren om een eigen libs-map te hebben die wordt samengevoegd met de hoofdmap libs die algemene bibliotheken voor beide smaken bevat?
Als dit mogelijk is, hoe zou ik deze map dan definiëren?
Antwoord 1, autoriteit 100%
Om een smaakspecifieke afhankelijkheid te definiëren, kunt u proCompile
gebruiken in plaats van compile
in uw afhankelijkheidssectie. Wanneer u gradle-eigenschappen uitvoert, krijgt u een overzicht van automatisch gemaakte configuraties.
Het juiste buildbestand ziet er als volgt uit:
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'
}
Antwoord 2, autoriteit 19%
Snel vooruit naar medio 2018. U moet flavorDimensions
toevoegen.
android {
...
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
flavorDimensions "dimensionName"
productFlavors {
pro {
dimension "dimensionName"
}
free {
dimension "dimensionName"
}
}
}
dependencies {
implementation 'com.android.support:support-v4:22.2.0'
freeImplementation 'com.google.android.gms:play-services-ads:15.0.1'
}
Let ook op:
Configuratie ‘compileren’ is verouderd en is vervangen door
‘implementatie’ en ‘api’. Het wordt eind 2018 verwijderd. Voor
meer informatie zie:
http://d.android.com/r/tools/update-dependency -configurations.html
Antwoord 3, autoriteit 6%
Je moet voor elke smaak handmatig een configuratie toevoegen. Voorbeeld
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'
}
Antwoord 4, autoriteit 5%
Eenvoudig:
dependencies {
....
....
gradle.startParameter.getTaskNames().each { task ->
if(task.contains("free")) {
implementation 'com.google.android.gms:play-services-ads:17.2.0'
}
}
....
....
}
of gewoon:
FreeImplementation 'com.google.android.gms:play-services-ads:17.2.0'
Antwoord 5, autoriteit 4%
Bewerken:ik raad aan om een van de andere technieken te gebruiken!
Een alternatief voor het geaccepteerde antwoord is dit:
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.+'
}
Antwoord 6
Als je Gradle met Kotlin gebruikt, kunnen afhankelijkheden voor aangepaste smaken als volgt worden toegevoegd:
dependencies {
"freeImplementation"("com.google.android.gms:play-services-ads:7.5.0")
}