Использование разделов APK для выпуска, но не тип отладки Debug
Я успешно реализовал APK Splits, так что отдельные APK создаются для разных ABI.
Однако для эффективности (и поскольку мне не нужно использовать APK без armeabi-v7a в Debug), я хотел бы ограничить сборку Debug, чтобы генерировать только APK от armeabi-v7a.
Как это можно сделать?
Одна идея заключается в следующем:
abi {
enable true
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
Может быть, есть способ установить enable
на основе типа сборки?
Ответы
Ответ 1
Вы можете попробовать вариант ответа @Geralt_Encore, который позволяет избежать отдельной команды gradlew
. В моем случае, я только хотел использовать разделение APK, чтобы уменьшить размер выпущенного файла APK, и я хотел сделать это полностью в Android Studio.
splits {
abi {
enable gradle.startParameter.taskNames.any { it.contains("Release") }
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}
Из того, что я видел, Build | Сформировать Signed пункт меню APK в Android Studio генерирует APK с помощью assembleRelease
цели Gradle.
Ответ 2
Вы можете установить enable
на основе аргумента командной строки. Я решил похожую проблему, когда хотел использовать разделители только для версии выпуска, но не для регулярных отладочных сборников.
splits {
abi {
enable project.hasProperty('splitApks')
reset()
include 'x86', 'armeabi-v7a'
}
}
И тогда ./gradlew -PsplitApks assembleProdRelease
(prod - это аромат в моем случае).
Ответ 3
На самом деле вам все равно нужно включить Splits, в противном случае APK будет включать библиотеки для всех ABI и, вероятно, не то, что вы хотите.
Это должно соответствовать вашим требованиям:
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
}
}
...
}
}
Ответ 4
Я немного опоздал на эту вечеринку, но у меня возникли проблемы с разными именами вкусов и задач, я пришел с этим:
ext.isRelease = { array ->
array.each { name ->
if (name.contains("Debug")) {
return false
}
}
return true
}
android {
...
splits {
abi {
enable isRelease(gradle.startParameter.taskNames)
reset()
include "x86_64", "x86", "arm64-v8a", "armeabi-v7a"
universalApk false
}
}
}
Это всего лишь небольшое обновление к ответу Джеффа П, но оно хорошо работает с различными вариантами и конфигурациями сборки.
Ответ 5
Обновление ответа @Jeff P для повышения его гибкости в зависимости от имени приложения и поддержки формата Android App Bundle (.aab).
splits {
abi {
enable gradle.startParameter.taskNames.any { it.contains("Release") }
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}