У меня есть устаревший код, который использует autotools для создания разделяемых библиотек. Эти библиотеки должны использоваться в приложении для Android, поэтому я создал для него простой класс Java и JNI-обертку (как общую .so-библиотеку).Здание APK удаляет номер версии родной библиотеки из имени файла
У меня уже есть скрипт 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.) Номера версий
удаляются из имен файлов. Это приводит к ошибке:
Cannot load library: link_image[1721]: 30 could not load needed library 'lib-b.so.2' for 'lib-wrapper.so'
потому что APK содержит файл lib-b.so
.
Как я могу принудительно сохранить номера версий в здании APK?
Изменение устаревшей системы сборки не представляется возможным (пока это не обязательно), поскольку одна и та же установка используется для сборки библиотек x86/execs.
спасибо.
Привет, вы нашли решение без изменения системы сборки? – robotniko
Нет. Мы добавили несколько сценариев для ручного переименования файлов. Но я не коснулся этого через год, поэтому ... Теперь с градилью, может быть, она решена. –