2014-01-09 2 views
9

Anstatt den android Konfigurationsblock in jedem der Teilprojekte zu duplizieren:Wie Android-Konfiguration jedes Teilprojekt mit Gradle zu injizieren?

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 14 
    } 
} 

würde ich viel lieber dieses in der obersten Ebene/root gradle Build-Datei wie:

subprojects{ 
    android { 
     compileSdkVersion 19 
     buildToolsVersion "19.0.0" 

     defaultConfig { 
      minSdkVersion 9 
      targetSdkVersion 14 
     } 
    } 
} 

jedoch das funktioniert nicht. :(

Fehler: "..Could nicht Methode android() für Argumente finden ..."

Antwort

15

Die Lösung hierfür erwies sich als:

subprojects{ 
    afterEvaluate { 
     android { 
      compileSdkVersion 19 
      buildToolsVersion "19.0.0" 

      defaultConfig { 
       minSdkVersion 9 
       targetSdkVersion 14 
      } 
     } 
    } 
} 

Soweit ich weiß, verwenden, weil zu verarbeiten ist/das android {...} bei der Auswertung bedeutet, es muss vorhanden sein (dh. ausdrücklich geschrieben oder enthalten als Teil eines ‚anwenden Plugin‘), sobald es die teil~~POS=TRUNC im Stamm Build trifft Datei. und genauer gesagt, bedeutet dies, dass das Top-Level-Projekt haben muss definiert (was es nicht wahrscheinlich, weil es keine ‚android‘ oder "android-Bibliothek selbst bauen könnte sein). Wenn wir jedoch wieder auf nach der Auswertung drücken, dann können sie verwenden, was direkt innerhalb jedes Teilprojekt zur Verfügung steht.

Diese Frage + Lösung geht auch davon aus, dass alle Teilprojekte irgendeine Form von Android-Projekt sind (in meinem Fall wahr, aber nicht unbedingt für andere). Die sicherere Antwort wäre zu nutzen:

subprojects{ 
    afterEvaluate { 
     if(it.hasProperty('android')){ 
      android { 
       compileSdkVersion 19 
       buildToolsVersion "19.0.0" 

       defaultConfig { 
        minSdkVersion 9 
        targetSdkVersion 14 
       } 
      } 
     } 
    } 
} 
+0

Das sonst funktioniert gut, aber auf diese Weise kann kein Teilprojekt den Standardwert außer Kraft setzen. Sie sollten vor dem Festlegen der Werte nach der Existenz von compileSdkVersion und buildToolsVersion suchen. –

+0

Das stimmt, aber auf der anderen Seite, wenn jemand versucht, aus Versehen in einem Teilprojekt zu überschreibt sie nicht mit ihm weg erhalten;) – CasualT

Verwandte Themen