2017-01-13 3 views
5

Im Moment habe ich zwei productFlavors in gradle. Ich muss eine dritte hinzufügen. Die zwei vorhandenen Produktaromen teilen so ziemlich alles. Nennen Sie sie Katze und Hund - sie sind beide Tiere. Die dritte Variante, die ich hinzufügen muss, ist im Wesentlichen eine Sandbox-Version der App. Wir könnten es Fahrrad nennen.Drei Produkt Aromen: zwei sehr ähnlich, ein kleiner, aber unterschiedliche

Say my app hat jetzt zwölf Aktivitäten alle von Katze und Hund geteilt. Aber der Bike-Produktgeschmack sollte nur Zugriff auf drei dieser Aktivitäten haben und Bike muss eine eigene Launcher-Aktivität haben. Wie überarbeite ich meinen Code, um dies intelligent zu berücksichtigen? Wiederum teilen sich zwei Geschmacksrichtungen so ziemlich alles, während ein Geschmacksstoff viel weniger mit den beiden anderen teilt.

UPDATE

Es scheint eine intelligente Art und Weise haben diese Change default source set configurations mit zu lösen. Grundsätzlich würde ich das /main sourceSet für alles behalten, was über die ganze APP üblich ist; a /dogCat sourceSet für alles, was sowohl Hund als auch Katze betrifft; und ein /bike sourceSet für was nur zu Bike gehört.

Nachdem so viel herausgefunden, ich bin immer noch einige Probleme mit dem gradle sourceSets Teil

android { 
    ... 
    sourceSets { 
    . . . 
    } 
} 
Schreiben
+0

Ich habe die Antworten erklärt, bitte überprüfen Sie und lassen Sie es mich wissen. Wenn es für Sie hilfreich ist oder nicht. – Shekhar

+0

Überprüfen Sie unten die Antwort –

+0

Überprüfen Sie diese Antwort, die ähnliche Implementierung hat. http://stackoverflow.com/questions/40302977/while-using-product-flavours-what-files-are-common-in-e-flavour-and-what-file/40303385#40303385 Hoffe das hilft .... – Stallion

Antwort

0

Sie könnten diese zwei Ansätze versuchen:

  • alle Aktivitäten in Ihrem Haupt-Geschmack Implement (java/main wird mit allen in Gradle definierten Varianten geteilt) und jedes Android-Manifest mit Aromen sollte nur die Aktivitäten referenzieren, die für die Arbeit erforderlich sind. Mit Hilfe von Proguard können Sie sicherstellen, dass nicht verwendeter Code von nicht referenzierten Aktivitäten nicht in Ihrem Artefakt (APK) eingesetzt wird. Sie können verschiedene Trägerraketen haben, wenn Sie dies in jedem gewürzten Bereich festlegen. AndroidManifest.xml

  • Arbeiten mit Bibliotheksprojekten. Auf diese Weise können Sie in jedem Flavour verschiedene Bibliotheken und wieder verschiedene Manifeste laden.

Ich werde versuchen, diese Antwort mit einigen Beispielen in einer anderen Zeit zu verlängern.

3

Behalten Sie alle allgemeinen Klassen im Hauptgeschmack. Zum Beispiel haben Sie drei Geschmacksrichtungen, Katze, Hund und Fahrrad. In diesen drei Geschmacksrichtungen sind Katze und Hund meistens gleich, außer einigen. Auf der anderen Seite hat Bike auch einige Klassen, die üblich sind.

drei Szenarien:

01. Wenn alle Geschmack gemeinsame Funktionalität hat

Wie, Katze, Hund und Fahrrad alle haben eine Klasse, die als Preisinformationen gestattet. Dann halte diese Klasse im Hauptgeschmack.

02. Wenn Katze und Hund haben gleiche Funktionalität aber Bike nicht.

Wie, Katze und Hund haben eine gemeinsame Funktionalität Lifespan genannt wird, dann halten Sie diese Klasse in diesem Geschmack nur.

03. Wenn nur Bike gemeinsame Funktionalität haben, aber die anderen beiden Geschmack nicht.

Dann behalten Sie diese bestimmte Klasse nur in Bike Flavor.

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.productflavor" 
     minSdkVersion 14 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    productFlavors { 

     cat { 
      applicationId "com.cat.theme" 
     } 
     dog { 
      applicationId "com.dog.theme" 
     } 
     bike { 
      applicationId "com.bike.theme" 
     } 
    } 
} 

Below is the Image I'm attaching.

Da ist MainActivity gemeinsam erwähnt dann nur im Haupt Geschmack.

1

Ich glaube, ich konnte mein eigenes Problem lösen. zu tun haben, alles, was ich

android { 
    ... 
    sourceSets { 
    main { 
     … 
    } 
    dog { 
     java.srcDirs = [‘dog_cat/java'] 
     … 
    } 
    cat { 
     java.srcDirs = [‘dog_cat/java'] 
     … 
    } 
    bike { 
     java.srcDirs = [‘bike/java’]//which is actually superfluous 
     … 
    } 
    } 

Jetzt werde ich

+0

Ich denke, Sie wollen 'java.srcDir 'src/dog_cat/java'', die ein Quellverzeichnis anstelle von '=', die die Standardkonfiguration überbrückt. –

1

Sie können erstellen Sie mehrere Aromen Ihres Projekts folgen Sie einfach unten Schritt bestätigen testen:

Schritt 1. Copy Res. Ordner von App/src/res und einfügen in App/src/YourFlavourName (Katze/Hund/Fahrrad)/Res.

Schritt 2. App build.gradle

android {

productFlavors { 

    Cat { 
     applicationId = "com.cat" 
    } 

    Dog { 
     applicationId = "com.dog" 
     versionCode 1 
     versionName "1.0" 
    } 

    Bike { 
     applicationId = "com.bike" 
     versionCode 1 
     versionName "1.0" 
    } 

    } 

sourceSets {

main { 
     aidl.srcDirs = ['src'] 
     renderscript.srcDirs = ['src'] 
     jniLibs.srcDirs = ['libs'] 
    } 

    Cat { java.srcDirs = ['src/Cat/java', 'src/Cat/java/'] } 
    Dog { java.srcDirs = ['src/Dog/java', 'src/Dog/java/'] } 
    Bike { java.srcDirs = ['src/Bike/java', 'src/Bike/java/'] } 

} 

}

Schritt 3: Linke Seite des Android Studio o gibt es zwei Dia-Option Favoriten und Erstellen varients enter image description here klicken Sie auf Build-varients und wählen BuildVarient für Lauf perticulat Geschmack

Schritt 4: Run Appication

1

@Nouvel Travay, Sehen, was passiert, wenn Sie Definieren Sie Flavors, die Sie auf verschiedene Arten definieren, wie sich die Anwendung verhält. Angenommen, Sie möchten verschiedene Strings in verschiedenen Varianten anzeigen, müssen Sie diese Strings in diesen verschiedenen Varianten einzeln definieren. Ähnlich, wenn Sie ein anderes Verhalten/eine andere Funktionalität definieren möchten, müssen Sie dieses Verhalten in verschiedenen Varianten individuell definieren. WICHTIG: - Der Dateiname sollte jedoch gleich bleiben, so wie Sie MainActivity für einen Geschmack, aber keinen anderen Namen wie StartActivity für dasselbe Verhalten für andere Geschmacksrichtungen nennen können. Ich hoffe du hast es verstanden. Fühlen Sie sich frei, um mehr Abstand zu bitten.

Verwandte Themen