Фальшивый gps для Android в виртуальной коробке

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

[ОБНОВИТЬ]

Чтобы сделать его более понятным, весь стек приложений будет выглядеть примерно так:

Android app (with gps functionality) to be tested ----> (developed by end user) Android virtual machine ----> (Guest OS) virtual box ----> Microsoft Windows ---> Host OS 

Теперь, в идеале, мне бы хотелось, чтобы мое приложение (например, adb или ddms ) ddms в Windows, откуда пользователь мог установить некоторые значения координат для gps-устройства (в отсутствие фактического GPS, а также виртуализировать существующий GPS). Эти координаты будут доступны для приложения Android. В принципе, это то же самое, что и предоставление функциональности существующего эмулятора Android (с использованием ddms) через virtual-box работающий с изображением android.

Я НЕ запускаю эмулятор Android, и я не использую eclipse. 🙁 [UPDATE ENDS]

Спасибо, Викрам.

Вот как я это сделал (и краткий обзор работы стека Android (работает на vbox)).

Приложение Android, имеющее функции GPS, регистрирует некоторые обратные вызовы с базовой реализацией разделяемой пользователем пользовательской системы (обычно libgps.so или libhardware_legacy.so) с использованием интерфейсов JNI (как экспортируется в frameworks/base/core/jni/android_location_GpsLocationProvider.cpp )

Эти зарегистрированные обратные вызовы отвечают за уведомление об исправлении GPS (или изменении местоположения gps) в приложении.

Вот простое изображение, демонстрирующее поток вызовов от Android -> VBox -> Windows

Введите описание изображения здесь

Чтобы завершить этот поток, необходимо выполнить следующие шаги:

  1. Я создал свой собственный libgps.so экспортирующий функцию gps_get_interface (объявленную в gps.h ), которая используется интерфейсом JNI. Приложение с поддержкой gps получает последние координаты, возвращенные из этого libgps.so, который фактически загружается динамически службой GpsLocationProvider.

  2. Создайте еще один общий объект с использованием заголовков Vbox и содержащий подпрограммы для подключения, отключения и отправки запроса функции host service , работающей в ОС хоста. Это простые вызовы ioctl с предопределенными ioctl-номерами (например: VBOX_GUEST_IOCTL_HGCM_CONNECT и т. Д.).

  3. Создайте главную службу (которая фактически является DLL, загружаемой службой VBox Host Service ), которая может обрабатывать параметры, переданные из вызовов HGCM, и возвращать требуемые данные в формате, который понимает общий объект, созданный на шаге 2.

  4. Теперь, чтобы отправить какое-либо поддельное / фиктивное местоположение обратно в приложение под управлением Android VM , вам просто нужно уведомить host service , а остальная часть будет передана обратно в VBox Additions -> libgps.so -> GpsLocationProvider service -> и, наконец, в App with GPS Support .

Надеюсь, это поможет кому-то попробовать что-то похожее или помочь кому-то понять, как работает сборщик Android.

ПРИМЕЧАНИЕ. Компиляция hgcm-кода и привязка его к файлу android lib также немного сложна из-за ограниченного числа функций, реализованных в android libc (и некоторых других libs). Чтобы этого избежать, вы можете напрямую открыть устройство (/ dev / vboxguest) и вызывать на нем вызовы ioctl в формате, известном как vbox, и вашей главной службе.

Как насчет использования макетного местоположения с помощью setTestProviderLocation ?

Вы в затмении? Если это так, используйте ddms для отправки макетов на виртуальное устройство.

Если вы используете eclipse, перейдите на страницу DDMS, затем перейдите в раздел «Управление эмулятором». Там вы увидите 2 текстовых поля для широты и долготы. Затем вы нажимаете «Отправить», и эта информация будет отправлена ​​в эмулятор.

В качестве альтернативы вы можете подключить telnet к эмулятору через GPS-информацию: Пример telnet localhost 5554 geo fix -82.411629 28.054553

http://www.devx.com/wireless/Article/39239/1954