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