最近項(xiàng)目中需要在root下查排,靜默打開軟件的一些權(quán)限闹伪,這里需要用到Service Call 命令吁讨,所以研究了一下各參數(shù)的含義以及使用方法疚顷。
通過adb shell 命令旱易,執(zhí)行service,我們可以看到如下說明:
其中service call SERVICE CODE [i32 INT | s16 STR]...表明了該命令調(diào)用的格式:
SERVICE : 執(zhí)行的service名稱
CODE : 執(zhí)行的方法id值
[i32 INT | s16 STR]: 參數(shù)類型以及緊跟參數(shù)值腿堤,i32代表int類型阀坏,s16代表String類型。
具體使用舉例說明如下:
比如我需要用到AppOpsService中的setMode方法笆檀,那可以先找到該service名:
我們可以看到該服務(wù)名為appops忌堂,該服務(wù)接口為:com.android.internal.app.IAppOpsService,繼續(xù)找我們需要的方法:
在com.android.internal.app.IAppOpsService$Stub中找到了TRANSACTION_setMode酗洒,這里關(guān)于AIDL的內(nèi)容不再細(xì)說浸船,顯然,這里的TRANSACTION_setMode就是我們需要的方法寝蹈,其中包含了4個(gè)參數(shù)李命,3個(gè)整形以及一個(gè)String類型,方法參數(shù)已經(jīng)找到箫老,繼續(xù)找TRANSACTION_setMode的CODE值:
因?yàn)?strong>android.OS.IBinder.FIRST_CALL_TRANSACTION的值為1封字,所以TRANSACTION_setMode的值為11。
到了這一步,我們service call的命令也就很清晰了阔籽,寫法如下:
service call appops 11 i32 xx i32 xx s16 xx i32 xx (其中xx代表具體參數(shù)值)
補(bǔ)充說明:字段對(duì)應(yīng)的值建議通過反射的方法獲取流妻,而不是直接寫死數(shù)字。