2011-05-06 45 views
3

我想在虛擬箱中運行的android虛擬化GPS設備。我想促進在android中運行的應用程序使用GPS設備或獲取假的GPS位置一些方法。我已經開始查看Android模擬器源代碼,但同時,任何人都有一個好的開始。在虛擬箱中運行的android假GPS g

[更新]

爲了更清楚一點,整個應用程序堆棧將一些事情,如:

Android app (with gps functionality) to be tested ----> (developed by end user) 

Android virtual machine ----> (Guest OS) 

virtual box ----> 

Microsoft Windows ---> Host OS 

現在,我非常希望有我的應用程序(如在用戶可以在其中設置GPS設備的一些座標值(在沒有實際的GPS的情況下,或者虛擬化現有的GPS)的情況下在Windows中運行。這些座標可用於android應用程序。基本上,這與通過運行Android圖像的virtual-box提供現有的android模擬器(使用ddms)的功能相同。

我沒有運行android模擬器,我沒有使用eclipse。 :( [更新完]

感謝, 維克拉姆。

回答

6

這是我做了(和簡要概述android stack(在vbox上運行)如何工作)。

Android應用具有GPS功能,寄存器一些回調與用戶模式共享11b的底層實現(通常libgps.so或libhardware_legacy.so)使用JNI接口(如在frameworks/base/core/jni/android_location_GpsLocationProvider.cpp導出)

這些註冊的回調是負責通知GPS修復(或更改GPS位置)到應用程序。

這裏是Android -> VBox -> Windows

enter image description here

現在一個簡單的形象展示呼叫流程來完成這個流程中,需要以下步驟:

  1. 我創建了自己libgps.so導出功能gps_get_interface (在gps.h中聲明),由JNI接口使用。支持gps的應用程序獲取從此libgps返回的最新座標。所以,它實際上由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(以及其他一些庫)中實現的函數數量有限。爲了避免這一切,您可以直接打開設備(/ dev/vboxguest)並以vbox和主機服務已知的格式對它進行ioctl調用。

0

如果你使用eclipse轉到DDMS,那麼進入模擬器控制部分,你會看到2個經緯度文本框,然後你點擊發送,那個信息將被髮送到emulato河

另外,您可以遠程登錄到該仿真器通過GPS信息: 例 遠程登錄本地主機5554 地理修復-82.411629 28.054553

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

+0

這肯定會工作,但在這裏我沒有運行android模擬器。我想通過虛擬框向android應用程序通知相同的事情。 – 2011-05-06 19:18:12