一種安卓底層系統事件的傳遞方法和裝置與流程
2023-05-16 01:52:41 1

本發明涉及計算機技術領域,具體涉及一種安卓底層系統事件的傳遞方法和裝置。
背景技術:
安卓系統的層次架構具有特殊性,其底層的內核可以依賴Linux內核實現的,許多硬體操作等底層系統事件都是由內核進行處理,再通知上層的應用。而底層系統事件在向上層應用進行傳遞的過程中容易被劫持,從而影響應用的使用,以遊戲應用為例,對硬體操作事件的劫持可能實現遊戲掛機、自動控制等操作,對遊戲環境十分不利,因此,需要一種確保安卓底層系統事件安全傳遞的方法。
技術實現要素:
鑑於上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的安卓底層系統事件的傳遞方法和裝置。
依據本發明的一個方面,提供了一種安卓底層系統事件的傳遞方法,包括:
獲取指定的底層系統事件的數據;
將所述指定的底層系統事件的數據寫入到指定區域;
通知當前運行的安卓應用從所述指定區域獲取底層系統事件的數據。
可選地,所述獲取指定的底層系統事件的數據包括:
獲取指定底層系統事件的寫入事件;
在底層系統執行寫入操作時,從相應的數據寫入區域拷貝已寫入的數據至指定區域。
可選地,該方法還包括:
在拷貝已寫入的數據至指定區域的同時,刪除所述數據寫入區域中已被拷貝的數據。
可選地,所述獲取指定底層系統事件的寫入事件包括:
獲取指定底層系統事件的文件描述符;
根據所述指定底層系統事件的文件描述符,註冊所述對指定底層系統事件的寫入事件的監聽事件。
可選地,所述數據寫入區域為如下中的至少一種:
共享內存;
Socket長連接;
Binder進程。
可選地,所述將所述指定的底層系統事件的數據寫入到指定區域還包括:
將所述指定的底層系統事件的掃描碼scan code翻譯為可被安卓系統識別的鍵碼key code。
可選地,該方法還包括:
對寫入指定區域的數據進行加密處理。
可選地,所述通知當前運行的安卓應用從所述指定區域獲取底層系統事件的數據包括:
確定當前在屏幕進行展示的應用為當前運行的安卓應用。
可選地,所述指定的底層系統事件為硬體操作事件。
依據本發明的另一方面,提供了一種安卓底層系統事件的傳遞裝置,包括:
數據處理單元,適於獲取指定的底層系統事件的數據,將所述指定的底層系統事件的數據寫入到指定區域;
通知單元,適於通知當前運行的安卓應用從所述指定區域獲取底層系統事件的數據。
可選地,所述數據處理單元,適於獲取指定底層系統事件的寫入事件,在底層系統執行寫入操作時,從相應的數據寫入區域拷貝已寫入的數據至指定區域。
可選地,所述數據處理單元,還適於在拷貝已寫入的數據至指定區域的同時,刪除所述數據寫入區域中已被拷貝的數據。
可選地,所述數據處理單元,適於獲取指定底層系統事件的文件描述符,根據所述指定底層系統事件的文件描述符,註冊所述對指定底層系統事件的寫入事件的監聽事件。
可選地,所述數據寫入區域為如下中的至少一種:
共享內存;
Socket長連接;
Binder進程。
可選地,所述數據處理單元,還適於將所述指定的底層系統事件的掃描碼scan code翻譯為可被安卓系統識別的鍵碼key code。
可選地,所述數據處理單元,還適於對寫入指定區域的數據進行加密處理。
可選地,所述通知單元,適於確定當前在屏幕進行展示的應用為當前運行的安卓應用。
可選地,所述指定的底層系統事件為硬體操作事件。
由上述可知,本發明的技術方案,在獲取到指定的底層系統事件的數據後,將其寫入指定區域,再通知當前運行的應用從指定區域獲取相應的數據,從而實現了底層系統事件的傳遞。該技術方案改變了底層系統事件易被劫持的傳遞方式,通過主動獲取並控制底層系統事件的傳遞,確保了底層系統事件傳遞的安全性。
上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,並且為了讓本發明的上述和其它目的、特徵和優點能夠更明顯易懂,以下特舉本發明的具體實施方式。
附圖說明
通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對於本領域普通技術人員將變得清楚明了。附圖僅用於示出優選實施方式的目的,而並不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據本發明一個實施例的一種安卓底層系統事件的傳遞方法的流程示意圖;
圖2示出了根據本發明一個實施例的一種安卓底層系統事件的傳遞裝置的結構示意圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這裡闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,並且能夠將本公開的範圍完整的傳達給本領域的技術人員。
圖1示出了根據本發明一個實施例的一種安卓底層系統事件的傳遞方法的流程示意圖,如圖1所示,該方法包括:
步驟S110,獲取指定的底層系統事件的數據。
步驟S120,將指定的底層系統事件的數據寫入到指定區域。
步驟S130,通知當前運行的安卓應用從指定區域獲取底層系統事件的數據。
可見,圖1所示的方法,在獲取到指定的底層系統事件的數據後,將其寫入指定區域,再通知當前運行的應用從指定區域獲取相應的數據,從而實現了底層系統事件的傳遞。該技術方案改變了底層系統事件易被劫持的傳遞方式,通過主動獲取並控制底層系統事件的傳遞,確保了底層系統事件傳遞的安全性。
在本發明的一個實施例中,圖1所述的方法中,獲取指定的底層系統事件的數據包括:獲取指定底層系統事件的寫入事件;在底層系統執行寫入操作時,從相應的數據寫入區域拷貝已寫入的數據至指定區域。
底層系統事件,例如屏幕點擊事件,在傳遞過程中需要內核向共享內存中寫入數據,再由安卓應用從共享內存中讀取數據。而對於一個指定的底層系統事件,其數據寫入區域是可以獲得的,如果對其中的數據進行修改,那麼安卓應用獲取到的就是被劫持的底層系統事件,因此在本實施例中,從相應的數據寫入區域拷貝已寫入的數據至指定區域。
為了數據寫入區域的數據被劫持,在本發明的一個實施例中,上述方法還包括:在拷貝已寫入的數據至指定區域的同時,刪除數據寫入區域中已被拷貝的數據。
這樣通過邊寫邊擦的操作,在底層系統的寫入操作執行完畢後,數據寫入區域中依然是空白的,也就保證了底層系統事件不被劫持,同時安卓應用也不會從該數據寫入區域獲得數據,避免出現從多個區域獲得同一底層系統事件。
在本發明的一個實施例中,上述方法中,獲取指定底層系統事件的寫入事件包括:獲取指定底層系統事件的文件描述符;根據指定底層系統事件的文件描述符,註冊對指定底層系統事件的寫入事件的監聽事件。
安卓系統的底層系統內核為Linux內核,Linux將硬體設備視為一個文件,相應地,在/dev/input/event目錄下保存了多個硬體操作事件,例如屏幕事件、USB事件、鍵盤事件等。在本發明的實施例中,指定的底層系統事件可以為硬體操作事件。那麼在發生相應的硬體操作事件時,底層系統會調用open函數,得到相應的文件描述符fd。那麼通過調用epoll函數,就可以註冊對定底層系統事件的寫入事件的監聽事件,例如,epoll(fd,written)。在監聽到寫入事件後,可以通過epoll_wait函數阻塞該寫入事件,然後進行從相應的數據寫入區域拷貝已寫入的數據至指定區域的操作,在這個過程中需要為指定區域分配內存空間。
在本發明的一個實施例中,上述方法中,數據寫入區域為如下中的至少一種:共享內存;Socket長連接;Binder進程。上述幾種都可以作為傳遞媒介,將底層系統事件傳遞給安卓應用。
在本發明的一個實施例中,上述方法中,將指定的底層系統事件的數據寫入到指定區域還包括:將指定的底層系統事件的掃描碼scan code翻譯為可被安卓系統識別的鍵碼key code。
例如,硬體操作事件由於要與硬體直接聯繫,其產生的數據是可以被硬體識別的scan code,但scan code不能被安卓系統識別,因此還需要進行翻譯,即將scan code翻譯為key code。為了進一步確保數據安全,還可以對寫入指定區域的數據進行加密處理。這樣就需要安卓應用在獲取到數據時進行相應的解密。
在本發明的一個實施例中,上述方法中,通知當前運行的安卓應用從指定區域獲取底層系統事件的數據包括:確定當前在屏幕進行展示的應用為當前運行的安卓應用。
在本實施例中提供了一種較為簡便的確定當前運行的安卓應用的方法,即考慮到安卓應用運行時會佔用整個屏幕,因此確定當前在屏幕進行展示的應用為當前運行的安卓應用。
圖2示出了根據本發明一個實施例的一種安卓底層系統事件的傳遞裝置的結構示意圖,如圖2所示,安卓底層系統事件的傳遞裝置200包括:
數據處理單元210,適於獲取指定的底層系統事件的數據,將指定的底層系統事件的數據寫入到指定區域。
通知單元220,適於通知當前運行的安卓應用從指定區域獲取底層系統事件的數據。
可見,圖2所示的裝置,在獲取到指定的底層系統事件的數據後,將其寫入指定區域,再通知當前運行的應用從指定區域獲取相應的數據,從而實現了底層系統事件的傳遞。該技術方案改變了底層系統事件易被劫持的傳遞方式,通過主動獲取並控制底層系統事件的傳遞,確保了底層系統事件傳遞的安全性。
在本發明的一個實施例中,圖2所示的裝置中,數據處理單元210,適於獲取指定底層系統事件的寫入事件,在底層系統執行寫入操作時,從相應的數據寫入區域拷貝已寫入的數據至指定區域。
底層系統事件,例如屏幕點擊事件,在傳遞過程中需要內核向共享內存中寫入數據,再由安卓應用從共享內存中讀取數據。而對於一個指定的底層系統事件,其數據寫入區域是可以獲得的,如果對其中的數據進行修改,那麼安卓應用獲取到的就是被劫持的底層系統事件,因此在本實施例中,從相應的數據寫入區域拷貝已寫入的數據至指定區域。
為了數據寫入區域的數據被劫持,在本發明的一個實施例中,上述裝置中,數據處理單元210,還適於在拷貝已寫入的數據至指定區域的同時,刪除數據寫入區域中已被拷貝的數據。
這樣通過邊寫邊擦的操作,在底層系統的寫入操作執行完畢後,數據寫入區域中依然是空白的,也就保證了底層系統事件不被劫持,同時安卓應用也不會從該數據寫入區域獲得數據,避免出現從多個區域獲得同一底層系統事件。
在本發明的一個實施例中,上述裝置中,數據處理單元210,適於獲取指定底層系統事件的文件描述符,根據指定底層系統事件的文件描述符,註冊對指定底層系統事件的寫入事件的監聽事件。
安卓系統的底層系統內核為Linux內核,Linux將硬體設備視為一個文件,相應地,在/dev/input/event目錄下保存了多個硬體操作事件,例如屏幕事件、USB事件、鍵盤事件等。在本發明的實施例中,指定的底層系統事件可以為硬體操作事件。那麼在發生相應的硬體操作事件時,底層系統會調用open函數,得到相應的文件描述符fd。那麼通過調用epoll函數,就可以註冊對定底層系統事件的寫入事件的監聽事件,例如,epoll(fd,written)。在監聽到寫入事件後,可以通過epoll_wait函數阻塞該寫入事件,然後進行從相應的數據寫入區域拷貝已寫入的數據至指定區域的操作,在這個過程中需要為指定區域分配內存空間。
在本發明的一個實施例中,上述裝置中,數據寫入區域為如下中的至少一種:共享內存;Socket長連接;Binder進程。上述幾種都可以作為傳遞媒介,將底層系統事件傳遞給安卓應用。
在本發明的一個實施例中,上述裝置中,數據處理單元210,還適於將指定的底層系統事件的掃描碼scan code翻譯為可被安卓系統識別的鍵碼key code。
例如,硬體操作事件由於要與硬體直接聯繫,其產生的數據是可以被硬體識別的scan code,但scan code不能被安卓系統識別,因此還需要進行翻譯,即將scan code翻譯為key code。為了進一步確保數據安全,還可以由數據處理單元210,還適於對寫入指定區域的數據進行加密處理。
在本發明的一個實施例中,上述裝置中,通知單元220,適於確定當前在屏幕進行展示的應用為當前運行的安卓應用。
在本實施例中提供了一種較為簡便的確定當前運行的安卓應用的方法,即考慮到安卓應用運行時會佔用整個屏幕,因此確定當前在屏幕進行展示的應用為當前運行的安卓應用。
綜上所述,本發明的技術方案,在獲取到指定的底層系統事件的數據後,將其寫入指定區域,再通知當前運行的應用從指定區域獲取相應的數據,從而實現了底層系統事件的傳遞。該技術方案改變了底層系統事件易被劫持的傳遞方式,通過主動獲取並控制底層系統事件的傳遞,確保了底層系統事件傳遞的安全性。
需要說明的是:
在此提供的算法和顯示不與任何特定計算機、虛擬裝置或者其它設備固有相關。各種通用裝置也可以與基於在此的示教一起使用。根據上面的描述,構造這類裝置所要求的結構是顯而易見的。此外,本發明也不針對任何特定程式語言。應當明白,可以利用各種程式語言實現在此描述的本發明的內容,並且上面對特定語言所做的描述是為了披露本發明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本發明的實施例可以在沒有這些具體細節的情況下實踐。在一些實例中,並未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開並幫助理解各個發明方面中的一個或多個,在上面對本發明的示例性實施例的描述中,本發明的各個特徵有時被一起分組到單個實施例、圖、或者對其的描述中。然而,並不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發明要求比在每個權利要求中所明確記載的特徵更多的特徵。更確切地說,如下面的權利要求書所反映的那樣,發明方面在於少於前面公開的單個實施例的所有特徵。因此,遵循具體實施方式的權利要求書由此明確地併入該具體實施方式,其中每個權利要求本身都作為本發明的單獨實施例。
本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變並且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特徵和/或過程或者單元中的至少一些是相互排斥之外,可以採用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特徵以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特徵可以由提供相同、等同或相似目的的替代特徵來代替。
此外,本領域的技術人員能夠理解,儘管在此所述的一些實施例包括其它實施例中所包括的某些特徵而不是其它特徵,但是不同實施例的特徵的組合意味著處於本發明的範圍之內並且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發明的各個部件實施例可以以硬體實現,或者以在一個或者多個處理器上運行的軟體模塊實現,或者以它們的組合實現。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數位訊號處理器(DSP)來實現根據本發明實施例的安卓底層系統事件的傳遞裝置中的一些或者全部部件的一些或者全部功能。本發明還可以實現為用於執行這裡所描述的方法的一部分或者全部的設備或者裝置程序(例如,電腦程式和電腦程式產品)。這樣的實現本發明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從網際網路網站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本發明進行說明而不是對本發明進行限制,並且本領域技術人員在不脫離所附權利要求的範圍的情況下可設計出替換實施例。在權利要求中,不應將位於括號之間的任何參考符號構造成對權利要求的限制。單詞「包含」不排除存在未列在權利要求中的元件或步驟。位於元件之前的單詞「一」或「一個」不排除存在多個這樣的元件。本發明可以藉助於包括有若干不同元件的硬體以及藉助於適當編程的計算機來實現。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬體項來具體體現。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
本發明的實施例公開了A1、一種安卓底層系統事件的傳遞方法,其中,該方法包括:
獲取指定的底層系統事件的數據;
將所述指定的底層系統事件的數據寫入到指定區域;
通知當前運行的安卓應用從所述指定區域獲取底層系統事件的數據。
A2、如A1所述的方法,其中,所述獲取指定的底層系統事件的數據包括:
獲取指定底層系統事件的寫入事件;
在底層系統執行寫入操作時,從相應的數據寫入區域拷貝已寫入的數據至指定區域。
A3、如A2所述的方法,其中,該方法還包括:
在拷貝已寫入的數據至指定區域的同時,刪除所述數據寫入區域中已被拷貝的數據。
A4、如A2所述的方法,其中,所述獲取指定底層系統事件的寫入事件包括:
獲取指定底層系統事件的文件描述符;
根據所述指定底層系統事件的文件描述符,註冊所述對指定底層系統事件的寫入事件的監聽事件。
A5、如A2所述的方法,其中,所述數據寫入區域為如下中的至少一種:
共享內存;
Socket長連接;
Binder進程。
A6、如A1所述的方法,其中,所述將所述指定的底層系統事件的數據寫入到指定區域還包括:
將所述指定的底層系統事件的掃描碼scan code翻譯為可被安卓系統識別的鍵碼key code。
A7、如A6所述的方法,其中,該方法還包括:
對寫入指定區域的數據進行加密處理。
A8、如A1所述的方法,其中,所述通知當前運行的安卓應用從所述指定區域獲取底層系統事件的數據包括:
確定當前在屏幕進行展示的應用為當前運行的安卓應用。
A9、如A1-A8中任一項所述的方法,其中,所述指定的底層系統事件為硬體操作事件。
本發明的實施例還公開了B10、一種安卓底層系統事件的傳遞裝置,其中,該裝置包括:
數據處理單元,適於獲取指定的底層系統事件的數據,將所述指定的底層系統事件的數據寫入到指定區域;
通知單元,適於通知當前運行的安卓應用從所述指定區域獲取底層系統事件的數據。
B11、如B10所述的裝置,其中,
所述數據處理單元,適於獲取指定底層系統事件的寫入事件,在底層系統執行寫入操作時,從相應的數據寫入區域拷貝已寫入的數據至指定區域。
B12、如B11所述的裝置,其中,
所述數據處理單元,還適於在拷貝已寫入的數據至指定區域的同時,刪除所述數據寫入區域中已被拷貝的數據。
B13、如B11所述的裝置,其中,
所述數據處理單元,適於獲取指定底層系統事件的文件描述符,根據所述指定底層系統事件的文件描述符,註冊所述對指定底層系統事件的寫入事件的監聽事件。
B14、如B11所述的裝置,其中,所述數據寫入區域為如下中的至少一種:
共享內存;
Socket長連接;
Binder進程。
B15、如B10所述的裝置,其中,
所述數據處理單元,還適於將所述指定的底層系統事件的掃描碼scan code翻譯為可被安卓系統識別的鍵碼key code。
B16、如B15所述的裝置,其中,
所述數據處理單元,還適於對寫入指定區域的數據進行加密處理。
B17、如B10所述的裝置,其中,
所述通知單元,適於確定當前在屏幕進行展示的應用為當前運行的安卓應用。
B18、如B10-B17中任一項所述的裝置,其中,所述指定的底層系統事件為硬體操作事件。