Android靜默安裝的原理以及實現(xiàn)方法(一)

android中的靜默安裝其實就是在用戶不知情,且不影響用戶操作,不彈出系統(tǒng)安裝頁面的情況下,悄悄地將應(yīng)用安裝好。常規(guī)的來講,系統(tǒng)在安裝應(yīng)用的時候,會提示用戶授權(quán)所牽扯到的權(quán)限。而當(dāng)使用靜默安裝的時候,用戶是看不到這些權(quán)限的,相當(dāng)于強迫用戶接受這些權(quán)限。因此,在官方看來,這種危險的行為,是不應(yīng)該開放給開發(fā)者的。

考慮到讓用戶點擊安裝對話框的體驗比較差的問題,我們可以通過借鑒360助手的解決方案。兩種方案:智能安裝(不需要root權(quán)限)和秒裝(需要root權(quán)限)。今天我們主講第一種,不需要root權(quán)限的方法。

當(dāng)手機未root的時候,需要借助android的無障礙服務(wù)來實現(xiàn)智能安裝。步驟:①、首先在res/xml目錄下新建一個accessibility_service_config.xml文件,如圖-1。

圖-1

其中,packageNames指定我們要監(jiān)聽哪個應(yīng)用程序下的窗口活動,這里寫com.android.packageinstaller表示監(jiān)聽Android系統(tǒng)的安裝界面。description指定在無障礙服務(wù)當(dāng)中顯示給用戶看的說明信息,上圖中360手機助手的一大段內(nèi)容就是在這里指定的。accessibilityEventTypes指定我們在監(jiān)聽窗口中可以模擬哪些事件,這里寫typeAllMask表示所有的事件都能模擬。accessibilityFlags可以指定無障礙服務(wù)的一些附加參數(shù),這里我們傳默認值flagDefault就行。accessibilityFeedbackType指定無障礙服務(wù)的反饋方式,實際上無障礙服務(wù)這個功能是Android提供給一些殘疾人士使用的,比如說盲人不方便使用手機,就可以借助無障礙服務(wù)配合語音反饋來操作手機,而我們其實是不需要反饋的,因此隨便傳一個值就可以,這里傳入feedbackGeneric。最后canRetrieveWindowContent指定是否允許我們的程序讀取窗口中的節(jié)點和內(nèi)容,必須寫true。②、記得在string.xml文件中寫一下description中指定的內(nèi)容,如下圖-2所示:

圖-2

③、修改AndroidManifest.xml文件,在里面配置無障礙服務(wù)。如圖-3.

圖-3

這部分配置的內(nèi)容多數(shù)是固定的,必須要聲明一個android.permission.BIND_ACCESSIBILITY_SERVICE的權(quán)限,且必須要有一個值為android.accessibilityservice.AccessibilityService的action,然后我們通過將剛才創(chuàng)建的配置文件指定進去。④、去實現(xiàn)智能安裝功能的具體邏輯,創(chuàng)建一個MyAccessibilityService類并繼承自AccessibilityService,代碼如下圖-4和圖-5所示:

圖-4
圖-5

代碼并不復(fù)雜,我們來解析一下。每當(dāng)窗口有活動時,就會有消息回調(diào)到onAccessibilityEvent()方法中,因此所有的邏輯都是從這里開始的。首先我們可以通過傳入的AccessibilityEvent參數(shù)來獲取當(dāng)前事件的類型,事件的種類非常多,但是我們只需要監(jiān)聽TYPE_WINDOW_CONTENT_CHANGED和TYPE_WINDOW_STATE_CHANGED這兩種事件就可以了,因為在整個安裝過程中,這兩個事件必定有一個會被觸發(fā)。當(dāng)然也有兩個同時都被觸發(fā)的可能,那么為了防止二次處理的情況,這里我們使用了一個Map來過濾掉重復(fù)事件。

接下來就是調(diào)用iterateNodesAndHandle()方法來去解析當(dāng)前界面的節(jié)點了,這里我們通過遞歸的方式將安裝界面中所有的子節(jié)點全部進行遍歷,當(dāng)發(fā)現(xiàn)按鈕節(jié)點的時候就進行判斷,按鈕上的文字是不是“安裝”、“完成”、“確定”這幾種類型,如果是的話就模擬一下點擊事件,這樣也就相當(dāng)于幫用戶自動操作了這些按鈕。另外從Android 4.4系統(tǒng)開始,用戶需要將應(yīng)用申請的所有權(quán)限看完才可以點擊安裝,因此如果我們在節(jié)點中發(fā)現(xiàn)了ScrollView,那就模擬一下滑動事件,將界面滑動到最底部,這樣安裝按鈕就可以點擊了。

最后,回到MainActivity中,來增加對智能安裝功能的調(diào)用,如下所示:

圖-6

當(dāng)點擊了開啟智能安裝服務(wù)按鈕時,我們通過Intent跳轉(zhuǎn)到系統(tǒng)的無障礙服務(wù)界面,在這里啟動智能安裝服務(wù)。當(dāng)點擊了智能安裝按鈕時,我們通過Intent跳轉(zhuǎn)到系統(tǒng)的安裝界面,之后所有的安裝操作都會自動完成了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容