Моя цель - использовать libnl в приложении Android для получения списка фейдеров маяка, полученных в последнем сетевом сканировании, и распечатать (отобразить) связанные метаданные, такие как AP SSID, AP BSSID и т. Д.
Следуя основным учебным пособиям и рекомендациям, подход выглядит следующим образом:
- Cross compile libnl для всех поддерживаемых Android ABI, поскольку libnl поставляется с собственными
./configure
иMakefile
- Импортируйте скомпилированные архивы в мой собственный код C / C ++ как
PREBUILT_STATIC_LIBRARY
илиPREBUILT_SHARED_LIBRARY
- Использовать методы libnl в собственном коде
Окружающая среда и конфигурация Dev:
- IDE : Android Studio 3.1.2
- Версия NDK : версия NdK для Android Ndk 17b
- Внешние инструменты : Gradle, CMake
- Версия MinSDK : API 14
- Целевая версия SDK : API 21
- Библиотека Источник : Libnl 3.2.25 - ссылка
- ОС : Ubuntu 18.04 LTS
-
Крест компилирование:
Я был в состоянии успешно кросс-компилятор libnl для все АБИСА ( armeabi-v7a
, arm64-v8a
, x86
, x86_64
) с использованием метода NDK Standalone компилированных инструментов документированного здесь . Это дает мне .a
скомпилированные файлы для библиотеки.
-
Импорт библиотек и компиляция:
это было сделано в соответствии с примерами кода из Google ( github ) - в частности, примером «hello-libs».
ПРИМЕЧАНИЕ . Я делаю вывод, что шаги 1 и 2 выполняются правильно, потому что при компиляции и запуске приложения библиотека успешно связана с моим исходным кодом на C / C ++. Кроме того, я могу вызвать методы libnl из моего исходного кода на C / C ++. У меня нетUnsatisfiedLinkError
илиUndefined Reference to ...
.
-
Используя методы libnl, как в Linux,
я отладил эту проблему с помощью метода libnl, genl_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)
android,android-ndk,ndk-build,netlink,802.11,