2016-01-04 8 views
20

Ho implementato con successo APK Splits in modo che vengano generati APK distinti per diversi ABI.Utilizzo di APK Splits per versione ma non Debug tipo di build

Tuttavia, per l'efficienza (e poiché non ho bisogno di APK non-armeabi-v7a in Debug), vorrei limitare i build di Debug per generare solo APK armeabi-v7a.

Come si può fare?

Un'idea è con questo:

abi { 
    enable true 
    reset() 
    include 'x86', 'armeabi-v7a', 'mips' 
    universalApk false 
} 

Forse c'è qualche modo per impostare enable in base al tipo di costruzione?

risposta

14

È possibile provare una variazione sulla risposta di @ Geralt_Encore, che evita il comando separato gradlew. Nel mio caso, mi sono preoccupato solo di utilizzare la divisione APK per ridurre la dimensione del file APK rilasciato e volevo farlo interamente in Android Studio.

splits { 
    abi { 
     enable gradle.startParameter.taskNames.contains(":app:assembleRelease") 
     reset() 
     include 'x86', 'armeabi-v7a', 'mips' 
     universalApk false 
    } 
} 

Potrebbe essere necessario sostituire il prefisso :app con il nome del modulo applicativo, se non è letteralmente chiamato app.

Da quello che ho visto, la Build | La voce Genera menu APK firmato in Android Studio genera l'APK utilizzando il target Gradle assembleRelease.

Si noti che se si genera un APK utilizzando i sapori di build o se la versione di rilascio non è denominata release, sarà necessario modificare il target assembleRelease di conseguenza, ad es. assemblePaidRelease se l'aroma della build è paid.

+0

Funziona alla grande, anche quando si usano aromi con più dimensioni. –

+0

Ho visitato questo problema probabilmente 6 volte nell'ultimo anno. Hai appena risolto il mio ridicolo problema. Grazie per sempre – aProperFox

+2

La corrispondenza di stringhe parziali rende un po 'più pulito 'taskNames.any {it.contains (" assembleRelease ")}' –

1

In realtà, è ancora necessario abilitare Splits, altrimenti l'APK includerà librerie per tutte le ABI e probabilmente non è ciò che si desidera.

Questo dovrebbe funzionare per le vostre esigenze:

buildTypes { 
    debug { 
     splits { 
      abi { 
       enable true 
       reset() 
       include 'armeabi-v7a' 
       universalApk false 
      } 
     } 
     ... 
    } 
    release { 
     splits { 
      abi { 
       enable true 
       reset() 
       include 'x86', 'armeabi-v7a', 'mips' 
       universalApk false 
      } 
     } 
     ... 
    } 
} 
+7

Purtroppo è completamente ignorato dagli strumenti di creazione. –

13

È possibile impostare enable sulla base di argomenti da riga di comando. Ho risolto un problema simile quando volevo utilizzare splits solo per la versione di rilascio, ma non per regolari build di debug.

splits { 
    abi { 
     enable project.hasProperty('splitApks') 
     reset() 
     include 'x86', 'armeabi-v7a' 
    } 
} 

E poi ./gradlew -PsplitApks assembleProdRelease (prod è un sapore nel mio caso).

Problemi correlati