adb shell su ใช้งานได้ แต่ adb root ไม่ทำงาน


93

ฉันรูท Galaxy S3 ที่ปลดล็อคแล้ว (SGH-T999)

ตอนนี้ฉันพยายามเรียกใช้adb rootจากพรอมต์คำสั่งของ Windows แต่ฉันได้รับadbd cannot run as root in production buildsข้อผิดพลาด ดังนั้นสิ่งแรกที่ฉันตรวจสอบคือโทรศัพท์ของฉันถูกรูทจริงหรือไม่?

ฉันจึงลองทำสิ่งต่อไปนี้:

เปิดพร้อมรับคำสั่ง

$adb devices // lists my device
$adb shell //goes to shell
$su // opens a 'SuperSu' prompt on my phone and I 'Grant' permission
# // Before following the rooting instructions, I was getting 'no su command found' in the previous step. So, I believe my phone is ROOTED. **Correct me if I'm wrong.**

อย่างไรก็ตามเมื่อฉันทำadb rootฉันได้รับadbd cannot run as root in production buildsข้อผิดพลาด ดังนั้นฉันคิดว่าฉันอาจต้องทำบางอย่างเพิ่มเติมนอกเหนือจากที่ฉันทำข้างต้น ฉันลองวิธีแก้ปัญหาทั้งหมดในคำถาม SO ต่อไปนี้:

ข้างต้นไม่ได้ผลสำหรับฉัน สิ่งที่พวกเขาทำคือให้การเข้าถึง ROOT ภายใน SHELL ฉันต้องการadb rootทำงานเพื่อให้สามารถรันคำสั่ง adb ต่างๆได้โดยไม่ต้องเข้าเชลล์


5
ไม่ทำงานใน Android> 4.3 su หายไป
drdrej

คำตอบ:


35

โดยadb rootคำสั่งออกแบบจะทำงานในการสร้างการพัฒนาเท่านั้น (กล่าวคือengและuserdebugซึ่งมีro.debuggable=1โดยค่าเริ่มต้น) ดังนั้นเพื่อให้สามารถใช้adb rootคำสั่งบนมิฉะนั้นคุณหยั่งรากอุปกรณ์เพียงเพิ่มro.debuggable=1บรรทัดที่หนึ่งของแฟ้มต่อไปนี้:

/system/build.prop
/system/default.prop
/data/local.prop

หากคุณต้องการadb shellเริ่มต้นrootโดยค่าเริ่มต้นให้เพิ่มro.secure=0ด้วย

หรือคุณสามารถใช้adbdไบนารีที่แก้ไขได้(ซึ่งไม่ได้ตรวจสอบro.debuggable)

จากhttps://android.googlesource.com/platform/system/core/+/master/adb/daemon/main.cpp

#if defined(ALLOW_ADBD_ROOT)
// The properties that affect `adb root` and `adb unroot` are ro.secure and
// ro.debuggable. In this context the names don't make the expected behavior
// particularly obvious.
//
// ro.debuggable:
//   Allowed to become root, but not necessarily the default. Set to 1 on
//   eng and userdebug builds.
//
// ro.secure:
//   Drop privileges by default. Set to 1 on userdebug and user builds.

9
ฉันจะรวบรวมไฟล์ปฏิบัติการข้างต้นได้ที่ไหน?
Waqas Bukhary

3
ฉันเพิ่มค่าใหม่สำหรับ ro.debuggable และ ro.secure ให้กับไฟล์ที่คุณระบุ แต่ยังคงถูกเขียนทับทุกครั้งที่รีบูตและการเปลี่ยนแปลงจะไม่มีผลใด ๆ
Patryk Czachurski

31

ในรอมมิตรกับนักพัฒนาบางอย่างที่คุณเพียงแค่สามารถเปิดใช้งานเข้าถึงรากในการตั้งค่า> ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์> เข้าถึงราก หลังจากนั้นadb rootจะพร้อมใช้งาน น่าเสียดายที่มันใช้ไม่ได้กับ ROM หุ้นส่วนใหญ่ในตลาด


64
ฉันไม่เห็นตัวเลือก "การเข้าถึงรูท" ในตัวเลือกการพัฒนา
Amalgovinus

2
@Amalgovinus ฉันคิดว่ามันขึ้นอยู่กับว่าคุณใช้ห้องไหน :)
NgaNguyenDuy

@NgaNguyenDuy คุณช่วยระบุรอมที่คุณใช้อยู่ได้ไหม?
Lobster Fighter

22

ฉันพบปัญหานี้เมื่อพยายามรูทโปรแกรมจำลองฉันพบว่าเป็นเพราะฉันใช้งานโปรแกรมจำลอง Nexus 5x ซึ่งมี Google Play อยู่ สร้างโปรแกรมจำลองอื่นที่ไม่มี Google Play และadb rootจะรูทอุปกรณ์ให้คุณ หวังว่านี่จะช่วยใครบางคนได้


เราจะแยกความแตกต่างของโปรแกรมจำลองทั้งสองได้อย่างไร
Sanjay

@Sanjay เมื่อคุณเปิดตัวจัดการอุปกรณ์เสมือน Android คุณจะเห็นแท็บสำหรับ Play Store และคุณต้องการตรวจสอบให้แน่ใจว่าไม่มีไอคอน Play Store ปรากฏบนอุปกรณ์ที่คุณพยายามรูท
Andrew Steinmetz

1
ปี 2020 สิ่งนี้ช่วยฉันได้ แต่ฉันต้องการวิธีทำบนอุปกรณ์ที่เปิดใช้งาน play store โดยไม่ต้องใช้โทรศัพท์รูท แต่ไม่แน่ใจว่าเป็นไปได้หรือไม่
ริกเกอร์

8

ฉันใช้สำหรับเข้าสู่โหมด su ใน abd เชลล์

adb เชลล์ "su"


2
ใน Mac OS ฉันได้รับข้อผิดพลาด "/ system / bin / sh: su: not found" ข้อเสนอแนะใด ๆ กรุณา?
Sachin G

@SachinG บางทีคุณอาจใช้คำพูดผิดประเภท? ลองรันสิ่งนี้adb shell "su -c whoami"
gkpln3

@ gkpln3 ยังคงได้รับข้อผิดพลาดเดียวกัน / system / bin / sh: su: not found
Sachin G

8

ฉันมี Samsung Galaxy Trend Plus (GT-S7580) ที่รูทแล้ว

การเรียกใช้ 'adb root' ทำให้ฉันมีข้อผิดพลาด 'adbd ไม่สามารถทำงานเป็นรูทในบิลด์การผลิต' เดียวกัน

สำหรับอุปกรณ์ที่มีตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ -> การเข้าถึงระดับรากให้เลือก "ADB เท่านั้น" เพื่อให้สิทธิ์การเข้าถึงระดับรากของ adb ไปยังอุปกรณ์ (ตามคำแนะนำของNgaNguyenDuy )

แล้วพยายามที่จะเรียกใช้คำสั่งตามวิธีการที่เปิดตัวสคริปต์เป็นรากผ่าน ADB ในกรณีของฉันฉันแค่ต้องการเรียกใช้คำสั่ง 'netcfg rndis0 dhcp' และฉันทำวิธีนี้:

adb shell "su -c netcfg rndis0 dhcp"

โปรดตรวจสอบว่าคุณทำผิดพลาดหรือไม่ในขณะที่เรียกใช้ด้วยวิธีนี้

หากยังไม่ได้ผลให้ตรวจสอบว่าคุณรูทอุปกรณ์อย่างถูกต้องหรือไม่ หากยังไม่มีโชคลองติดตั้ง ROM แบบกำหนดเองเช่นCyanogen Modเพื่อให้ 'adb root' ทำงาน


7

คุณต้องเปลี่ยนไบนารี adbd ในโฟลเดอร์ boot.img / sbin / เป็นโฟลเดอร์ที่สามารถใช้งานได้ คุณจะต้องทำการแก้ไข default.prop ด้วย

ดูเหมือนว่า Samsung จะทำสิ่งนี้ได้ยากกว่าผู้ขายรายอื่น ฉันมีไบนารี adbd ที่คุณสามารถลองได้ แต่จะต้องมีความรู้ในการเลิกคอมไพล์และคอมไพล์ boot.img ใหม่ด้วยไบนารีใหม่ นอกจากนี้หากคุณมี bootloader ที่ถูกล็อก ... สิ่งนี้จะไม่เกิดขึ้น

นอกจากนี้ Chainfire ยังมีแอพที่จะให้สิทธิ์ root adbd ใน play store: https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=th

สุดท้ายนี้หากคุณกำลังพยายามเขียนสคริปต์ windows ด้วยสิทธิ์ SU คุณสามารถซื้อสิ่งนี้ได้โดยใช้สไตล์คำสั่งต่อไปนี้ ... อย่างไรก็ตามอย่างน้อยคุณจะต้องให้สิทธิ์ (ทางโทรศัพท์) SU ในช่วงเวลาที่เริ่มทำงาน .. .

adb shell "su -c ls" <-list working directory พร้อมสิทธิ์ su adb เชลล์ "su -c echo anytext> /data/test.file"

นี่เป็นเพียงตัวอย่างบางส่วน หากคุณระบุเฉพาะสิ่งที่คุณพยายามทำให้สำเร็จฉันอาจให้คำแนะนำที่เฉพาะเจาะจงมากขึ้นได้

-scosler


5

adbdมีการรวบรวมธง / ALLOW_ADBD_ROOT=1ตัวเลือกที่จะช่วยให้การเข้าถึงราก:

สูงสุด Android 9: หากadbdคอมไพล์บนอุปกรณ์ของคุณโดยไม่มีการตั้งค่าสถานะนั้นจะมีสิทธิ์ลดลงเสมอเมื่อเริ่มต้นระบบดังนั้น "adb root" จะไม่ช่วยอะไรเลย ผมต้องแก้ไขสายไปsetuid(), setgid(), setgroups()และความสามารถในการหยดออกมาจากไบนารีตัวเองจะได้รับการฝังราก adbd ถาวรบนอ่าน ebook ของฉัน

ด้วย Android 10 สิ่งนี้เปลี่ยนไป เมื่อปลดล็อกโทรศัพท์ / แท็บเล็ตแล้ว ( ro.boot.verifiedbootstate == "orange") โหมดราก adb จะเป็นไปได้ในทุกกรณี


1

หากคุณจำเป็นต้องADBใช้งานเป็นrootจริงวิธีที่เร็วและง่ายที่สุดคือการติดตั้ง Android ROM ที่กำหนดเองและที่นิยมมากที่สุดคือCyanogenModมีRoot Accessตัวเลือกในเมนูตัวเลือกสำหรับนักพัฒนาซึ่งคุณสามารถเลือกให้สิทธิ์การเข้าถึงรูapps and ADBท ฉันเคยใช้ CM มาก่อน แต่เนื่องจากไม่ได้รับการพัฒนาอีกต่อไปฉันจึงพยายามมองหาวิธีแก้ปัญหาที่นั่น แม้ว่า CyanogenMod จะยังคงเป็นทางเลือกที่ดีเพราะไม่มี bloatware

อีกทางเลือกหนึ่งที่ผมพบจากเพื่อนที่ใช้adbd insecureapp ที่คุณอาจจะลองจากที่นี่: https://forum.xda-developers.com/showthread.php?t=1687590 ในกรณีของฉันมันใช้งานได้กับเคอร์เนลที่กำหนดเองของ Android แต่ไม่ใช่กับ ROM หุ้นของ Android (vanilla android เท่านั้น) คุณอาจลองใช้ทางเลือกอื่นเช่นการแก้ไขboot.imgROM Android

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.