2015-10-05 71 views
2

這是Koushik Dutta的Vysor鏈接 - https://chrome.google.com/webstore/detail/vysor-beta/gidgenkbbabolejbgbpnhbimgjbffefmvysor如何在非根設備上創建觸摸事件?

它可以讓你從PC控制你的Android設備。 但是,長期以來一直困擾着我的一件事就是它能夠在手機上創建觸摸事件,即使它是無根據的。

後一些與應用程序和鉻延伸修補的,我意識到,他使用以下方式創建獨立的進程 -

sh -c "CLASSPATH=/data/app/com.koushikdutta.vysor-1/base.apk /system/bin/app_process32 /system/bin com.koushikdutta.vysor.Main" 

Main類包含其經由反射傳遞觸摸事件框架的代碼。

上述代碼執行Main類作爲單獨的進程,其中shell作爲執行該進程的用戶。

儘管如此,據我所知,在您自己的應用程序之外創建觸摸事件的唯一方法是如果您是根。

有沒有人有這方面的想法?

+0

鑑於它促使我進行'adb'調試和驗證MAC地址(對於已經在此機器上進行調試的設備*),我假定他使用'adb'來傳遞觸摸命令。 – CommonsWare

+0

他使用adb將事件傳遞到他的'Main'類內的apk。 – omerjerk

+0

另外,無論它是adb還是其他東西,根總是需要的。 – omerjerk

回答

7

我已經想通了。

問題是,shell用戶也被允許在整個屏幕上創建觸摸事件。當您通過PC執行adb shell,並通過USB電纜連接手機時,系統會自動爲您指定用戶shell

他所做的是,他然後開始他的Main類作爲一個單獨的過程使用此shell用戶。現在,Main類中的Java代碼具有與shell用戶相同的權限(因爲它們是linux)。

而且,在該類中,他使用反射將觸摸事件傳遞給Android框架。該框架然後自動將觸摸事件傳播到窗口。

看看這兩個我在我自己的應用程序中實現的類 - Main.javaEventInput.java

但請記住,由於此Main類必須在單獨的進程中運行,因此它無法訪問捆綁應用程序的內存。爲此,我必須使用套接字機制來傳輸數據。即使aidl可以用於此。

相關問題