Gradle Android dependency Produkt-Aromen

Ich würde gerne wissen, ob es eine Möglichkeit gibt, die für ein root-Projekt zu definieren/Spritzen einige Eigenschaften in die Abhängigkeiten. Genauer gesagt, das problem das ich habe ist, dass ein library-Projekt hat zu wissen, ob "free" oder "pro" - java-Quellcode und andere Ressourcen vor dem assemblieren/kompilieren Aufgabe ausgeführt wird. Eine Art, wie die Angabe von Produkt-Varianten für Bibliotheksprojekte, die (geerbt von Eltern-Projekt), aber das ist nicht unterstützt durch das Android-plugin für Gradle. Ändern der Bibliothek, Struktur des Projektes, also die Schaffung von "frei" und "pro" - libs ist nicht eine option.

Edit:
Die besten habe ich es geschafft, zu erreichen, so weit ist so etwas wie dieses:

root: bauen.gradle

android {
    ...

    productFlavors {
        free, pro
    }

    sourceSets {
        free {
            project(':..:lib') {
                groupFreePro = 'free'
                //java.srcDirs = ['src', 'free/src']
             }
        }

        pro {
            project(':..:lib') {
                groupFreePro = 'pro'
                //java.srcDirs = ['src', 'pro/src']
            }
        }
    ...
    }
}

Bibliothek: gradle.bauen

android {
    ...
    sourceSets {
        main {
                  java.srcDirs = [groupFreePro + '/src']
                  res.srcDirs = [groupFreePro + '/res']
             }
        }
    ...
    }
}

So, wie ich Spritzen die groupFreePro variable in das " lib " - Projekt. Aber es gibt ein problem mit diesem Ansatz:

Durch die Zeit, wenn die lib-Projekt erhalten, ist es android -> sourceSets Aufgabe der groupFreePro immer auf "pro". Ich vermute, dass es ist, weil alle die sourceSets an der Wurzel Projekt gelesen (und nicht nur die eine Variante, die ich bauen will mit; "frei" zum Beispiel) und damit den letzten Satz/Aufgabe immer überschreibt alle vorher gesetzten Werte groupFreePro.

Wenn ich versuche, den Wert des groupFreePro andere Weise entweder wird überschrieben (wie im obigen Fall), oder ich weiß nicht, die entsprechende Arbeit/Zeit/Ort, wo ich anrufen soll diese variable injection Zeug zu legen Sie die variable auf den gewünschten Wert. Uncommenting java.srcDirs im root-Projekt nicht helfen.

Ich habe versucht, die Lösung dieser Probleme auf meiner eigenen, aber ich bin wirklich neu auf Gradle und auch der Mangel der ordnungsgemäßen Dokumentation (zumindest für die Android-Teil) lässt mich raten, was zu tun ist, die meisten der Zeit, so dass ich eine Menge von Versuch und Irrtum (aber jetzt bin ich irgendwie stecken geblieben).

  • Haben Sie versucht, das 'library' - Projekt ein normales Projekt. Das dependency-management von gradle heißt, Sie können jedes Projekt ziemlich viel wie ein Bibliothek-Projekt.
  • Habe ich, aber dann hatte ich andere Probleme mit dem bauen. Ich denke, das problem war, dass andere Bibliotheken, gebaut als normale Projekte, produziert APKs, dass das build-system (oder ich) nicht wusste, wie er gehören in die main project/APK. Ich könnte versuchen, dass wieder, obwohl, sehen Sie, wenn ich ansprechen kann, in einer anderen Weise.
  • Ist es möglich für Sie zu teilen code für das einrichten ?
  • Für was genau möchtest du mir den code? Das einzige, wo Bibliotheken zu bauen, wie Projekte?
  • Sorry für die späte Antwort... ich meinte den code, wo Sie eine standard-Projekt Abhängigkeit, anstatt eine Bibliothek Abhängigkeit. Ich denke, es ist klar, dass dies nicht möglich ist, mit einer Bibliothek. Ich habe etwas ähnliches gemacht mit ant aber sich in einen gradle-Implementierung.
  • Wenn ich versuche, die Lösung habe ich ersetzen apply plugin: 'android-library' mit apply plugin: 'android' in meinem lib-Projekt. Das bauen hat nicht funktioniert, natürlich, so dass ich nicht entdecken, dass die option weitere.
  • Ah Ok... könnte ich versuchen, das zu tun, für mein Projekt irgendwann... hoffe, ich erinnere mich, es stecken hier, wenn es funktioniert
  • Diesen thread besuchen: stackoverflow.com/questions/24860659/...

InformationsquelleAutor croc | 2013-09-25
Schreibe einen Kommentar