Моя цель — использовать libnl. в приложении Android, чтобы получить список кадров маяков, полученных при последнем сканировании сети, и распечатать (отобразить) связанные метаданные, такие как AP SSID, AP BSSID и т. д.
Следуя основным учебным пособиям и рекомендациям, подход выглядит следующим образом:
- Кросс-компиляция libnl для всех поддерживаемых Android ABI, поскольку libnl поставляется со своими собственными
./configure
иMakefile
- Импортируйте скомпилированные архивы в мой собственный код C/C++ как
PREBUILT_STATIC_LIBRARY
илиPREBUILT_SHARED_LIBRARY
- Используйте методы libnl в нативном коде
Среда разработки и конфигурация:
- IDE: Android Studio 3.1.2
- Версия NDK: Android NDK версии 17b.
- Внешние инструменты: Gradle, CMake.
- Версия MinSDK: API 14
- Целевая версия SDK: API 21
- Источник библиотеки: Libnl 3.2.25 — ссылка
- ОС: Ubuntu 18.04 LTS
Кросс-компиляция:
мне удалось успешно выполнить кросс-компиляцию libnl для всех ABI (armeabi-v7a
,arm64-v8a
,x86
,x86_64
) с помощью задокументированного метода NDK Standalone Toolchains здесь. Это дает мне.a
скомпилированных файлов для библиотеки.Импорт библиотек и компиляция.
Это было сделано в соответствии с примерами кода из Google (github) - в частности, пример "hello-libs".
ПРИМЕЧАНИЕ. Я считаю, что шаги 1 и 2 выполнены правильно, потому что библиотека успешно компонуется с моим исходным кодом C/C++ при компиляции и запуске приложения. Кроме того, я могу вызывать методы libnl из исходного кода C/C++. Я не получаю UnsatisfiedLinkError
или Undefined Reference to ...
.
Используя методы libnl, как и в Linux
, я отладил проблему с оператором, используя метод libnlgenl_ctrl_resolve
для получения идентификатора драйвера для драйвераnl80211
. Это возвращает код ошибки-12
, означающий «Объект не найден».... struct nl_sock *socket = init_socket(); driver_id = genl_ctrl_resolve(socket, "nl80211"); ...
Мои конкретные сомнения:
- Верен ли мой подход? Если нет, любая помощь или понимание приветствуется.
- Есть ли альтернативный подход?
- Требуется ли моему приложению доступ
root
для получения идентификатора водителя? - Любые хорошие ресурсы для получения дополнительной информации о Native Android Development.
Любая помощь приветствуется. Спасибо в ожидании.
PS..
- Я просмотрел веб-сайт разработчика Android
- Я имел в виду
Android NDK Beginner's Guide by Sylvain Ratabouil
иPro Android Apps Performance Optimization by Herve´ Guihot
- Также пытался создать проект с нуля, используя Eclipse (ADT) и более старый SDK (r24.4.1), NDK (r10e).