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