一窗骑、前言
近段時間我們打算針對公司已有的設(shè)備做一套設(shè)備管理系統(tǒng),采集設(shè)備的數(shù)據(jù)、給設(shè)備發(fā)送指令立砸。
過程中發(fā)現(xiàn)代碼執(zhí)行reboot命令的時候長時間未響應(yīng)吐葵,但是我去adb中執(zhí)行reboot又是可以的凤藏,而且以往從來也沒有出現(xiàn)過這個情況,經(jīng)過我反復(fù)排查發(fā)現(xiàn)是這批設(shè)備沒有進(jìn)行root的原因,導(dǎo)致我的app沒有root權(quán)限而咆,無法執(zhí)行這些命令
可是廠家給的app裝上竟然可以執(zhí)行這些命令
原本為了工作的順利進(jìn)行涯捻,并不打算揪住這一個小的點浪費時間了擂煞,不過我是個喜歡刨根問底的人晾捏,于是便有了今天這篇博客,這是我這兩天查閱各種資料和各種調(diào)試測試出來的結(jié)果玻淑,希望對大家有所幫助
二箫锤、獲得權(quán)限
做一件事情之前我們先搞清楚他的概念馏臭,這樣理解起來才會順暢
我們的應(yīng)用想要獲取系統(tǒng)級權(quán)限有兩種方法:
(1)設(shè)備root
(2*)在AndroidManifest中添加
android:sharedUserId="android.uid.system"
簡單解釋下sharedUserId這個屬性塑崖,通過設(shè)置同一個User id的使得多個應(yīng)用可以運行在同一個進(jìn)程中抒蚜。而將sharedUserId設(shè)置成android.uid.system則可以將該應(yīng)用和系統(tǒng)應(yīng)用運行在同一進(jìn)程中,于是乎便有了系統(tǒng)權(quán)限
三长捧、加入sharedUserId出現(xiàn)的問題
Manifest文件中加入sharedUserId后肌割,我們會發(fā)現(xiàn)一個問題
不管是調(diào)試安裝還是打包安裝,都會報一個INSTALL_FAILED_SHARED_USER_INCOMPATIBLE的安裝錯誤
這邊就需要闡述一下這個問題出現(xiàn)的原因,我們從設(shè)計思想上來反推
如果任意一個app加上跟你一樣的sharedUserId都可以與你的app運行在同一進(jìn)程和你的app共享數(shù)據(jù),那么我們的app數(shù)據(jù)安全誰來保障榨馁,肯定不行是吧珍剑,所以當(dāng)你加上這個的時候别凤,安裝包是不能安裝的
那么怎么樣才能安裝上呢?
四、解決安裝失敾佟(INSTALL_FAILED_SHARED_USER_INCOMPATIBLE的問題)
使用sharedUserId我們需要記住一個概念
使用同一個sharedUserId的應(yīng)用,需要使用同一個簽名文件
(一)下載相關(guān)文件
于是乎,想要安裝在android設(shè)備上,就需要找到android原生應(yīng)用相同的簽名
在google的git上我們可以拿到我們想要的東西
https://android.googlesource.com/platform/build/+/donut-release/target/product/security/
需要的就是這兩個簽名文件
這里需要特別說明一下
如果使用的設(shè)備廠家沒有對這個改動過,則使用google給的這兩個就行了
我碰到過有的設(shè)備因為廠家做過處理,所以該文件需要向廠家索取,否則無法還是會導(dǎo)致安裝不上的問題
除此之外生巡,還需要keytool工具
https://github.com/getfatday/keytool-importkeypair
(二)生成.jks簽名文件
1、在項目更目錄下創(chuàng)建文件夾signApk疯汁,并將簽名工具和簽名文件都放到該文件夾下
2牲尺、在該文件夾下創(chuàng)建signature.sh腳本文件,方便直接生成簽名
編寫signature文件
./keytool-importkeypair -k giftedcat.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias key0
giftedcat.jks 是生成簽名文件的名稱
123456 是簽名的密碼
key0 是簽名的別名
如果是在windows下的話 雙擊便可以得到簽名文件了
3.在Android Studio中使用
這一步的話幌蚊,其實也不需要我過多敘述谤碳,相信大家已經(jīng)是爛熟于心了
到這一步,我們的app獲取系統(tǒng)級權(quán)限就算是大功告成了
已經(jīng)可以跑起來了溢豆,跑不起來的慣例先clean一下
五蜒简、結(jié)語
在最后需要提醒一下各位,如果之前沒有加這個沫换,這次需要加上去的話臭蚁,是需要將老的應(yīng)用卸載掉的最铁,畢竟簽名都變了,所以對線上已有的應(yīng)用需要更新的話垮兑,加上這個勢必會造成影響冷尉,這個需要注意