Làm thế nào để có quyền truy cập root trên trình giả lập Android?


146

Tôi có tất cả các phiên bản SDK Android (từ 1.5 đến 2.3.3) và tôi đã thử nhiều phương pháp để lấy root trong trình giả lập Android. Tôi không sử dụng bất kỳ thiết bị Android nào và kiểm tra mọi thứ trên trình giả lập (AVD).

Tôi cần có quyền truy cập root trong bất kỳ trình giả lập Android nào để sử dụng chức năng 'iptables' và 'busybox'. Và để sử dụng iptables tôi phải có quyền truy cập root. Lệnh 'su' Atleast sẽ thực thi trong trình giả lập thiết bị đầu cuối.

Tôi cũng đã cài đặt z4rootứng dụng,

Nhưng phải mất rất nhiều thời gian và không hoàn thành việc root và bị kẹt. Một số người nói rằng nếu chúng tôi hạ cấp hệ thống xuống dưới RC30, bằng cách này chúng tôi có thể có quyền truy cập root. Nếu điều này là đúng, thì làm thế nào để làm điều này? Tôi sử dụng cả Linux và HĐH Windows.

Xin ai đó cho tôi biết bất kỳ phương pháp nào để root trình giả lập của tôi.


Tôi nghĩ rằng bạn có thể sử dụng "Root.apk" được lưu trữ trên filecrop (VISIONary trong hệ thống Android) để root trình giả lập bởi vì, mỗi lần khởi động lại, nó sẽ root hệ thống. Z4root không thể hoạt động vì nó cần khởi động lại để truy cập root hoạt động. Xin lỗi vì tiếng Anh không tốt, tôi là người Pháp.
JeremLeOuf

Tôi có thể lấy cái này ở đâu? Có một hướng dẫn cho việc này?
nhà phát triển Android

6
Xin lưu ý rằng trình giả lập Android đã được "root". Bạn không cần phải làm bất cứ điều gì để có được một vỏ adb gốc, vì nó đã chạy như root theo mặc định. Những gì được thảo luận ở đây là cài đặt một "su" bị hack hoặc shim tương tự để cho phép mã ứng dụng khởi chạy các chương trình trợ giúp chạy dưới quyền root.
Chris Stratton

2
Sử dụng Genymotion genymotion.com Nó rất nhanh và có root theo mặc định.
klimat

1
bạn đã cài đặt hình ảnh wrnong. xem tại đây -> stackoverflow.com/questions/43923996/
Ấn

Câu trả lời:


135

Những câu trả lời này đều phức tạp không cần thiết :)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #

52
Chạy adb rootkết quả trong "adbd không thể chạy như root trong bản dựng sản xuất". Bạn đang sử dụng một trình giả lập cụ thể? Vui lòng cung cấp thêm chi tiết.
orodbhen

3
Bạn không thể sử dụng root này cho bất kỳ ứng dụng.
Enyby

5
Nếu bất cứ ai đang cố gắng để điều này hoạt động trên các hình ảnh hệ thống Google Play mới, adbd được đặt thành an toàn trong ramdisk.img. Tôi đã có thể làm việc xung quanh nó bằng cách sử dụng ramdisk.img từ hình ảnh Google API. Tôi đã thử nghiệm trên cả hình ảnh 7.0 và 8.0.
tstaylor7

46
Nếu adb rootđưa ra lỗi adbd cannot run as root in production builds, hãy xem stackoverflow.com/a/45668555/1682419 - Bạn cần một "Hình ảnh hệ thống Google API" chứ không phải là "Hình ảnh hệ thống Google Play".
Jerry101

10
@JRaymond Tôi đã gõ vào adb root nhưng không có gì được in ra sau đó

75

Cách root trình giả lập Android (đã thử nghiệm trên Android 7.1.1 / Nougat)

Yêu cầu :

Hướng dẫn

  1. Cài đặt SuperSu.apk

    • Trước tiên hãy cài đặt ứng dụng SuperSu, chỉ cần kéo và thả (nếu chạy phiên bản giả lập mới nhất hoặc tải thông qua adb tức là adb -e install supersu.apk)

    • Sau khi cài đặt nó, khi bạn chạy, nó sẽ hiển thị một màn hình như hình bên dưới cho biết không có cài đặt nhị phân SU .. Lỗi này chỉ xác nhận thiết bị chưa được root.

nhập mô tả hình ảnh ở đây


  1. Tạo phân vùng hệ thống giả lập 'có thể ghi

    • Như nó gợi ý, chúng ta cần cấp quyền cho trình giả lập để ghi các tệp hệ thống.

    • Nhập mã sau đây để thực hiện điều này: emulator -avd {emulator_name} -writable-system

Nếu bạn có nhiều AVD, bạn có thể nhận được danh sách các avds bằng cách sử dụng lệnh: emulator -list-avds

Lưu ý: Điều hướng đến thư mục công cụ nơi cài đặt SDK Android và mở dấu nhắc lệnh ở đó bằng cách nhấn shift và nhấp chuột phải.


  1. Đẩy su nhị phân trong thư mục hệ thống

    • Trích xuất Recovery flashable.zip (chứa các nhị phân su của các kiến ​​trúc khác nhau)

Quan trọng! Chỉ sử dụng nhị phân su phù hợp với kiến ​​trúc avd của bạn, ví dụ x86, arm, v.v., và lưu ý đường dẫn nơi bạn trích xuất các nhị phân này.

  • Hãy chắc chắn rằng bạn đang chạy adb với quyền root và bạn cũng cần phải truy cập lại. Chỉ cần nhập các mã này

adb root

adb remount

Bây giờ là lúc để đẩy nhị phân su:

Đây là mã tôi đã sử dụng thành công :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(đừng bận tâm về vị trí cụ thể của tôi về nhị phân su, bất kỳ vị trí nào cũng được miễn là không có khoảng trắng)

lưu ý: Để tìm ra binhoặc xbinlàm trong bảng điều khiển trước:> adb shell,>ls /system/xbin/su

Nếu thất bại, hãy thử đẩy nó vào thư mục này thay thế /system/xbin/su. Ngoài ra, đối với các trình giả lập chạy Android 5.1 trở xuống, hãy sử dụng suvà khôngsu.pie


  1. Thay đổi quyền của nhị phân su

    • Tiếp theo hãy thực hiện một chút sửa đổi các quyền của nhị phân su. Chúng ta phải làm điều này trong thiết bị giả lập thông qua adb:

    adb -e shell su root cd /system/bin chmod 06755 su

Quan trọng!! Lưu ý đường dẫn nhị phân su (của tôi là / system / bin)


  1. Đặt lệnh installtrên nhị phân su và đặtdaemon

Nhập mã:

su --install

và để thiết lập trình nền:

su --daemon&

Quan trọng!! Lưu ý về khoảng cách


  1. Đặt SELinux thành Permissive (tức là tắt SE Linux)

    • Cuối cùng tắt selinux thông qua mã này:

setenforce 0


  1. Mở ứng dụng SuperSU và nó có thể yêu cầu cập nhật nhị phân, bạn có thể sử dụng phương pháp Bình thường.

Lưu ý: Nếu bạn đang gặp phải bootloops, thay vì không cập nhật nhị phân, chỉ cần sử dụng nó như vậy.


Nó khá là nhiều!!

Mở bất kỳ ứng dụng nào yêu cầu quyền SU chỉ để kiểm tra lại và thực sự SuperSU hỏi bạn có muốn cấp quyền su không.

nhập mô tả hình ảnh ở đây

Để có bản gốc cập nhật liên tục gốc nhị phân (sử dụng phương thức Bình thường), sau đó sao chép system.img từ thư mục temp ( Users\AppData\Local\Temp\Android Emulatortệp thường được đặt tên ngẫu nhiên, ví dụ 1359g.tmpvới kích thước lớn) và thay thế mặc định system.img.

Cập nhật :

Tôi đã lưu ý là dễ dàng có được một hình ảnh hệ thống tạm thời trong Linux, hơn Windows. Bạn có thể thử sử dụng hình ảnh chụp nhanh.

Cập nhật ngày 4 tháng 8 năm 2018

Với sự xuất hiện của trình giả lập 27.3.x, giờ đây việc bảo quản root dễ dàng hơn nhiều thông qua tính năng chụp nhanh (nếu sao chép system.imgphương thức không hoạt động):

Lý tưởng hơn là giống như ngủ đông thiết bị ảo với cấu hình nguyên vẹn, do đó mọi thứ đều được bảo tồn.

Ảnh chụp nhanh

Bây giờ bạn có thể lưu nhiều ảnh chụp nhanh AVD cho một cấu hình thiết bị nhất định và chọn ảnh chụp nhanh đã lưu nào để tải khi bạn khởi động trình giả lập. Bắt đầu một thiết bị ảo bằng cách tải một ảnh chụp nhanh giống như đánh thức vật lý từ trạng thái ngủ, trái ngược với việc khởi động thiết bị từ trạng thái tắt nguồn.

Điều này ngụ ý yêu cầu duy nhất để khởi động trình giả lập là thêm -writable-systemtham số vào emulator -avd [avdname]lệnh bình thường để khởi động trình giả lập. ( Chạy trình giả lập chỉ với emulator -avd [avdname]việc không khởi chạy phiên bản gốc / bản sao hoặc có thể dẫn đến một số lỗi )

Đã thử nghiệm trên API cấp 22

Ngoài ra đối với các vấn đề về bootloop, hãy xem bài đăng khác: Trình giả lập Android: Làm thế nào để tránh vòng lặp khởi động sau khi root? và cập nhật chúng.

Nhận xét

Hầu hết nội dung trong tài liệu tham khảo là dành cho các phiên bản Android cũ hơn và do đó là lý do cho các lệnh và đường dẫn khác nhau mà tôi đã sửa đổi.

Sự nhìn nhận;


1
lưu ý: Để tìm ra bin hoặc xbin làm trong bảng điều khiển trước:> adb shell,> ls / system / xbin / su
djdance

1
@xavier_fakerat vâng, tôi đã dừng cập nhật nhị phân. Vấn đề là, sau mỗi lần khởi động lại, tôi phải khởi động lại máy và chạy su --install && su --daemon&trình giả lập, tiếp theo là setenforce 0để root. Bạn có biết bất kỳ sửa chữa vĩnh viễn cho root khi khởi động lại?
Cristian Holdunu

1
Đẹp! Phương pháp này cũng hoạt động cho các thiết bị thực mà bạn có thể truy cập root thông qua adb.
Mygod

1
Bạn đã trả lời tôi, tại sao trình giả lập Android đóng lại bất ngờ sau khi root hình ảnh khi không sử dụng -writable-system. Đó là vì ảnh chụp nhanh.
Rodrirokr

1
Tôi đang sử dụng Pixel 2 XL: Con người dường như có cùng một vấn đề với các Pixel XL: forum.xda-developers.com/pixel-xl/how-to/...
noraj

33

Dưới đây là danh sách các lệnh bạn phải chạy trong khi trình giả lập đang chạy, tôi thử nghiệm giải pháp này cho một avd trên Android 2.2:

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

Nó giả định rằng nhị phân su nằm trong thư mục làm việc. Bạn có thể tìm thấy su và superuser tại đây: http://forum.xda-developers.com/showthread.php?t=682828 . Bạn cần chạy các lệnh này mỗi khi bạn khởi chạy trình giả lập. Bạn có thể viết một kịch bản khởi chạy trình giả lập và root nó.


15
Vui lòng bao gồm các phần có liên quan của bài viết blog của bạn ở đây. SO là một nơi để trả lời, không phải liên kết.
cHao

2
Không có tệp hoặc thư mục như vậy 'SU'
Mahendran

4
Điều này không hoạt động trên trình giả lập 2.2, 2.3 hoặc 2.3.3 Tôi chỉ gặp lỗi khi đẩy adb: hết bộ nhớ, thư mục không trống, v.v.
Con trỏ Null

2
@mice: Vì lỗi nói rằng bạn không thể đẩy nhị phân vì không có đủ dung lượng trên thiết bị ảo. Khi khởi chạy trình giả lập, bạn có thể thêm -partition-sizetùy chọn để chỉ định kích thước phân vùng. Hãy thử khởi chạy trình giả lập của bạn vớitools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd

2
Trên các trình giả lập mới hơn, lệnh remount có thể không hoạt động, bạn có thể thay thế: adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system bằng: adb root adb remount
Kamran Ahmed

20

Đối với AVD với 5.1.1 và 6.0 tôi đã sử dụng tập lệnh tiếp theo trong windows:

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

Cần UPDATE.zip từ SuperSU. Giải nén chúng vào bất kỳ thư mục. Tạo tập tin bat với nội dung trên. Đừng quên chỉ định kiến ​​trúc và thiết bị cần thiết: set adb=adb -s emulator-5558set arch=x64. Nếu bạn chạy Android trên hoặc bằng 5.0, hãy đổi set pie=thành set pie=.pie. Chạy nó Bạn nhận được root tạm thời cho chạy hiện tại.

Nếu bạn gặp lỗi trên phân vùng hệ thống remount thì bạn cần khởi động AVD từ dòng lệnh. Xem bên dưới bước đầu tiên cho Android 7.

Nếu bạn muốn làm cho nó liên tục - cập nhật nhị phân trong SuperSU và lưu trữ system.img từ thư mục tạm thời thay thế system.img mặc định.

Làm thế nào để chuyển đổi gốc tạm thời kết quả trên một vĩnh viễn

Đầu tiên - nó đi đến SuperSu. Nó cung cấp một nâng cấp nhị phân. Cập nhật theo cách thông thường. Khởi động lại từ chối.

Thứ hai - chỉ liên quan đến các trình giả lập. AVD tương tự. Điểm mấu chốt là những thay đổi trong hình ảnh hệ thống sẽ không được lưu. Bạn cần giữ chúng cho riêng mình.

Đã có hướng dẫn khác nhau cho các trình giả lập khác nhau.

Đối với AVD, bạn có thể cố gắng tìm một tệp system.img tạm thời, lưu nó ở đâu đó và sử dụng khi bạn khởi động trình giả lập.

Trong Windows, nó được đặt trong %LOCALAPPDATA%\Temp\AndroidEmulatorvà có một cái tên giống như TMP4980.tmp.

Bạn sao chép nó vào một thư mục thiết bị avd ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) và đổi tên thành system.img.

Bây giờ nó sẽ được sử dụng khi bắt đầu, thay vì thông thường. Đúng nếu hình ảnh trong SDK được cập nhật, nó sẽ có hình cũ.

Trong trường hợp này, bạn sẽ cần phải loại bỏ điều này system.imgvà lặp lại thao tác tạo ra nó.

Hướng dẫn chi tiết hơn bằng tiếng Nga: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Đối với Android 7, bạn cần chạy các bước bổ sung: 1. Cần chạy trình giả lập thủ công. Chuyển đến thư mục sdk sdk\tools\lib64\qt\lib. Chạy từ trình giả lập thư mục này với các tùy chọn -writable-system -selinux disabled Giống như thế này:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. Bạn cần khởi động lại adbdtừ root:

    giả lập adb -s root-5554

Và hệ thống remount:

adb -s emulator-5554 remount

Nó chỉ có thể được tặng một lần cho mỗi lần chạy giả lập. Và bất kỳ cuộc tái đấu khác có thể phá vỡ chế độ ghi. Bởi vì điều này bạn không cần chạy bất kỳ lệnh nào khác với remount, như mount -o remount,rw /system.

Các bước khác giữ nguyên - tải lên nhị phân, chạy nhị phân như daemon, v.v.

Ảnh từ AVD Android 7 x86 có root: AVD Android 7 x86 đã root


Nếu bạn thấy lỗi về PIE khi thực thi sunhị phân - thì bạn tải lên trình giả lập nhị phân sai. Bạn phải tải lên tệp nhị phân có tên su.piebên trong kho lưu trữ, nhưng trên trình giả lập, nó phải được đặt tên là su, không su.pie.


Bạn có thể cho tôi biết các bước để làm cho root bền bỉ?
Satya

update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Enyby

Tôi đã sử dụng các bước này để lấy system.img từ temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) sao chép system.img này từ temp trong ảnh hệ thống của SDK Android Nhưng khi tôi khởi động lại trình giả lập thì trình giả lập không ở trạng thái root ... Vui lòng hướng dẫn cho tôi đường dẫn chính xác
Satya

sao chép tốt hơn vào thư mục avd. nhưng trước tiên, bạn phải cập nhật nhị phân trong SuperSu ở chế độ bình thường.
Enyby

Tôi đã cập nhật nhị phân ở chế độ bình thường và được sao chép trong thư mục AVD, sau đó root vẫn không tồn tại
Satya

13

Tôi tin rằng cách dễ nhất là tạo bí danh cho lệnh sh, vd

adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Đã thử nghiệm trên Trình giả lập Android 3.0 trở lên.


Điều này cũng làm việc với tôi (trên trình giả lập x86_64 android 5.0) trong khi đề xuất ở trên để cài đặt trong xbin thì không.
Yannick

7
Tôi đã nhậnmount: '/system' not in /proc/mounts
Kenny Wyland

hệ thống thất bại với 72
Duna

3

Đây là gói của tôi với tất cả các bạn cần. Hoặc bạn có thể sử dụng tập lệnh này:

echo on
set device=emulator-5554
set avd_name=
set adb=d:\Poprygun\DevTools\Android\Android-sdk\platform-tools\adb -s %device%
set emulator=d:\Poprygun\DevTools\Android\Android-sdk\emulator\emulator
set arch=x86
set pie=

echo Close all ANDROID emulators and press any key
pause
start %emulator% -avd Nexus_One_API_25 -verbose -writable-system
echo Wait until ANDROID emulator loading and press any key
pause

%adb% start-server
%adb% root
%adb% remount
%adb% shell setenforce 0
%adb% install D:\SuperSU\SuperSU.apk
%adb% push D:\SuperSU\su\%arch%\su.pie /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push D:\SuperSU\su\%arch%\su.pie /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
pause
exit /b

2

Tôi chỉ thay thế và gán các thuộc tính cho su cho ~ / Android / Sdk / system-hình ảnh / android-22 / google_apis / x86 / system.img và bây giờ trên Android 5 Tôi luôn có quyền root ngay cả đối với các hệ thống mới, đủ để cài đặt SuperSu. apk

Android 6 is necessary only
adb root
adb shell
>/system/xbin/su --daemon &
>setenfoce 0

Sau đó, SuperSu.apk thấy root. Nhưng tôi không cập nhật tệp nhị phân


1

Tôi đã sử dụng một phần của phương pháp từ các giải pháp trên; Tuy nhiên, chúng không hoạt động hoàn toàn. Trên phiên bản mới nhất của Andy, điều này làm việc cho tôi:

Trên Andy (Root Shell) [Để nhận, nhấp chuột phải vào biểu tượng HandyAndy và chọn Term Shell]

Trong shell, chạy các lệnh sau:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Sau đó, cài đặt SuperSU và cài đặt nhị phân SU. Điều này sẽ thay thế nhị phân SU chúng ta vừa tạo. (Tùy chọn) Xóa SuperSU và cài đặt Superuser bằng CWM. Cài đặt nhị phân su một lần nữa. Bây giờ, root hoạt động!


1

Tôi đã thử nhiều đề xuất ở trên, bao gồm SuperSU và không thể thực hiện được bất kỳ đề xuất nào nhưng tìm thấy thứ gì đó đơn giản hơn nhiều cho mục đích của tôi. Trong trường hợp của tôi, tôi chỉ muốn có thể chạy sqlite tại dấu nhắc lệnh. Tôi chỉ cần tạo ra một trình giả lập với phiên bản Android (Lollipop) cũ hơn và có quyền truy cập root ngay lập tức.


-1

Tôi thấy rằng trình giả lập API 23 x86_64 mặc định được bắt nguồn theo mặc định.


Từ những gì tôi biết, chỉ vì bạn có # khi bạn nhập "adb root", không có nghĩa là các ứng dụng có thể tận dụng các đặc quyền gốc. Bất kỳ thử nghiệm nào để ghi bất cứ nơi nào trong / hệ thống đều dẫn đến lỗi RO, thậm chí cố gắng ghi lại nó dưới dạng RW.
Fusseldieb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.