Сборка APK удаляет номер версии собственной библиотеки из имени файла - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть устаревший код, который использует автоинструменты для создания общих библиотек.Эти библиотеки необходимо использовать в приложении Android, поэтому я создал простой класс Java и оболочку JNI для него (в виде общей библиотеки .so).

У меня уже есть скрипт Android.mk, который правильно выполняет устаревшую версию.сборка системы, сборка собственной библиотеки для программы Java и ее связывание.

Выходные файлы выглядят следующим образом:

libs/armeabi/lib-a.so.0
libs/armeabi/lib-b.so.2
libs/armeabi/lib-wrapper.so

lib-wrapper.so зависит от обеих библиотек lib-a и lib-b.Обратите внимание, что устаревшая установка автоинструментов добавляет номер версии к имени файла совместно используемой библиотеки, которое встраивается как зависимость в lib-wrapper.so.

# arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-readelf -d ./lib-wrapper.so 
Dynamic section at offset 0x7608 contains 28 entries:
  Tag        Type                         Name/Value
0x00000001 (NEEDED)                     Shared library: [lib-b.so.2]
0x00000001 (NEEDED)                     Shared library: [lib-a.so.0]

Проблема:

во времяAPK, создающий (например, экспорт неподписанного пакета из Eclipse), номера версий
удаляются из имен файлов.Это приводит к ошибке:

Невозможно загрузить библиотеку: link_image [1721]: 30 не удалось загрузить необходимую библиотеку 'lib-b.so.2' для 'lib-wrapper.so'

, поскольку APK содержит файл lib-b.so.

Как принудительно сохранить номера версий во время сборки APK?

Изменение устаревшей системы сборки, скорее всего, невозможно(до тех пор, пока это не станет обязательным), поскольку для сборки библиотек x86 / execs используются те же настройки.

Спасибо.

1 Ответ

0 голосов
/ 09 марта 2012

Компоновщик Android не распознает общие библиотеки, не заканчивающиеся на «.so».Вам нужно изменить имя файла, созданное устаревшей системой сборки.

...