以前一直在寫一個能夠隱藏應用的小程序,然後呢,在網上搜了許多教程…轉念一想,這種富有獨創性的技術怎麼可能共享在網上…於是自己總結了出來,供dalao們豐富眼界(唉唉)
獲取ROOT權限
咳咳,首先這個就不用說了吧,相信dalao們應該沒有問題的,電腦上的模擬器倒是有ROOT,然而手機上呢就不一定有了…大家可以嘗試用z4root或者Kingroot這一類的ROOT工具試試。
獲取了ROOT權限之後,我們該怎樣在程序中獲取這個權限呢?
Process pro=Runtime.getRuntime().exec("su");
按理來說,ROOT過後的設備都會有一個su的命令,然後呢通過Runtime獲取到的實例來執行這個命令,就可以獲取到一個進程Process,然後我們又怎樣鍵入命令呢?
首先,我們需要先使用這個Process創建出一個DataOutputStream實例,就叫它dos吧(怎麼這麼眼熟)
DataOutputStream dos=new DataOutputStream(pro.getOutputStream());
然後呢,我們就可以通過這個DataOutputStream執行命令了。
使用hide命令隱藏應用
dos.writeBytes("pm hide [應用包名]\n");
這個是linux提供的命令,pm是PackageManager的縮寫,即應用管理器,然後hide應該都懂吧…最後記得要用\n回車來執行命令。
按理來說這樣就應該成功了,然後記得把緩存區清空。
dos.flush();
那麼也可以舉一反三了,如果想再把這個軟件顯示出來,就可以使用以下命令。
dos.writeBytes("pm unhide [應用包名]\n");
但是這裏存在一個問題,使用pm hide命令隱藏了一個應用後,程序將無法讀取這個應用的詳細信息,比如名字,圖標等等,如果隱藏應用後再讀取會報錯。
那麼我們該如何在應用隱藏的情況下顯示它的信息呢?難不成要把圖標,名字等等全部保存下來?那也太麻煩了,下面介紹另一種隱藏應用的方式。
使用disable命令隱藏應用
這個可以理解吧,disable的意思是停用,其實就是停用某一個程序,在系統應用的設置界面裏面卸載按鈕也是停用。
停用命令的使用方法還是差不多的。
dos.writeBytes("pm disable [應用包名]\n");
通過這樣的方式同樣可以實現隱藏應用,並且也可以讀取應用的詳細信息,同時我們照樣可以將它顯示出來。只不過使用disable命令隱藏的應用在顯示時可能會出現一點問題,所以我們需要兩步將它顯示出來。
dos.writeBytes("pm disable-user [應用包名]\n");
dos.writeBytes("pm enable [應用包名]\n");
好的,這篇文章到這裏就結束了,如果有什麼問題歡迎留言提出~