Android 實(shí)現(xiàn)永久性開(kāi)啟adb 的root權(quán)限
adb 的root 權(quán)限是在system/core/adb/adb.c 中控制。主要根據(jù)ro.secure 以及 ro.debuggable 等system property 來(lái)控制。
默認(rèn)即檔ro.secure 為0 時(shí),即開(kāi)啟root 權(quán)限,為1時(shí)再根據(jù)ro.debuggable 等選項(xiàng)來(lái)確認(rèn)是否可以用開(kāi)啟root 權(quán)限。為此如果要永久性開(kāi)啟adb 的root 權(quán)限,有兩種修改的方式:
1. 修改system property ro.secure, 讓ro.secure=0。
2. 修改adb.c 中開(kāi)啟root 權(quán)限的判斷邏輯。
下面詳細(xì)說(shuō)明這兩種修改方式:
第一種方法.
修改system property ro.secure, 讓ro.secure=0。
(1) 修改alps/build/core/main.mk
ifneq (,$(user_variant)) # Target is secure in user builds. ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
將
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1
改成
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0
(2) 在android JB 版本(4.1) 以后,google 從編譯上直接去除了adbd 的user 版本root 權(quán)限, 為此您要修改system/core/adb/Android.mk 中的編譯選項(xiàng) ALLOW_ADBD_ROOT, 如果沒(méi)有打開(kāi)這個(gè)選項(xiàng),那么adb.c 中將不會(huì)根據(jù)ro.secure 去選擇root 還是shell 權(quán)限,直接返回shell 權(quán)限。
因此您必須需要Android.mk 中的第126行:
ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))===> ifneq (,$(filter userdebug user eng,$(TARGET_BUILD_VARIANT)))
第二種方法.
修改adb.c 中開(kāi)啟root 權(quán)限的判斷邏輯。這里針對(duì)4.1 以后版本 和4.1以前版本有所區(qū)別。
如果是JB 4.1 以后版本,直接修改函數(shù) should_drop_privileges() 函數(shù), 清空這個(gè)函數(shù),直接返回 0 即可。返回0 即開(kāi)啟root 權(quán)限。
[測(cè)試與確認(rèn)]
當(dāng)修改完成后,只需要重新build bootimage ,然后download 即可,然后到setting 中開(kāi)啟debug 選項(xiàng),adb 連接后,會(huì)顯示 #, 即root 成功。
補(bǔ)充知識(shí):adb怎么判斷是否有root權(quán)限,并更改system/app內(nèi)容
一、首先判斷root權(quán)限:
adb root結(jié)果:C:signapp>adb rootrestarting adbd as root # 說(shuō)明有root權(quán)限 ,若是adbd cannot run as root in production builds 則說(shuō)明沒(méi)有root權(quán)限
二、更改system/app內(nèi)容
一般情況下system/app都會(huì)出現(xiàn)read only,所以需要adb remount(這是一個(gè)重新mount你的分區(qū)的命令,讓system分區(qū)從只讀變成可讀可寫(xiě),獲得了root權(quán)限才可運(yùn)行,先執(zhí)行adb root)
在system/app中就可以隨意修改了,但是注意一點(diǎn),
若想預(yù)置為系統(tǒng)應(yīng)用,則如果只是將apk拷貝到 /system/app目錄下還是不夠的,還需要 777 的權(quán)限,命令:chmod 777 target.apk
總的來(lái)說(shuō)就下面幾個(gè)代碼:
adb rootadb remountadb push target.apk /system/app
adb shellcd ../system/appchomd 777 target.apk
reboot
還有些地方可以通過(guò)如下命令操作:
$ adb push SecureSetting.apk /sdcard/ // 上傳要安裝的文件,為安裝做準(zhǔn)備。 $ adb shell $ su // 切換到 root 用戶。如果沒(méi)有獲得 Root 權(quán)限,這一步不會(huì)成功。 # mount //顯示當(dāng)前mount情況 # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system // 讓分區(qū)可寫(xiě)。 # cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk // 這一步可以用 cp 實(shí)現(xiàn),但一般設(shè)備中沒(méi)有包含該命令。如果使用 mv 會(huì)出現(xiàn)錯(cuò)誤:failed on ’/sdcard/NetWork.apk’ - Cross-device link。 chmod 777 chetou.apk # mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system // 還原分區(qū)屬性,只讀。 # exit $ exit
以上這篇Android 實(shí)現(xiàn)永久性開(kāi)啟adb 的root權(quán)限就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 解決Android Studio 格式化 Format代碼快捷鍵問(wèn)題2. php解決注冊(cè)并發(fā)問(wèn)題并提高QPS3. 完美解決vue 中多個(gè)echarts圖表自適應(yīng)的問(wèn)題4. 在Chrome DevTools中調(diào)試JavaScript的實(shí)現(xiàn)5. Springboot 全局日期格式化處理的實(shí)現(xiàn)6. SpringBoot+TestNG單元測(cè)試的實(shí)現(xiàn)7. Java使用Tesseract-Ocr識(shí)別數(shù)字8. vue實(shí)現(xiàn)web在線聊天功能9. JS原生2048小游戲源碼分享(全網(wǎng)最新)10. Python使用urlretrieve實(shí)現(xiàn)直接遠(yuǎn)程下載圖片的示例代碼
