Je suis en train de convertir l'une de mes applications vers Gradle et souhaite utiliser les nouvelles fonctionnalités de version pour créer une version payante et gratuite.
Je veux que seule la version basée sur la publicité dépende du SDK d'admob.
Mon fichier de construction ressemble à ceci:
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')
}
Existe-t-il un moyen de configurer la dépendance dans la version de produit libre pour avoir son propre dossier libs fusionné avec le dossier principal libs contenant les bibliothèques générales des deux versions?
Si cela est possible, comment définirais-je ce dossier?
Pour définir une dépendance spécifique à une saveur, vous pouvez utiliser proCompile
au lieu de compile
dans votre section de dépendance. Lorsque vous exécutez des propriétés de dégradé, vous obtenez une vue d'ensemble des configurations créées automatiquement.
Le fichier de construction correct ressemble à ceci:
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'
}
Avance rapide jusqu'à la mi-2018. Vous devrez ajouter flavorDimensions
.
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'
}
Aussi, prenez note:
La configuration 'compiler' est obsolète et a été remplacée par 'implémentation' et 'api'. Il sera supprimé à la fin de 2018. Pour plus d'informations, voir: http://d.Android.com/r/tools/update-dependency-configurations.html
Vous devez ajouter manuellement la configuration pour chaque type. Exemple
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'
}
Edit: Je recommande d'utiliser l'une des autres techniques!
Une alternative à la réponse acceptée est la suivante:
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.+'
}
Simple:
dependencies {
....
....
gradle.startParameter.getTaskNames().each { task ->
if(task.contains("free")) {
implementation 'com.google.Android.gms:play-services-ads:17.2.0'
}
}
....
....
}
ou juste:
FreeImplementation 'com.google.Android.gms:play-services-ads:17.2.0'