Разделение Android ABI переносится в пакет приложений
Я планирую перейти с ABI split на функцию App Bundle. В настоящее время я использую этот код:
def versionCodesAbi = ['x86': 1, 'x86_64': 2, 'armeabi-v7a': 3, 'arm64-v8a': 4]
splits {
abi {
enable true
reset()
include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
// "armeabi", "mips", "mips64" last three not needed and not supported currently
universalApk true
}
}
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def abi = versionCodesAbi.get(output.getFilter(OutputFile.ABI))
if (abi != null) {
output.versionCodeOverride =
abi * 1000 + variant.versionCode
}
}
}
что дает 4 APK на ABI (+ универсальный). Причиной использования этого кода является уменьшение размера приложения из-за PanoWidget (использует NDK) и
renderscriptTargetApi 28
renderscriptSupportModeEnabled true
После удаления разбивки конфигурации (+4001 к versionCode
) и сборка Bundle я получил.aab файл, который конвертируется в.apks (используя bundletool) содержит папку standalones/
, Внутри у меня есть четыре "вида" APK для x86, x86_64, armeabi-v7a и arm64-v8a ABI. На данный момент все выглядит хорошо.
Теперь я заметил, что код приложений не использует RenderScript
вообще, так что я думаю, что это излишне использовать supportMode
а также targetApi
, Я удалил эти две строки, протестировал на устройствах / эмуляторе, все работает отлично. Итак, в следующий раз я создаю Bundle, и теперь у него нет версии APK для x86_64 внутри архива.apks... Должен ли он быть пропущен без RenderScript
служба поддержки? Я все еще использую VrPanoramaView
и он, вероятно, имеет какой-то конкретный код NDK для каждого ABI (не вижу на GitHub)... К сожалению, у меня нет устройства x86 (32 или 64) для тестирования, и я боюсь выпустить этот Bundle... Мне не хватает чего-нибудь, мне вообще нужна версия _64?
1 ответ
Редактировать:
Удаление этих двух параметров в build.gradle удалит собственные библиотеки, которые использовались RenderScript: librsjni.so
а также libRSSupport.so
, Эти две библиотеки будут удалены для всех ABI.
Поскольку после отключения RenderScript у вас по-прежнему есть 3 ABI, похоже, что ваше приложение зависит от других библиотек, которые используют собственный код, но не предоставляют библиотеки для архитектуры x86_64, поэтому каталог x86_64 исчезает. Это, вероятно, означает, что ваше приложение никогда не работало должным образом на x86_64 раньше, так как каталог x86_64 будет загружен платформой, но некоторые собственные библиотеки будут отсутствовать.
В конце концов, вы должны определить, какая библиотека содержит эти собственные библиотеки, и посмотреть, могут ли они также создать 64-разрядную версию, но в краткосрочной перспективе ничего не сломается, поскольку устройства x86_64 также поддерживают библиотеки x86 (32-разрядные).
Предыдущий пост:
Если у тебя есть *.bc
файлы в вашем APK, 64-битные библиотеки удаляются из APK, потому что эти файлы RenderScript являются только 32-битными и не могут быть загружены в 64-битном процессе.
Если вы перейдете на более новую версию RenderScript, *.bc
файлы не будут сгенерированы, и 64-битные собственные библиотеки будут снова присутствовать в APK. Или, если вам вообще не нужен RenderScript, удалите эти файлы полностью.