我需要在Android模擬器中獲得root權限,從而使用’iptables’和’busybox’功能。
嘗試安裝了z4root
應用程序,
但需要很長時間,且沒有完成獲取root就卡住了。有人說如果我們把係統降級到RC30以下,就可以獲得root權限了。如果這是真的,那該怎麽做呢?我使用Linux和Windows兩種操作係統。
最佳解決辦法
答案其實可以比較簡單:)
$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #
次佳解決辦法
當模擬器運行時,執行以下命令列表,我在Android 2.2上測試了這個avd的解決方案:
adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system
adb push su /system/xbin/su
adb shell chmod 06755 /system
adb shell chmod 06755 /system/xbin/su
每次啟動模擬器時都需要運行這些命令。假定su二進製文件位於工作目錄。可以在這裏找到su
和superuser
:http://forum.xda-developers.com/showthread.php?t=682828。
第三種解決辦法
如何獲取Android模擬器的Root權限(在Android 7.1.1 /Nougat測試過)
要求:
說明
-
安裝SuperSu.apk
-
首先安裝SuperSu應用程序,隻需拖放(如果運行最新的模擬器版本,或通過adb做sideload,即
adb –e install supersu.apk
) -
安裝完成後,運行時會顯示如下所示的屏幕,顯示“沒有安裝SU二進製文件..”。這個錯誤隻是確認設備還沒有 root 權限。
-
-
使模擬器的係統分區可寫
-
需要給模擬器寫入係統文件的權限。
-
輸入以下代碼來完成此操作:
emulator.exe âavd {emulator_name} âwritable-system
-
注意:先導航到安裝了Android SDK的工具文件夾,然後按Shift並右鍵單擊打開命令提示符。
-
導入su二進製文件到係統目錄
-
解壓flashable.zip(包含不同體係結構的su二進製文件)
-
重要!隻能使用與avd體係結構(如x86,arm等)相匹配的su二進製文件,並記下您提取這些二進製文件的路徑。
-
確保以root身份運行adb,並且需要remount。隻需輸入這些代碼
adb root
adb remount
然後push su二進製文件:
使用的代碼:adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su
注意:在控製台找出bin
或xbin
:> adb shell
,> ls /system/xbin/su
如果失敗,請嘗試將這個目錄改為/system/xbin/su
。另外運行Android 5.1及以下版本的模擬器,使用su
而不是su.pie
-
更改su二進製文件的權限
-
接下來對su二進製的權限做一些修改。必須通過adb在模擬器中做到這一點:
adb –e shell
su root
cd /system/bin
chmod 06755 su -
重要!!記下su二進製路徑(比如,這裏是/system/bin)
-
在su binary上設置
install
指令並設置daemon
輸入代碼:
su --install
並設置守護進程:
su --daemon&
重要!!注意間距
-
將SELinux設置為Permissive(即關閉SE Linux)
-
最後通過這個代碼關閉selinux:
-
setenforce 0
-
打開SuperSU應用程序,它可能會要求更新二進製文件,您可以使用Normal方法。
注意:如果您遇到bootloops,請不要更新二進製文件,隻需按照原樣使用即可。
到這裏差不多就可以了!
打開任何需要SU權限的應用程序,仔細檢查確實SuperSU會詢問您是否希望授予它權限。
要讓root持久更新su二進製文件(使用Normal方法),將system.img從臨時目錄(Users\AppData\Local\Temp\Android Emulator
中複製,該文件通常是隨機命名的,例如1359g.tmp
具有較大的大小),並替換默認的system.img
。
第四種辦法
對於使用5.1.1和6.0的AVD:
set adb=adb -s emulator-5558
set arch=x64
set pie=
adb start-server
%adb% root
%adb% remount
rem %adb% shell mount -o remount,rw /system
%adb% shell setenforce 0
%adb% install common/Superuser.apk
%adb% push %arch%/su%pie% /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push %arch%/su%pie% /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
rem %adb% shell mount -o remount,ro /system
exit /b
需要SuperSU的UPDATE.zip,解壓到任何文件夾。用上麵的內容創建bat文件。不要忘記指定必要的架構和設備:set adb=adb -s emulator-5558
和set arch=x64
。如果運行的Android大於或等於5.0,請將set pie=
更改為set pie=.pie
。運行,獲得當前運行的臨時根目錄。
如果在重新安裝係統分區時出現錯誤,則需要從命令行啟動AVD。請參閱下麵的Android 7的第一步。
如果想讓它持久化 – 在SuperSU中更新二進製文件,並將臨時文件夾中的system.img文件保存為默認的system.img文件。
如何將生成的臨時根目錄轉換為永久的?
首先是SuperSu。它提供了一個二進製升級。以正常方式更新,不要Reboot。
其次 – 隻與模擬器相關。相同的AVD。底線是係統映像中的更改不會被保存。需要自己保持。
對於不同的模擬器已經有不同的說明。
對於AVD,可以嘗試找到一個臨時文件system.img,將其保存在某處並在啟動模擬器時使用。
在Windows中,它位於%LOCALAPPDATA%\Temp\AndroidEmulator
中,並且有一個類似TMP4980.tmp
的名稱。
將其複製到文件夾avd設備(%HOMEPATH%\.android\avd\%AVD_NAME%.avd\
),並重命名為system.img
。
對於android 7,需要運行其他步驟:1.需要手動運行模擬器。轉到sdk文件夾sdk\tools\lib64\qt\lib
。從這個文件夾模擬器運行選項-writable-system -selinux disabled
,如下:
F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
-
需要從根目錄重新啟動
adbd
:adb -s emulator-5554 root
重新安裝係統:
adb -s emulator-5554 remount
每次運行模擬器隻能使用一次。而任何另一個remount可以破壞寫入模式。因此,不需要運行任何其他重新mount的命令,如mount -o remount,rw /system
。
另一個步驟保持不變 – 上傳二進製文件,運行二進製文件等等。
來自AVD Android 7 x86的圖片:
如果在執行su
二進製文件時看到關於PIE的錯誤,那麽可能是上傳到仿真器二進製文件有誤。必須在歸檔文件中上傳名為su.pie
的二進製文件,但在仿真器上必須命名為su
,而不是su.pie
。
第五種辦法
最簡單的方法是為命令sh
創建一個別名,例如
adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su
在Android模擬器3.0及更高版本測試過。