1

Я хочу запустить двоичный файл aapt на своем общем хостинге, чтобы использовать его в некоторых сценариях. Я установил aapt локально (sudo apt install aapt) и загрузил его в папку home/user/bin на виртуальном хостинге с установленным битом выполнения. Когда я запускаю его через ssh, я получаю эту ошибку:

aapt: error while loading shared libraries: libaapt.so.0: cannot open shared object file: No such file or directory

Поэтому я нахожу, какие библиотечные файлы требуются локально для aapt, собирать и архивировать их. Загрузите и распакуйте их в папку home/user/lib .

zip -j libs.zip $(ldd /usr/bin/aapt | grep "=>" | sed -e "s/(.*//" -e "s/.*=> //")

Когда я выполняю aapt сейчас на общем хостинге (или любую другую команду в этом отношении), я получаю ошибку сегментации.

Поэтому я перемещаю все файлы библиотеки в home/user/lib/aapt и выполняю aapt. Каждый раз, когда я получаю сообщение об ошибке отсутствующего файла lib, я перемещаю отсутствующую библиотеку обратно в папку home/user/lib пока не получу следующее:

lib:
aapt/
lib7z.so
libaapt.so.0
libandroidfw.so.0
libbacktrace.so.0
libbase.so.0
libcutils.so.0
liblog.so.0
libpng16.so.16
libunwind.so.0
libutils.so.0
libziparchive.so.0

lib/aapt:
libc.so.6*
libexpat.so.1
libgcc_s.so.1
libm.so.6
libpthread.so.0*
libstdc++.so.6
libz.so.1

Когда я запускаю aapt сейчас, я получаю следующие ошибки:

aapt: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by aapt)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by aapt)
aapt: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /home/user/lib/libaapt.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/user/lib/libaapt.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libaapt.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /home/user/lib/libutils.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libutils.so.0)
aapt: /lib64/libz.so.1: version `ZLIB_1.2.9' not found (required by /home/user/lib/libpng16.so.16)
aapt: /lib64/libz.so.1: version `ZLIB_1.2.3.4' not found (required by /home/user/lib/libpng16.so.16)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libpng16.so.16)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /home/user/lib/libandroidfw.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /home/user/lib/libandroidfw.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/user/lib/libandroidfw.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libandroidfw.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /home/user/lib/liblog.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /home/user/lib/liblog.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /home/user/lib/liblog.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/user/lib/liblog.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/liblog.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libcutils.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by /home/user/lib/libcutils.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libbacktrace.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /home/user/lib/libbacktrace.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/user/lib/libbacktrace.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/user/lib/libbacktrace.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libziparchive.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/user/lib/libziparchive.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libbase.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /home/user/lib/libbase.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/user/lib/libbase.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/user/lib/libbase.so.0)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/libunwind.so.0)
aapt: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/user/lib/lib7z.so)
aapt: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /home/user/lib/lib7z.so)
aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/user/lib/lib7z.so)

Если я перемещаю файлы libc.so.6 или libstdc++. So.6 в папку lib, я снова получаю ошибку сегментации, поскольку они мешают файлам библиотеки хост-системы, которые, как я предполагаю, зависят от другой версии.

Это где я застрял, и мой вопрос заключается в том, как сделать двоичный файл AAPT для разных библиотек в папке AAPT?

Я предпочтительно не хочу делать какую-либо перекомпиляцию как статический двоичный файл, так как это выходит за рамки моих возможностей, и хочу пока оставить его таким.

2 ответа2

0

Вам нужно установить LD_LIBRARY_PATH который содержит каталог .so файлы, которые вы загрузили из вашей локальной системы.

user@host:~$ export LD_LIBRARY_PATH=/home/user/lib/ /path/to/aapt ...

Вы можете проверить, находит ли aapt их, и если да, то где использовать ldd /path/to/appt/binary

Но это также выглядит так, как будто некоторые системные файлы .so имеют несовпадающие версии, поэтому у вас может быть ОЧЕНЬ больше файлов для поиска загрузки из вашей локальной системы.

0

В конце концов я получил это работает! Первоначально я написал скрипт, который использовал apktool для декомпиляции apk и извлечения необходимой мне информации (метка apk и номер версии), но этот процесс хотя и работал довольно медленно, занимая около 5 или 6 секунд на apk. Затем я обнаружил модуль perl для запуска aapt на хосте, следуя инструкциям здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .