2016-01-04 8 views
20

Ich habe APK Splits erfolgreich implementiert, so dass separate APKs für verschiedene ABIs generiert werden.Verwenden von APK-Splits für Release, aber nicht Debug Build-Typ

Allerdings, für die Effizienz (und da ich nicht brauchen nicht-armeabi-v7a APKs in Debug), möchte ich Debug-Builds beschränken, um nur armeabi-v7a APKs zu generieren.

Wie kann das gemacht werden?

Eine Idee ist, mit dieser:

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

Vielleicht eine Art und Weise gibt es enable zu basierend auf dem Build-Typ?

Antwort

14

Sie können eine Variante der Antwort von @ Geralt_Encore versuchen, die den separaten Befehl gradlew vermeidet. In meinem Fall wollte ich nur die APK-Aufteilung verwenden, um die Größe der APK-Datei zu reduzieren, und ich wollte das vollständig innerhalb von Android Studio tun.

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

Sie müssen möglicherweise den :app Präfix mit dem Namen Ihres Anwendungsmodul ersetzen, wenn es buchstäblich nicht app benannt.

Von dem, was ich gesehen habe, die Build | In Android Studio den APK-Menüeintrag erstellen generiert das APK mit dem Zielziel assembleRelease Gradle.

Hinweis: Wenn Sie ein APK mit Build-Flavors generieren oder Ihr Build-Release nicht den Namen release hat, müssen Sie das Ziel assembleRelease entsprechend ändern, z. assemblePaidRelease Wenn Ihr Build-Geschmack paid ist.

+0

Dies funktioniert hervorragend, auch wenn Sie Aromen mit mehreren Dimensionen verwenden. –

+0

Ich habe diese Ausgabe wahrscheinlich 6 Mal im letzten Jahr besucht. Sie haben gerade mein lächerliches Problem gelöst. Danke für immer. – aProperFox

+2

Teilstring Übereinstimmung macht es ein wenig sauberer 'taskNames.any {it.contains ("assembleRelease")} ' –

1

Eigentlich müssen Sie noch Splits aktivieren, sonst wird Ihr APK libs für alle ABIs enthalten und das ist wahrscheinlich nicht das, was Sie wollen.

Dies sollte für Ihre Anforderungen arbeiten:

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

Leider wird es vollständig von Build-Tools ignoriert. –

13

Sie enable auf Befehlszeilenargument basierend einstellen. Ich habe ein ähnliches Problem gelöst, wenn ich Splits nur für die Release-Version verwenden wollte, aber nicht für normale Debug-Builds.

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

Und dann ./gradlew -PsplitApks assembleProdRelease (prod ist ein Geschmack in meinem Fall).

Verwandte Themen