目前為止,我們提了「HAL Stub」的觀念,了解到 stub 是一種代理人的觀念,架構設計上,採取「provide operations」與「callback」機制,而不是採用「module」即 library 的 direct function call 做法。
接著,又提到「採取Service架構的方式」。在講解HAL stub的實作細節前,需要大略了解一下Android Service與HAL stub的關係;因為,架構設計上是「透過Android Service取得HAL stub提供的operations」。
取得HAL stub operations的程式碼實際上是實作在Native Service裡,相關的實作細節留待後續再做說明。
Android Service與HAL stub的關係
應用程式(Application)使用了Manager API,Manager API經由Android Service來到Native Service層,最後Native Service層再引用(invoke)HAL stub。這個過程,總共經過了以下3個介面,如下圖。
1. 這是一個 remote interface,應用程式與Android Service在不同的 process 上執行。
2. 這是 Java native interface,實作上透過 JNI table 來對應 native method 與 native function。
3. 理論上,這是 HAL 層,實作上則是使用 HAL API 先取得 stub operations,再由 native service callback stub。
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw