So definieren Sie unterschiedliche Abhängigkeiten für unterschiedliche Produktaromen

Lesezeit: 4 Minuten

So definieren Sie unterschiedliche Abhangigkeiten fur unterschiedliche Produktaromen
Janusz

Ich konvertiere eine meiner Apps in Gradle und möchte die neuen Build-Flavor-Funktionen verwenden, um eine kostenpflichtige und eine kostenlose werbebasierte Variante zu haben.

Ich möchte, dass nur die werbebasierte Version vom Admob SDK abhängt.

Meine Build-Datei sieht so aus:

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')
}

Gibt es eine Möglichkeit, die Abhängigkeit in der kostenlosen Produktvariante so zu konfigurieren, dass sie einen eigenen libs-Ordner hat, der mit dem Hauptordner libs zusammengeführt wird, der allgemeine Bibliotheken für beide Varianten enthält?

Wenn dies möglich ist, wie würde ich diesen Ordner definieren?

  • Besuchen Sie diesen Thread: stackoverflow.com/questions/24860659/…

    – Ali

    1. August 14 um 21:19 Uhr

1643905387 875 So definieren Sie unterschiedliche Abhangigkeiten fur unterschiedliche Produktaromen
René Groeschke

Um eine geschmacksspezifische Abhängigkeit zu definieren, können Sie verwenden proCompile anstatt compile in Ihrem Abhängigkeitsbereich. Wenn Sie Gradle Properties ausführen, erhalten Sie eine Übersicht über automatisch erstellte Konfigurationen.

Die korrekte Build-Datei sieht folgendermaßen aus:

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'
}

  • Ich versuche das und erhalte diesen Fehler, Error:(28, 0) Build script error, unsupported Gradle DSL method found: 'glassCompile()'! (Der Geschmack, dem ich eine Abhängigkeit hinzufügen möchte, ist “Glas”.)

    – nmr

    10. Juni 14 um 20:20 Uhr

  • Ahh, sieht so aus, als müsstest du die verschieben dependencies Block unterhalb der android Block. Wie intuitiv.

    – nmr

    10. Juni 14 um 20:22 Uhr

  • Notiere dass der xxxCompile Closures, die Gradle generiert, funktionieren nicht, wenn der Flavor-Name mit einem Großbuchstaben beginnt.

    – Jarett Millard

    21. Januar 15 um 17:44 Uhr

  • “packageName” sollte “applicationId” sein

    – Apperseite

    14. April 15 um 7:49 Uhr

  • Wie gehen Sie damit um, die Ad-Klassen nicht aufzurufen?

    – Jared Burrows

    13. Juni 15 um 19:55 Uhr

Schneller Vorlauf bis Mitte 2018. Sie müssen hinzufügen 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'
}

Beachten Sie außerdem:

Die Konfiguration „compile“ ist veraltet und wurde durch „implementation“ und „api“ ersetzt. Es wird Ende 2018 entfernt. Weitere Informationen finden Sie unter:
http://d.android.com/r/tools/update-dependency-configurations.html

  • Weißt du, wie man es stattdessen mit buildVariants macht? wie proDebugImplementation.

    – Leandro Ocampo

    22. November 18 um 15:00 Uhr

  • Bitte fügen Sie dazu eine separate Frage hinzu. hier im Kommentarbereich verlinken. Bitte fügen Sie vollständige Details darüber hinzu, was Sie erreichen möchten. 🙂

    – Benutzer1506104

    23. November 18 um 8:56 Uhr

Sie müssen die Konfiguration für jeden Flavor manuell hinzufügen. Beispiel

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'
}

  • Wie geht es von dort aus weiter? Wie aktiviere ich die verschiedenen Konfigurationen? Gilt dies nur für den Android-Build? Ist das mit Nicht-Android-Builds möglich?

    – koppor

    17. April 17 um 19:47 Uhr

1643905388 322 So definieren Sie unterschiedliche Abhangigkeiten fur unterschiedliche Produktaromen
nerges

Einfach:

dependencies {

    ....
    ....

    gradle.startParameter.getTaskNames().each { task ->
        if(task.contains("free")) {
             implementation 'com.google.android.gms:play-services-ads:17.2.0'
        }
    }

    ....
    ....
}

oder nur:

FreeImplementation 'com.google.android.gms:play-services-ads:17.2.0'

So definieren Sie unterschiedliche Abhangigkeiten fur unterschiedliche Produktaromen
Jordi

Bearbeiten: Ich empfehle die Verwendung einer der anderen Techniken!

Eine Alternative zur akzeptierten Antwort ist diese:

    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.+'
    }

  • Dadurch können Sie nicht mehrere Geschmacksrichtungen gleichzeitig erstellen, was für die meisten von uns ein Deal Breaker ist. Außerdem funktioniert es möglicherweise auch nicht gut mit Android Studio

    – Rene Groeschke

    24. November 15 um 14:51 Uhr

  • das ist im Block Abhängigkeiten?

    – Benutzer1743524

    10. März 16 um 16:08 Uhr

  • Ist dieser Block in Abhängigkeit?

    – Karacago

    7. August 16 um 10:37 Uhr

  • hmm … skaliert nicht gut mit 10 oder 50 Geschmacksrichtungen, oder?

    – Ewoks

    24. Mai 17 um 7:35 Uhr

  • @Ewoks Ich muss viele Geschmacksrichtungen machen, hast du eine bessere Idee?

    – Vikash Parajuli

    17. Juli 18 um 11:14 Uhr

1643905388 364 So definieren Sie unterschiedliche Abhangigkeiten fur unterschiedliche Produktaromen
Miloš Cernilovsky

Wenn Sie Gradle mit Kotlin verwenden, können Abhängigkeiten für benutzerdefinierte Flavors wie folgt hinzugefügt werden:

dependencies {
    "freeImplementation"("com.google.android.gms:play-services-ads:7.5.0")
}

  • Dadurch können Sie nicht mehrere Geschmacksrichtungen gleichzeitig erstellen, was für die meisten von uns ein Deal Breaker ist. Außerdem funktioniert es möglicherweise auch nicht gut mit Android Studio

    – Rene Groeschke

    24. November 15 um 14:51 Uhr

  • das ist im Block Abhängigkeiten?

    – Benutzer1743524

    10. März 16 um 16:08 Uhr

  • Ist dieser Block in Abhängigkeit?

    – Karacago

    7. August 16 um 10:37 Uhr

  • hmm … skaliert nicht gut mit 10 oder 50 Geschmacksrichtungen, oder?

    – Ewoks

    24. Mai 17 um 7:35 Uhr

  • @Ewoks Ich muss viele Geschmacksrichtungen machen, hast du eine bessere Idee?

    – Vikash Parajuli

    17. Juli 18 um 11:14 Uhr

.

757450cookie-checkSo definieren Sie unterschiedliche Abhängigkeiten für unterschiedliche Produktaromen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy