2014-05-09 22 views
16

ich in gradle (Android Studio) haben 4 Build-Typengradle: Android Studio erben buildtype

android { 
    buildTypes { 
    release { ... } 
    debug { ... } 
    kindle { ... } 
    kindle_debug { ... } 
    } 
} 

Und ich weiß, dass mein src Ordner für jeden Build-Typ einen Ordner haben kann. So ist es bis in

src/ 
    -- debug 
    -- kindle 
    -- kindle_debug 
    -- main // used for every project 
    -- release 

Im Moment endet kindle ist die gleiche wie release und kindle_debug ist die gleiche wie debug.

Wie kann ich vermeiden, die src-Ordner zu duplizieren? Gibt es eine Möglichkeit, von release und debug zu erben oder habe ich die src-Ordner selbst in der build.gradle Datei zu setzen?

Edit: Eine Lösung, die zu funktionieren scheint, besteht darin, Symlinks zu setzen, aber ich möchte Mac OS und Windows OS verwenden und nicht jeder neue Benutzer möchte selbst Symlinks setzen.

Edit 2: Ich benutze jetzt Produkt Aromen, aus diesem Grund kann ich Debug/Release und damit Google, Amazon und Samsung haben. Das ist die beste Lösung für meinen Zweck.

Antwort

31

Sie können von Build-Typen wie folgt erben:

buildTypes { 
    release { ... } 
    debug { ... } 

    kindle { 
     initWith buildTypes.release 
     ... 
    } 
    kindle_debug { 
     initWith buildTypes.debug 
     ... 
    } 
    } 
+3

Ich habe es das zweite Mal getestet. Es verwendet nicht meine 'release' /' debug'-Ordner. Es scheint nur die Einstellungen zu verwenden, die in 'release' /' debug' definiert sind und nicht die Standardwerte. – mars3142

+0

Es funktioniert, wenn Sie die Signatur-Konfiguration erben müssen - in meinem Fall vom Debug-Build-Typ. – AgentKnopf

1

Wenn ich das richtig verstehe, wollen Sie nur ein paar Dateien baut zwischen Debug- und Release unterscheiden? In diesem Fall sollte die folgende Arbeit (war mein usecase das gleiche wie Sie):

https://stackoverflow.com/a/28279105/1041533

Aus Gründen der Vollständigkeit werde ich den relevanten Teil von oben Antwort hier einfügen:

  1. Ressource Verzeichnis basierter Ansatz

Das war die Absicht, eine Datei im xML-Ordner des jeweiligen Kunden auf der Grundlage zu ändern, ob es eine Freigabe oder ein Debug-Build ist. Dies kann durch eine entsprechende Ordnerstruktur erreicht werden. Basierend auf der ursprünglichen Frage haben wir 3 Kunden, und jeder Kunde hat einen Debug- und einen Release-Build. Die oben genannten XML-Dateien sind für jeden Kunden und Buildtyp unterschiedlich. Daraus ergibt sich die folgende Verzeichnisstruktur:

src/ 
    - customerA 
    //Contains all relevant resource files specific to customer A 
    - customerB 
    //Contains all relevant resource files specific to customer B 
    - customerC 
    //Contains all relevant resource files specific to customer C 

    - customerADebug 
    //Contains debug server-settings file for customer A 
    - customerBDebug 
    //Contains debug server-settings file for customer B 
    - customerCDebug 
    //Contains debug server-settings file for customer C 
    - customerARelease 
    //Contains release server-settings file for customer A 
    - customerBRelease 
    //Contains release server-settings file for customer B 
    - customerCRelease 
    //Contains release server-settings file for customer C 

So ist der Hauptinhalt für jedes Produkt Geschmack im Ordner wurde mit dem gleichen Namen wie der Geschmack (customerA, customerB etc. siehe erster Teil über Snippet). Jetzt wird diese eine Datei, die davon abhängt, ob es ein Debug- oder Release-Build für jeden Kunden war, in die entsprechenden Ordner wie customerADebug -> enthält Datei mit Servereinstellungen für den Debug-Modus etc. gesteckt.

Und wenn Sie bauen customerA zum Beispiel wird die richtige Datei ausgewählt, wenn Sie einen Debug- oder Release-Build erstellen.

Lassen Sie mich wissen, wenn ich das weiter klären sollte.

3

Die Antwort kann ein wenig zu spät sein, aber ich hatte ein ähnliches Problem und es geschafft, dies folgende, indem Sie die lösen:

android { 
    sourceSets { 
     kindle { 
      java.srcDirs = ["src/release/java", "src/main/java"] 
     } 
     kindle_debug { 
      java.srcDirs = ["src/debug/java", "src/main/java"] 
     } 
    } 
} 

Wenn Sie dies Ihren Build hinzuzufügen.Gradle-Datei, der Kindle-Build-Typ wird nur Java-Dateien aus dem Release- und Hauptordner verwenden und der Build-Typ Kindle_debug wird den Debug- und Release-Ordner verwenden.

Natürlich könnten Sie den kindle-Ordner oder den kindle_debug Ordner hinzufügen:

java.srcDirs = ["src/kindle/java", "src/release/java", "src/main/java"] 
java.srcDirs = ["src/kindle_debug/java", "src/debug/java", "src/main/java"] 

Sie können jedoch in zweifacher Ausfertigung Klasse fehlerfrei laufen.

+0

Hast du meinen zweiten Schnitt gesehen? Ich verwende jetzt Produktaromen statt Buildtypen. Diese Änderung funktioniert sehr gut für meine Bedürfnisse. – mars3142

+0

Habe das nicht gesehen :) Aber in meinem Fall ist das keine Option ... – PaMaDo