2015-01-15 5 views
16

Ich möchte "splits" von "abi" verwenden, aber nur für den Release-Build. Ist das möglich? Ich versuche ext Variable und Variable mit "def" auch zu verwenden, die standardmäßig auf false gesetzt ist. Diese Variable wird in BuildTypes für releaseWithLog (und release) auf true gesetzt.Android Gradle - ist die Verwendung von Splits nur für die Freigabe möglich?

Aber ich weiß nicht, wie Gradle arbeiten, denn wenn ich writelnn() mit Testnachricht zu "debuggen", "releaseWithLog" und "release" und Build ausführen, werden alle Nachrichten ausgegeben, so bestätigt dies mich Diese Variable "splitsEnabled" wird auf "true" gesetzt, obwohl ich für das Debugging erstellt habe - und ich erwarte den Wert "false" für das Debugging (und verwende daher keine Splits für das Debugging).

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 19 
    buildToolsVersion '20.0.0' 
    ext { 
     splitsEnabled = false 
    } 
    defaultConfig { 
    ... 
    } 
    buildTypes { 
     debug { 
      ... 
     } 
     releaseWithLog { 
      ... 
      splitsEnabled = true 
     } 
     release.initWith(releaseWithLog) 
     release { 
      ... 
     } 
    } 
    ... 
    splits { 
     abi { 
      println(splitsEnabled) 
      enable splitsEnabled 
      reset() 
      include 'x86', 'armeabi-v7a', 'armeabi' 
      exclude 'x86_64', 'mips64', 'arm64-v8a', 'mips' 
      universalApk true 
     } 
    } 
    ... 
+0

Seit 'splits' ist ein Peer von' buildTypes', ich vermute, dass Splits nicht auf einer pro-Typ-Basis durchgeführt werden, aber ich werde glücklich sein, falsch erwiesen. Beachten Sie jedoch, dass 'enable splitsEnabled' lange vor der Auswahl eines Build-Typs ausgeführt wird. Die Anweisungen in 'build.gradle' bauen meistens ein Objektmodell auf. Dies ist kein interpretiertes Skript. Erst nachdem das Objektmodell erstellt wurde, beginnt Gradle herauszufinden, welche Buildtypen für die ausgeführten Tasks benötigt werden. – CommonsWare

+0

Ich bin auch daran interessiert - würde gerne Build-Zeit sparen und nur einen Split in Debug bauen –

+0

Ich landete zurück auf den alten Weg ABI Builds zu tun, um dieses Problem zu lösen! https://twitter.com/silentnuke/status/619501266646003713 –

Antwort

5

können Sie diese lösen sich leicht mit einem Befehlszeilenargument zu Gradle oder die „Skriptparameter:“ Feld für eine Gradle Aufgabe in Android Studio. Ich benutzte -P Symbol 'dbgBld' zu definieren und verwendet es für Debugbuilds, zB:

gradle -PdbgBld installDebug 

Meine build.gradle Datei hat die folgenden Splits Befehl:

splits { 
    abi { 
     enable !project.hasProperty('dbgBld') 
     reset() 
     include 'armeabi', 'armeabi-v7a', 'x86', 'mips' 
     universalApk true 
    } 
} 

Jetzt Release zu bauen Ich benutze :

gradle assembleRelease 

Das Symbol 'dbgBld' nicht definiert ist, so dass die Splits Felddateien auf true und ich 5 APK ermöglichen löst. Wenn Debugging erstellt wird, ist das -PdbgBld bereits in meiner Android Studio-Konfiguration gespeichert und ich bekomme nur ein "fettes" APK zum Debuggen, was zu viel schnelleren Debug-Builds führt.

Greg

+0

Gefunden diese wirklich nützlich – speedynomads

+0

Gibt es eine Möglichkeit, dies in Android Studio Run/Debug Startkonfiguration zu setzen? – romulof

+0

@OrB Ich sehe, dass jetzt meine Android Studio Run/Debug-Startkonfiguration einen "Grade-aware Make" -Befehl ausführt. Ich weiß nicht, wo ich irgendwelche Optionen für diese Option bearbeiten soll, aber für die Erstellung des eigentlichen Release-Builds müssen Sie immer noch 'gradle assembleRelease' ausführen. Ich würde einfach die Bedingung umkehren und etwas wie releaseBld constant definieren, um 'gradle -PreleaseBld assembleRelease' zu haben und build.gradle entsprechend zu modifizieren. – gregko

Verwandte Themen