2015-01-15 25 views
16

Voglio usare "divide" con "abi", ma solo per la versione di rilascio. È possibile? Provo ad usare ext variabile e variabile da "def" anche che è impostato su false di default. Questa variabile è impostata su true in buildTypes per releaseWithLog (e release).Gradle Android - si usa split solo per la versione possibile?

Ma non so come funziona Gradle, perché quando aggiungo writeln() con messaggio di test a "debug", "releaseWithLog" e "release" ed eseguo build, tutti i messaggi sono in uscita, quindi questo mi conferma quella variabile "splitsEnabled" è impostata su true sebbene io costruisca per debug - e prevedo il valore "false" per il debug (e non usando le spaccature per il debug quindi).

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

Dal 'splits' è un pari di' buildTypes', ho il sospetto che divide non può essere fatto su una base per-tipo, ma sarò felice di essere smentiti. Ma tieni presente che 'enable splitsEnabled' viene eseguito molto prima che venga scelto un tipo di build. Le istruzioni in 'build.gradle' stanno principalmente costruendo un modello a oggetti. Questo non è uno script interpretato. Solo dopo che il modello dell'oggetto è stato creato, Gradle inizia a capire quali sono i tipi di build necessari per le attività da eseguire. – CommonsWare

+0

Anche io sono interessato - mi piacerebbe risparmiare tempo di costruzione e basta creare una divisione in Debug –

+0

Ho finito per tornare al vecchio modo di fare build ABI per risolvere questo problema! https://twitter.com/silentnuke/status/619501266646003713 –

risposta

5

È possibile risolvere questo facilmente con una riga di comando argomento di Gradle, oppure i "parametri di script:" il campo per un compito Gradle in Android Studio. Ho usato -P per definire il simbolo 'dbgBld' e lo ha utilizzato per la build di debug, ad esempio:

gradle -PdbgBld installDebug 

Il mio file build.gradle ha il comando seguenti cavalli:

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

Ora per build di rilascio che uso :

gradle assembleRelease 

Il simbolo 'dbgBld' non è definito, così le spaccature permettono campo si risolve a true e ottengo 5 file APK. Quando si crea il debug, il parametro -PdbgBld è già stato salvato nella configurazione di Android Studio e ottengo solo un APK "grasso" per il debug, il che si traduce in build di debug molto più veloci.

Greg

+0

Trovato questo veramente utile – speedynomads

+0

Esiste un modo per impostarlo nella configurazione di avvio/debug di Android Studio? – romulof

+0

@OrB Vedo che ora la mia configurazione di avvio/debug di Android Studio esegue un comando di tipo "Grado compatibile". Non so dove modificare le opzioni per questo, ma per costruire la build di Release effettiva, devi comunque eseguire 'gradle assemblareRelease'. Vorrei solo invertire la condizione e definire qualcosa come releaseBld constant, avere 'gradle -PreleaseBld assembleRelease' e modificare build.gradle di conseguenza. – gregko

Problemi correlati