Сборка APK удаляет номер версии собственной библиотеки из имени файла

У меня есть устаревший код, который использует автоинструменты для создания общих библиотек. Эти библиотеки необходимо использовать в приложении 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. Обратите внимание, что устаревшая установка autotools добавляет номер версии к имени файла общей библиотеки, который встроен как зависимость в 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.

Спасибо.


person Marcin Gil    schedule 13.02.2012    source источник
comment
Привет, вы нашли решение, не меняя систему сборки?   -  person robotniko    schedule 13.11.2013
comment
Неа. Мы добавили несколько скриптов для ручного переименования файлов. Но я не касался этого в течение 1 года, так что ... Теперь с gradle, возможно, это решено.   -  person Marcin Gil    schedule 14.11.2013


Ответы (1)


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

person spemin    schedule 08.03.2012