Скомпилируйте libpcap с помощью Android NDK

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

У меня есть очень простой сниффер (который отлично работает в Linux MIPS), который использует libpcap, так что я подумал: о, хорошо... не важно... Я просто скомпилирую libpcap для Android (в конце концов, Android это просто линукс)... и вот тут начались проблемы. Я понятия не имею, как скомпилировать libpcap с помощью ndk-build и Android.mk и вся эта инфраструктура.

У меня есть Android NDK в каталоге. Это NDK имеет встроенные цепочки инструментов (у меня есть много каталогов под ~/Documents/Projects/Android_NDK/toolchains/) но ни один из наборов инструментов не имеет libpcap имеется в наличии.

Я пробовал с двумя разными версиями libpcap или... ветками:

Android, который я хотел бы использовать, https://android.googlesource.com/platform/external/libpcap/

и обычный: http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz

Все попытки, которые я сделал, были очень неудачными. Я видел вопрос Android NDK: ссылка с использованием предварительно скомпилированной статической библиотеки, которая похожа, но я все еще получаю различные ошибки.

Я скачал эти библиотеки pcap в их собственные каталоги. Может в этом проблема? Нужно ли помещать Android libpcap в какой-то каталог в корневом каталоге NDK и заново создавать цепочки инструментов?

Я использую NDK-r9 на MacOSX 10.9.2 64bit.

4 ответа

Решение

В заключение!!

После того, как меня раздражают несуществующие заголовки и тому подобное, я нашел этот вопрос, который указывает на репозиторий SVN ( http://sourceforge.net/p/prueba-android/code/HEAD/tree/trunk/jni/) с libpcap, который скомпилирован!

Если кто-то еще хочет получить дополнительную информацию о том, как выглядит мой Android.mk и структура каталогов, добавьте комментарий, и я расширю этот ответ.

Если у кого-то еще возникают проблемы при компиляции libpcap для Android с использованием NDK, здесь есть версия 1.5.2 со встроенным файлом Android.mk: https://android.googlesource.com/platform/external/libpcap.git и инструкциями. для компиляции этого с использованием NDK можно найти здесь: http://ducbh.blogspot.co.uk/2013/12/cross-compile-libpcap-for-android.html. Я могу подтвердить, что это работает, используя текущий NDK (r10b)... хотя, возможно, вам придется добавить AndroidManifest.xml (пусто) и Application.mk, который указывает на ваш файл Android.mk.

Я не думаю, что было бы так сложно изменить файл.mk для текущей версии libpcap (1.6.2)

Пожалуйста, прочитайте отличную статью на http://blog.umitproject.org/2011/05/libpcap-for-android.html. Существуют инструкции, которые помогут вам создать ссылку на libpcap, но самое важное, что вы не можете использовать libpcap на некорневом Android. Так что, может быть, это не стоит ваших усилий.

На рутированном устройстве вы можете просто установить бесплатный анализатор, такой как Shark for Root.

На случай, если кто-то окажется здесь в 2022+. Теперь вы можете выполнять кросс-компиляцию для Android из официального источника . Шаги:

Сначала настройте NDK: загрузите Android NDK (я использовал r21e) и распакуйте в каталог по вашему выбору:

      $ cd ~
$ mkdir Android
$ unzip android-ndk-r21e-linux-x86_64.zip

Подготовьте переменные среды для кросс-компиляции, поместив приведенные ниже команды (замените <YOUR_USER>) в файл с именем setup_env.sh(можно сохранить где угодно):

      export NDK=/home/<YOUR_USER>/Android/android-ndk-r21e
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export TARGET=aarch64-linux-android
export API=21
export AR=$TOOLCHAIN/bin/$TARGET-ar
export AS=$TOOLCHAIN/bin/$TARGET-as
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export LD=$TOOLCHAIN/bin/$TARGET-ld
export RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib
export STRIP=$TOOLCHAIN/bin/$TARGET-strip

Теперь соберите libpcap :

  1. Загрузите tar-шар libpcap (например , https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz)
  2. Извлеките (в каталог по вашему выбору): tar xf libpcap-1.10.1.tar.gz
  3. Подготовьте окружение: source <path_to>/setup_env.sh
  4. Перейдите в каталог извлечения libpcap и настройте: ./configure --host=aarch64-linux-android
  5. Я обнаружил, что сгенерированный Makefile имеет неверный набор компоновщика (строка 48), поэтому мне пришлось изменить его на: LD = /home/<YOUR_USER>/Android/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/x86_64-linux-android/bin/ld
  6. Наконец, соберите: make

Эта сборка работала для меня с запуском tcpreplay на рутированном Android, надеюсь, она сработает и для других целей!

Другие вопросы по тегам