папка armeabi и armeabi-v7a - PullRequest
11 голосов
/ 06 июня 2011

Я работаю над проектом Android и использую NDK для вызова нативных методов. У меня есть две библиотеки (файлы .so), одна из которых находится в папке libs/armeabi, а другая - в папке libs/armeabi-v7a lib.

Если я попытаюсь запустить приложение, оно не загрузит библиотеку в папку /libs/armeabi. Если я перемещаю файл библиотеки в папку libs/armeabi-v7a, она загружает библиотеку, но через 5–10 минут она вылетает и выдает ошибку ошибки сегментации.

Мне было интересно, не может ли эта проблема возникнуть из-за расположения библиотеки (другой папки).

Ответы [ 3 ]

20 голосов
/ 25 апреля 2013

При установке приложения служба менеджера пакетов будет сканировать .apk и искать любую разделяемую библиотеку вида:

     lib/<primary-abi>/lib<name>.so

Если она найдена, она копируется в папку $ APPDIR / lib./lib.so, где $ APPDIR соответствует определенному каталогу данных приложения.

Если ничего не найдено и определен вторичный ABI, служба будет сканировать общие библиотеки в форме:

    lib/<secondary-abi>/lib<name>.so

Если что-то найдено, то оно копируется в $ APPDIR / lib / lib.so.

Для основного / вторичного abi,

Система Android во время выполнения знает, какиеABI (s) это поддерживает.Точнее, до двух специфичных для сборки системных свойств используются для указания:

  • «основного» ABI для устройства, соответствующего машинному коду, используемому в самом образе системы.

  • необязательный «вторичный» ABI, соответствующий другому ABI, который также поддерживается системным образом.

Например, типичный ARMv5TE-основанное устройство определит только первичный ABI как «armeabi» и не определит вторичный.

С другой стороны, типичное устройство на основе ARMv7 определит первичный ABI для «armeabi-v7a» и вторичныйот одного до 'armeabi', поскольку он может запускать собственные двоичные файлы приложения, сгенерированные для них обоих.

Этот механизм гарантирует, что лучший машинный код для целевого устройства автоматически извлекается из пакета во время установки.

5 голосов
/ 28 июля 2012

Загрузчик библиотеки попытается найти библиотеки, которые наиболее соответствуют архитектуре, на которой вы работаете.В общем, вы должны скомпилировать одну версию библиотеки для каждого abis, который вы планируете поддерживать (armeabi, armeabi-v7a, x86, mips), чтобы компилятор мог правильно оптимизировать.

Структура каталогов - это то, как Android определяет, какую библиотеку загружать, поэтому очень важно, чтобы вы ее не меняли.

0 голосов
/ 22 сентября 2011

Я сам новичок в этом, но иду по тому же пути ... насколько я знаю, можно иметь только одну общую библиотеку; использовать несколько библиотек, сделать их статичными и связать их вместе в одну общую. Конечно, это предполагает, что вы сами создаете библиотеки; -)

...