Android的IBinder介面及其安全性机制

Activity物件与Service物件在不同的进程(Process)里执行,各有不同的UID(Unix user ID)。由於各自独立执行,所以Activity物件通常依赖Intent物件去请求Android启动所需要的Service。

  就Service物件的开发者而言,Activity物件是属於外界(因为两者在不同的进程里执行)的软体,也大多是别人开发的。那麼,Service物件如何确定这外来的物件是善意的呢? 这就是安全性的问题了。在Service类别里,可以做权限的检查,其常用指令如下图:
Android的IBinder介面及其安全性机制

當Service確認了對方的善意,就將IBinder介面的參考(Reference)傳給Activity物件。Activity物件就能透過IBinder介面去使用Binder的服務了。如下圖:
Android的IBinder介面及其安全性机制
當Activity呼叫IBinder的transact()等函數時,會反向呼叫NotifyBinder子類別的onTransact()函數。此時,也可以進行安全檢驗,例如下圖裡的指令:

int uid = Binder.getCallingUID();

  就能取得對方UID來檢驗它的身分等。還可以進行checkCallingPermission()等檢驗。如下圖:
Android的IBinder介面及其安全性机制
經檢驗而確認來客是善意的,就啟動BinderServer(如影音播放器)來提供實質的服務。

  以上是就Service的開發者角度來看Android的IBinder的安全機制的有關概念。至於Android範例程式碼,在此節錄文章裡,就省略了。

http://android.tgbus.com/Android/tutorial/200812/171437.shtml

你可能感兴趣的:(android,unix)