Пакет приложений для Android -> apk не содержит обязательной библиотеки - PullRequest
0 голосов
/ 29 июня 2018

Я публикую приложение, используя новый формат пакета приложения (aab). Приложение включает в себя несколько собственных библиотек для armeabi-v7a. Когда я устанавливаю приложение через Google Play на архитектуре arm64-v8a, оно не включает собственные библиотеки, для которых нет файла arm64-v8a, поэтому файл

В соответствии с этим https://stackoverflow.com/a/39622499/534471, библиотека armeabi-v7a должна работать на устройстве arm64-v8a (и она отлично работает при установке через adb, поэтому она действительно работает).

Консоль Google Play показывает различные apk по архитектуре, плотности экрана и т. Д. По размерам apk я могу четко определить, какие из них не содержат нативных библиотек. Я также использую собственное приложение libs monitor для анализа установленного apk, и оно явно не включает в себя нужные мне нативные библиотеки (оно включает нативные библиотеки arm64-v8a, если приложение имеет файл arm64-v8a, но не если есть только armeabi -v7a версия).

Мой файл сборки Gradle содержит небольшой фрагмент кода для конфигурации пакета:

    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = true
        }
        abi {
            enableSplit = true
//            include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
    }

Теперь вот мой вопрос: есть ли способ сказать инструменту сборки, чтобы он включал «следующую лучшую» нативную библиотеку в каждый apk, следующей из которых является ближайшая версия, которая будет работать на конкретной архитектуре?

PS: если я установлю enableSplit = false для abi, то он будет включать собственную библиотеку (как и ожидалось), но, к сожалению, для всех платформ, включая x86, размер которого составляет 20 МБ ...

Для тех, кто еще не видел, как Google Play разбивает пакет приложений на apks, вот скриншот: enter image description here

1 Ответ

0 голосов
/ 29 июня 2018

Нет необходимости указывать инструменту, чтобы он служил лучше всех, что должно быть сделано автоматически. Если устройство сообщает, что оно также поддерживает armeabi-v7a, оно должно получить APK, содержащий его.

Edit:

Учитывая ваш скриншот, кажется, что ваше приложение предоставляет собственные библиотеки для архитектуры arm64-v8a, поэтому будут обслуживаться библиотеки arm64-v8a, а не armeabi-v7a.

Обратите внимание, что одно устройство не может загружать библиотеки из разных архитектур для одного и того же приложения, т. Е. Вы не можете ожидать, что некоторые библиотеки будут загружены в 64-битные, а другие - в 32-битные. Даже с «толстым» APK, содержащим все ABI, платформа Android выберет только один ABI после установки вашего приложения и откажется от всех других файлов, поэтому с того момента, как вы предоставите хотя бы одну библиотеку для arm64-v8a, ни одна из * Библиотеки 1013 * будут загружены на устройство arm64-v8a.

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

Вам следует рассмотреть возможность исключения некоторых ABI из вашего приложения, если вы не можете предоставить необходимые собственные библиотеки для этой архитектуры. Это может быть достигнуто с помощью блока abiFilters в конфигурации gradle:

ndk { abiFilters 'armeabi-v7a', 'x86' }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...