歡迎轉載,轉載請註明:http://blog.csdn.net/zhgxhuaa
說明
在本系列文章的第一篇《安裝卸載篇》中介紹了應用安裝卸載相關的一些東西。本篇之所以取名爲《應用雜篇》就是希望繼續介紹一些應用相關的相對比較零散的東西,包括:應用安裝位置選擇、應用鎖、山寨應用識別、零流量分享、智能推薦等。
上接《應用安裝卸載篇》,首先介紹一下應用安裝位置選擇。
應用安裝位置
在安裝應用時,應用到底會安裝到內置存儲器裏面還是外置存儲器裏面呢?這裏主要取決於四個方面的信息:
A. 應用自身在AndroidManifest中隊installLocation的定義。
B. 調用安裝程序(pm命令等)時指定的參數。
C. 系統設置裏面的應用安裝位置選項(很多廠商會隱藏,此時默認一般是AUTO)。
D. 安裝時系統(這裏主要是根據存儲空間)的判斷。
應用鎖
應用鎖這個點不大,但是如果要做,還是有一些點可以挖掘,比如:
A. 應用鎖(鎖定應用,使用時需要驗證,如:密碼、圖案等)。
B. 鎖定系統設置(Settings)。
C. 鎖定數據連接狀態(Wifi、藍牙、移動網絡、數據同步)。
D. 鎖定安裝/卸載。
E. 應用隱藏。
應用鎖
這裏有兩種實現方案:
A. 實現一個Service,在Service中定時查詢RunningTask中的Activity,如果發現Activity屬於被鎖定的應用,則彈出加密驗證界面。
B. 利用進程注入技術,對ActivityManagerService中的startActivity進行攔截,,如果發現Activity屬於被鎖定的應用,則彈出加密驗證界面。
兩種方案存在的問題:
1) 方案一不需要root權限即可實現,方案二需要root權限,而且進程注入實現門檻較高,但實現更爲完美。
2) 方案一定時輪詢,在耗電方面表現要差一些。
3) 在採用方案一時,輪詢時間可以定爲300-500毫秒。
4) 採用方案一時需要屏蔽Back鍵和“最近的任務”列表。
5) 採用方案一時需要注意除了MainActivity以外其他Activity的判斷。
6) 無論採用哪種方式都需要注意黑白名單的維護。
下面是採用方案一時的核心實現代碼:
設置鎖
設置鎖鎖定的是系統設置裏面的信息,系統設置的信息大部分都是保存在Settings數據庫中,已SettingsProvider的形式提供訪問的。所以這裏在設定了鎖定選項後可以通過Observer的方式進行監控,一旦發生改變則重置爲原來的值。
鎖定數據連接狀態
有時候可能會有這樣一種需求,就是鎖定手機數據連接的狀態,防止其他應用或者人去改變。
系統在數據連接發生變化時會有響應的廣播發出,這裏響應和處理響應廣播即可。
鎖定安裝卸載
這裏有三種實現思路:
A、 通過進程注入監控系統卸載代碼。
B、 監控系統的應用安裝器進程(PackageInstaller)即可,利用2.1中的方法即可做到。
C、 利用Linux中的inotify機制對應用目錄進行監控,具體不做分析,可參見之前《應用寶卸載監控》的文章。
三種思路存在的問題:
1) 方案1:可以監控靜默安裝/卸載和通過系統接口進行安裝卸載,但無法監控直接暴力刪除應用目錄下的apk文件。需要root權限。
2) 方案2:只能監控利用系統安裝器進行安裝的情況,無法監控靜默安裝和暴力刪除。
3) 方案3:理論上可以監控所有情況,但依賴於監控進程的存活。在小米等手機監控進程可能存在問題。
應用隱藏
可以參考《手機加速篇》中的2.3.2借關於setApplicationEnabledSetting接口的介紹。
山寨應用/惡意應用識別
目前市面上很多手機管理軟件都推出“山寨應用識別”類似功能,下面介紹一下這裏面的一些點。雖然目前各家都在做山寨或者惡意應用掃描的功能,但是木有統一的標準。據網上的數據,騰訊手機管家認爲是惡意應用的有接近40%被360認爲是安全的;同樣360認爲是惡意應用的也有20%多騰訊認爲是安全的。
但無論各傢俱體採用的識別方式差異多大,其中包含的內容無外乎下面這些。在識別山寨應用的時候,可以從如下一些點入手:
A. 自身特徵(包括:包名簽名、圖標、開發商)。通過圖標判斷相似度,著名開發商和合作廠商認爲是安全的。
B. 安全特徵(手機病毒、扣費代碼、偷跑流量、偷發短信等),這裏可以跟安全廠商合作。
C. 隱私特徵(敏感權限)
D. 廣告特徵(通知欄廣告、內嵌廣告)
E. 市場特徵(下載量、評價、用戶舉報)。也可以結合後臺對刷榜情況進行處理。
F. 語言特徵(對電子市場中應用默認語言進行評分)
G. 應用來源(對不同來源採用不同的打分,比如說對來做360的打5分,對來做百度手機助手的打8分)
H. 外部合作(安全廠商掃描、12321網站等)
I. 利用Google Play進行驗證。
這裏面涉及到的核心點有這麼幾個:
1) 應用相似度的計算。
2) 惡意應用的判斷(這裏可以採用加權平均等多種方法)。
通過上面的分析可以看出,在識別惡意應用時,有很多工作是可以在本地做校驗的,在本地校驗完後再到服務器做進一步的校驗。這樣的好處是可以減少流量和服務器的計算量。
系統唯一標識
有很多場景和需求你需要用到手機設備的唯一標識符,通常會用到的信息有:IMEI、WIFI Mac address、BT mac address、Android id等。具體的獲取方法這裏不做詳細介紹,可參見http://cloudstack.blog.163.com/blog/static/1876981172012710823152/這篇文章。這裏說一下幾個需要注意的點:
- 儘量不用使用wifi mac地址,因爲在wifi設備關閉後獲取不到的問題。
- 不要依靠imei,因爲山寨機可能重複,並且用戶可能通過手機管理軟件禁止相關權限。
- 所有涉及到權限的都要考慮用戶可能會通過管理軟件等禁止的情況。
- 除了上面的那篇參考文章中的方法外,guid生成唯一串保存起來以後使用,也是一種可行的實現思路。
這一篇只是做了簡單的方案的介紹,貼的代碼較少,歡迎交流討論。下一篇介紹《省電管理篇》