Включить файлы с разными префиксами в apk - PullRequest
3 голосов
/ 29 марта 2019

У меня есть проект с нативными библиотеками, которые я хочу использовать, файлы этого формата: lib<name>.so действительно включаются в apk.Но файлы с форматом <name>.so этого не делают.

Есть ли способ включить более поздний тип в apk в каталоге lib?

Если нет, есть ли способ включить файлыв каталог внутри apk, где я могу загрузить его из моего собственного кода?

1 Ответ

2 голосов
/ 30 марта 2019

Краткий ответ: "нет" . Собственные двоичные файлы будут упакованы в APK и извлечены в исполняемые файлы после установки, если их имена будут соответствовать шаблону lib… .so .


Обратите внимание, что эти библиотеки будут извлечены в файлы в соответствии с ABI целевой системы. Установщик не проверяет фактические свойства файла. Решение основано на имени папки в lib в структуре APK.

Если вы добавите атрибут extractNativeLibs = false в тег приложения в AndroidManifest.xml вашего APK, установщик (на Android Nougat и выше) не будет извлекать нативные библиотеки.

Вы можете обмануть систему и получить файлы, которые не следуют вышеупомянутому правилу, в папку lib APK, но в этом нет особого смысла, поскольку они никогда не будут извлечены загрузчиком. ( также может извлекать файл gdbserver , если файл существует ).

Обычная практика - помещать произвольные файлы в папку assets вашего APK и извлекать их программным способом при первом запуске приложения после установки. Вы не можете извлечь эти файлы в безопасное место, куда попадают обычные собственные библиотеки. Не следует извлекать нативные библиотеки в sdcard (например, getExternalFilesDir () ), поскольку система может не разрешить выполнение файлов там, независимо от выполнения флаг доступа к файлу. Убедитесь, что вы используете правильный вкус ABI.

Вы можете посмотреть исходный код встроенного загрузчика библиотек Nougat, который может загружать собственные библиотеки из APK без извлечения, и использовать его для загрузки пользовательских библиотек прямо из папки assets вашего APK.

...