Android service 命令記錄(Binder(c++/java))
阿新 • • 發佈:2018-11-21
經常使用命令:service list
但是你有沒有執行過service --h,察看過其他的Option
Usage: service [-h|-?]
service list
service check SERVICE
service call SERVICE CODE [i32 INT | s16 STR] ...
Options:
i32: Write the integer INT into the send parcel.
s16: Write the UTF-16 string STR into the send parcel.
看看他的原始碼的具體位置:
android\frameworks\native\cmds\service
結構也非常簡單。首先概略御覽原始碼:
本質上是通過Native 層的servicemanager介面實現具體功能。
對於service call這條命令的實現,我從來沒用過,新比較好奇。所以探究了一下原始碼的實現:
解析所有傳入的argv,打包資料:
很好,可以通過service call命令來檢驗binder服務是否正確。那麼有個神奇的問題,可以和java端的binder直接通訊嗎?
嘗試一下確認一下:我們以mountservice為例:
1.service list |grep mount
2.
為什麼是call 30?
其中含義自行理解。重點關注Parcel這個值,java層binder呼叫,結果通過Parcel回傳到Native層。言外之意,java層的binder可以和native層的binder直接通訊。