Я скачал Android Open Source Project и построил его на Linux (Ubuntu 12.04 64-bit), используя инструкции здесь:
http://source.android.com/source/building.html
Я могу заставить его строить без проблем. Когда сборка завершена, меня интересуют инструменты сборки, особенно aapt. Когда я запускаю его, я вижу это:
awt@aosp-build:/aosp/out/host/linux-x86/sdk/sdk/android-sdk_eng.awt_linux-x86/build-tools/android-5.0.50.50.50.50$ ./aapt
./aapt: error while loading shared libraries: libc++.so: cannot open shared object file: No such file or directory
Итак, это странно. Особенно с учетом того, что libc ++. Так и есть в том же каталоге:
awt@aosp-build:/aosp/out/host/linux-x86/sdk/sdk/android-sdk_eng.awt_linux-x86/build-tools/android-5.0.50.50.50.50$ ls -l
-rwxrwxr-x 1 awt awt 1118633 Feb 4 19:42 aapt
-rwxrwxr-x 1 awt awt 1261036 Feb 4 19:42 libc++.so
$ file aapt
aapt: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, not stripped
$ file libc++.so
libc++.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
Я собрал и использовал более старые версии Android-инструментов для сборки, последняя была 4.3. Чтобы заставить его работать, мне нужно было:
$ sudo apt-get install ia32-libs
Это позволило мне запустить его, и это сработало. С последней версией от Android этого уже недостаточно. Я все еще получаю libc++.so: cannot open shared object file message
,
В каталоге out есть другие промежуточные версии aapt. Например, этот:
$ file / aosp / out / host / linux-x86 / bin / aapt
aapt: ELF 32-битный общий объект LSB, Intel 80386, версия 1 (SYSV), динамически связанный (использует разделяемые библиотеки), для GNU / Linux 2.6.24, не удален
$ ls -l / aosp / out / host / linux-x86 / bin / aapt
-rwxrwxr-x 1 awt awt 6978260 4 февраля 17:50 aapt
Этот работает. Он еще не удален, поэтому общие библиотеки по-прежнему встроены в него. Если я раздену это:
$ strip -s aapt
$ ./aapt
./aapt: error while loading shared libraries: libc++.so: cannot open shared object file: No such file or directory
Тогда мы вернулись к тому, с чего начали. Что я могу сделать, чтобы заставить версию с разделами работать так же, как раньше?
Это более старый вопрос, но недавнее возражение напомнило мне, что у меня есть решение.
Ответ заключается в добавлении местоположения libc ++. Так к текущему LD_LIBRARY_PATH:
$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/path/to/libc++.so
$ ./aapt -version
Android Asset Packaging Tool
Usage:
aapt l[ist] [-v] [-a] file.{zip,jar,apk}
List contents of Zip-compatible archive.