Разделение Android ABI переносится в комплект приложений - PullRequest
0 голосов
/ 11 февраля 2019

Я планирую перейти с разделения ABI на функцию 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, и теперь у него нет версии x86_64 APK внутри архива .apks ... Должен ли он быть пропущен без поддержки RenderScript?Я все еще использую VrPanoramaView, и он, вероятно, имеет определенный код NDK для каждого ABI (не вижу на GitHub) ... К сожалению, у меня нет устройства x86 (32 или 64) для тестирования, и я небоюсь выпустить этот комплект ... Мне не хватает чего-нибудь, мне вообще нужна версия _64?

1 Ответ

0 голосов
/ 11 февраля 2019

Редактировать:

При удалении этих двух параметров в build.gradle будут удалены собственные библиотеки, которые использовались RenderScript: librsjni.so и libRSSupport.so.Эти две библиотеки будут удалены для всех ABI.

Поскольку после отключения RenderScript у вас все еще есть 3 ABI, похоже, что ваше приложение зависит от других библиотек, которые используют собственный код, но не предоставляют библиотекидля архитектуры x86_64, поэтому каталог x86_64 исчезает.Это, вероятно, означает, что ваше приложение никогда не работало должным образом на x86_64 раньше, так как каталог x86_64 будет загружен платформой, но некоторые собственные библиотеки будут отсутствовать.

В конце концов, вы должны определить, какая библиотека приносит эти собственные библиотеки, и посмотреть,они также могут создавать 64-разрядную версию, но в краткосрочной перспективе ничего не сломается, поскольку устройства x86_64 также поддерживают библиотеки x86 (32-разрядные).

Предыдущий пост:

Если в вашем APK есть файлы *.bc, 64-разрядные библиотеки удаляются из APK, поскольку эти файлы RenderScript являются только 32-разрядными и не могут быть загружены в 64-разрядном процессе.

Если вы перейдете на более новую версию RenderScript, файлы *.bc не будут сгенерированы, а 64-битные собственные библиотеки снова будут присутствовать в APK.Или, если вам вообще не нужен RenderScript, полностью удалите эти файлы.

...