Ich bin mir sicher, dass dies schon einmal gefragt wurde, aber ich finde nur nicht die richtigen Schlüsselwörter Antworten zu finden, so ...Wie höre ich Gradle für Android vom Erstellen ab * All * Bibliotheksmodul Build-Typen auf jedem Build?
Wie höre ich Gradle für Android (innerhalb oder außerhalb von Android Studio) aus dem Gebäude alle Build-Typen eines Bibliotheksmoduls, wenn ich Anfrage eine Build-Typ erstellen? IOW, wenn ich debug
baue, wie verhindere ich Gradle für Android von auch Gebäude release
?
Die Hintergrundgeschichte, für die mit alternativen Ideen:
Angenommen, dass ich zwei Android Studio-Projekte haben, A und B hat jeder zwei Module: ein Android-Bibliothek-Modul und eine Demo-Anwendung, die abhängig auf dieser Bibliothek. Also, ich habe insgesamt vier Module:
- A L: Projekt A Bibliothek
- A D: Projekt A die Demo-Anwendung
- B L: Projekt B Bibliothek
- B D: Projekt B's Demo App
So lange ein s A und B sind nicht verwandt, das Leben ist gut.
Aber was, wenn ich möchte B L von A L abhängen?
Für release
, wenn ich in einer Maven-Stil Artefakt-Repository diese Bibliotheken gehen will, muß ich die release
Variante B L auf dem veröffentlichten Artefakt von A L abhängig zu sein. Auf diese Weise hat mein B L POM die richtige Abhängigkeitsinfo.
Für debug
, wäre es ideal, wenn B L auf die Arbeitskopie eines L abhängen könnte. Während das Einrichten ein bisschen hacky ist, kann ich es zum Laufen bringen.
Aber dann, wenn ich Sachen A L, wie eine neue Java-Klasse hinzufügen, und ich versuche, es von B L verwendet wird, kann ich nicht bauen. Mein debug
Build ist vollkommen in Ordnung AFAICT.Doch obwohl ich wirklich wirklich wirklich nicht jetzt eine release
Build tun wollen, Gradle für Android besteht ohnehin eine release
bauen auf tun:
$ gradle assembleDebug
:demo:preBuild UP-TO-DATE
:demo:preDebugBuild UP-TO-DATE
:demo:compileDebugNdk UP-TO-DATE
:demo:checkDebugManifest
:demo:preReleaseBuild UP-TO-DATE
:richedit:compileLint
:richedit:copyReleaseLint UP-TO-DATE
:richedit:mergeReleaseProguardFiles UP-TO-DATE
:richedit:preBuild UP-TO-DATE
:richedit:preReleaseBuild UP-TO-DATE
:richedit:checkReleaseManifest
:richedit:prepareReleaseDependencies
:richedit:compileReleaseAidl UP-TO-DATE
:richedit:compileReleaseRenderscript UP-TO-DATE
:richedit:generateReleaseBuildConfig UP-TO-DATE
:richedit:generateReleaseAssets UP-TO-DATE
:richedit:mergeReleaseAssets UP-TO-DATE
:richedit:generateReleaseResValues UP-TO-DATE
:richedit:generateReleaseResources UP-TO-DATE
:richedit:packageReleaseResources
:richedit:processReleaseManifest UP-TO-DATE
:richedit:processReleaseResources
:richedit:generateReleaseSources
:richedit:compileReleaseJava
(wo richedit
ist B L und demo
ist B D in meiner Nomenklatur oben)
ich bitte die debug
bauen zu montieren, aber es kompiliert noch die release
bauen. Und die release
Build kann nicht kompilieren, weil ich versuche, B L verwenden, um neue unreleased Sachen von A L zu haben.
Ich bin einigermaßen zuversichtlich, obwohl nicht 100% sicher, dass, wenn Gradle für Android würde einfach ignorieren release
, wenn ich versuche zu bauen debug
, würde ich in Ordnung sein.
Natürlich gibt es mögliche Abhilfen:
Ich konnte die Idee aufgeben, dass diese getrennte Bibliotheken und konsolidieren sie in einem. Ich kann das noch tun. Aber es fühlt sich so an, als würde das, was ich versuche, möglich sein.
konnte ich nicht versuchen, die A L Änderungen mit, bis ich ein
release
A L veröffentlichen, wobei in diesem Fall B L für auf den veröffentlichten Artefakt sowohldebug
undrelease
verlassen kann. Dies scheint jedoch eine Menge Patchlevel-Abwanderung im A-Projekt zu verursachen, da mein Hauptverbraucher "Anwendungsfall" dieser neuen A-Funktionalität B ist. Nur weil ich Änderungen an A habe, die Instrumentierungstests bestehen, bedeutet das nicht, dass sie es sind werde was B braucht, und ich werde das nicht wissen, bis ich B mit den Änderungen in A bauen kann.Eine Abwandlung der obigen Problemumgehung kann
SNAPSHOT
Releases sein, wo ich irgendwie die Überprüfung fürSNAPSHOT
Releases ermöglichen würde fürdebug
aber nicht fürrelease
oder etwas. Allerdings scheint die Mischung aus Maven, Gradle, Android undSNAPSHOT
allesamt zu wenig dokumentiert zu sein, und ich habe keine Ahnung, ob es etwas ist, was ich verfolgen sollte. Und wie bei der vorhergehenden Aufzählung würde dies immer noch dazu führen, dassrelease
unnötigerweise gebaut wird; Der Build würde in meinem Fall einfach gelingen.
Gibt es etwas Gradle für Android irgendwo einstellen, dass ich das sagt fehle debug
bedeutet nurdebug
?
Ich bin mit Gradle nicht versiert, also kann das völliger Unsinn sein: - | - Kannst du das 'Build Variants' Panel öffnen (Ansicht> Tool Windows> Build Varianten) und' debug' für 'richedit' Modul wählen? – Vikram
@Vikram: Das ist, was da ist. Das wiederum bedeutet, dass wenn Sie das Projekt erstellen oder ausführen, es eine AssembledDebug-Aufgabe ausführt und zu den beschriebenen Problemen führt. Ich benutze die Kommandozeile ** 'gradle assembleDebug' ** Aufgabe, um das Gradle Transkript anzuzeigen, aber die Ergebnisse sind die gleichen. Trotzdem danke! – CommonsWare
https://code.google.com/p/android/issues/detail?id=66805#c3 –