ฉันจะติดตั้งเครื่องมือบรรทัดคำสั่งที่หายไปลงในอุปกรณ์ Android ได้อย่างไร


9

การติดตั้ง Android ไม่ได้มีเครื่องมือทั้งหมดที่คาดว่าจะมีในระบบเหมือนยูนิกซ์

ตัวอย่างเช่นตอนนี้ฉันมีอุปกรณ์ที่มีปัญหาซึ่งไม่มีfindยูทิลิตี้ CLI ฉันหมายถึงนี่คือสิ่งที่ฉันได้รับในadb shell:

$ find
/system/bin/sh: find: not found

นอกจากนี้:

$ /system/bin/toolbox find
find: no such tool

อุปกรณ์นี้ใช้ Android 5.0 (รวมถึงการเพิ่มกรรมสิทธิ์โดย LG ฉันเดา) แต่แน่นอนว่าคำถามสำหรับ Android ทุกรุ่นแน่นอน

มีขั้นตอนมาตรฐานสำหรับการติดตั้งเครื่องมือเนทิฟ / CLI (เช่นfind) บน Android หรือไม่ ( ผู้จัดการแพคเกจ? ) และยังไงวิธีการที่ถูกต้องที่สุด?



ใช่อุปกรณ์นี้ถูกรูท แต่มันน่าสนใจที่จะรู้เกี่ยวกับวิธีที่เข้ากันได้ซึ่งไม่ได้หยั่งรากด้วยเช่นกัน :)
ชื่อที่แสดง

คำตอบ:


5

สำหรับอุปกรณ์ Android ที่รูท

คุณสามารถลองติดตั้งแอปBusyBoxโดย Stephen Per Play Store เวอร์ชั่นต่ำสุดของ Android ที่แอพรองรับคือ Android 1.6 และเป็นแอพที่ได้รับการอัพเดท โดยพื้นฐานแล้วมันจะทำการติดตั้งbusybox binary ลงใน/system/xbinและวางsymlinkไว้ในไดเรกทอรีเดียวกันสำหรับยูทิลิตี้ทั้งหมดที่มี

BusyBoxคืออะไร(ไม่ใช่แอป)

BusyBox รวมยูทิลิตี้ยูนิกซ์ทั่วไปหลายรุ่นเข้าด้วยกันในโปรแกรมขนาดเล็ก มันให้การทดแทนสำหรับยูทิลิตี้ส่วนใหญ่ที่คุณมักพบใน GNU fileutils, shellutils เป็นต้นยูทิลิตี้ใน BusyBox มักจะมีตัวเลือกน้อยกว่าลูกพี่ลูกน้อง GNU ที่มีคุณสมบัติครบถ้วน อย่างไรก็ตามตัวเลือกต่าง ๆ ที่รวมอยู่ในนั้นจะมีฟังก์ชั่นที่คาดหวังและมีพฤติกรรมคล้ายกับ GNU BusyBox จัดเตรียมสภาพแวดล้อมที่ค่อนข้างสมบูรณ์สำหรับระบบขนาดเล็กหรือฝังตัว

นี่คือรายการอย่างเป็นทางการของสาธารณูปโภคที่มีให้ findเครื่องมือสามารถพบได้ที่นั่น

ทางเลือกที่เหมาะสมสำหรับ BusyBox คือ Toybox ซึ่งแทนที่ Toolboxในรุ่น Marshmallow

Toyboxคืออะไร

Toybox รวมยูทิลิตี้บรรทัดคำสั่ง Linux ทั่วไปเข้าด้วยกันเป็นไฟล์ปฏิบัติการ BSD ที่ได้รับอนุญาต มันง่ายขนาดเล็กเร็วและสมเหตุสมผลตามมาตรฐาน ( POSIX-2008และLSB 4.1 )

นี่คือรายการสนับสนุนอย่างเป็นทางการของ toybox สาธารณูปโภค BusyBox ในขณะนี้ดูเหมือนจะสนับสนุนเครื่องมือมากกว่า Toybox

ฉันไม่คิดว่ามีแอพที่ติดตั้ง Toybox binary ดังนั้นคุณอาจใช้คำตอบที่นี่เพื่อการติดตั้ง โปรดทราบว่าสามารถใช้คำตอบสำหรับการติดตั้งทั้ง Toybox และ BusyBox สิ่งที่จำเป็นต้องมีเท่านั้นกำลังดาวน์โหลดไบนารีจากแหล่งที่เป็นทางการ

ลิงค์ดาวน์โหลดอย่างเป็นทางการ:

สำหรับอุปกรณ์ Android ที่ไม่ได้รูท

ฉันไม่ทราบว่ามีวิธีการที่เป็นสากลสำหรับ Android ทุกรุ่นหรือไม่ ที่กล่าวว่าสำหรับ Android 4.0 ขึ้นไปติดตั้ง BusyBox (ไม่มีรูท)อ้างว่าใช้งานได้ อาจมีแอปเทอร์มินัลบางตัวที่มาพร้อมกับ BusyBox ไบนารี ฉันไม่ได้ทดสอบแอพพลิเคชั่นเทอร์มินัลส่วนตัวเป็นการส่วนตัว แต่มันง่ายที่จะเข้าใจว่าข้อเสียเปรียบที่ใหญ่ที่สุดของมันคือคุณไม่สามารถใช้แอพเทอร์มินัลใด ๆ.

อย่างไรก็ตามมีวิธีการซึ่งดูเหมือนจะใช้ได้กับ Android ทุกรุ่นที่สูงกว่า 4.2 (จากการทดสอบของฉัน) /data/local/tmpเป็นไดเรกทอรีที่ผู้ใช้สามารถแก้ไขshellได้ adb shellให้สิทธิ์เชลล์ระยะไกลบนอุปกรณ์และเข้าสู่ระบบด้วยผู้ใช้เดียวกัน

สิ่งที่คุณต้องทำคือใส่ BusyBox / Toybox ไบนารีลงใน/data/local/tmpและสร้าง symlink สำหรับยูทิลิตี้ในไดเรกทอรีเดียวกัน คุณสามารถใช้ขั้นตอนต่อไปนี้

(ต้องใช้ ติดตั้งในพีซี)

adb push LOCAL_FILE / data / local / tmp / # แทนที่ LOCAL_FILE ด้วยพา ธ ไฟล์ของ toybox / busybox binary ในพีซี
adb shell
chmod 755 / data / local / tmp / FILE # การตั้งค่าการอนุญาตที่เหมาะสมบนไฟล์ไบนารีที่พุช แทนที่ FILE ด้วยชื่อของไบนารีที่คุณผลักในขั้นตอนแรก แนะนำให้ใช้คำเดียวเป็นชื่อที่มีตัวอักษรตัวพิมพ์เล็กทั้งหมด
box = / data / local / tmp / FILE # ตั้งค่าตัวแปรโลคัลสำหรับการใช้งานในขั้นตอนถัดไป แทนที่ไฟล์ตามความเหมาะสม
$ box | $ box sed 's / \ / \ n / g' | $ box sed '$ d' | ในขณะที่อ่านบรรทัด ทำ $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; เรียบร้อย # เรากำลังดำเนินการไบนารีที่อ้างอิงโดย $ box เพื่อแสดงรายการยูทิลิตี้ทั้งหมดตามด้วยการสร้างรายการจากนั้นสำหรับแต่ละรายการในรายการเราจะสร้าง symlink ในไดเรกทอรี

อิซซี่ได้ให้คำแนะนำมากที่สุดวิธีที่ตรงไปตรงมา symlinks สถานที่สำหรับ BusyBox ไบนารี

adb shell / data / local / tmp / FILE - ติดตั้ง -s / data / local / tmp / # แทนที่ FILE ตามความเหมาะสม - ติดตั้ง - s จะสร้าง symlink ที่ต้องการสำหรับคุณในไดเรกทอรี เส้นทางของไดเรกทอรีนั้นมีให้ถัดจากมัน 

/data/local/tmp/TOOLเครื่องมือที่ทุกคนในขณะนี้สามารถเข้าถึงได้โดยใช้เส้นทางแน่นอน เปลี่ยนเครื่องมือด้วยชื่อยูทิลิตี้ ตัวอย่างการใช้คำสั่ง find find:

adb shell /data/local/tmp/find --help
adb shell /data/local/tmp/FILE find --help   # alternative way of using a tool

สำหรับเซสชันเชลล์เชิงโต้ตอบคุณสามารถเพิ่มตำแหน่งของไฟล์ลงใน $ PATH โดยใช้คำสั่งส่งออก:

ส่งออก PATH = / data / local / tmp: $ PATH # นี่เป็นการขึ้นต้น / data / local / tmp ไปเป็นค่าที่มีอยู่ของ $ PATH การส่งออกจะทำให้แน่ใจว่าเชลล์ย่อยดูค่าเดียวกันใน $ PATH

เสร็จสิ้นตอนนี้คุณสามารถใช้ find หรือยูทิลิตี้ BusyBox / Toybox อื่นในลักษณะนี้

adb shell 
ค้นหา - ช่วย

มีการบันทึกไว้ว่าการเปลี่ยนแปลงใน $ PATH จะใช้งานได้เฉพาะสำหรับเซสชันเชลล์ปัจจุบัน หมายความว่าทุกครั้งที่คุณเปิดเชลล์โดยใช้ adb คุณจะต้องส่งออก $ PATH

ที่กล่าวว่าไม่มีการแก้ปัญหาของ Android อย่างเดียวสำหรับการประชุมเปลือกไม่โต้ตอบอื่นที่ไม่ใช่ของหาวิธีที่จะสร้างตัวแปรที่มีการดำรงอยู่และความคุ้มค่าจะยังคงมีอยู่เกินเชลล์เซสชั่ปัจจุบันในเครื่องคอมพิวเตอร์ของคุณไม่ได้ Android ตัวอย่าง:

adb shell $lolcat   # $lolcat is a temporary variable in my shell on PC and it was assigned the value /system/xbin/toybox. My bash shell is replacing $lolcat with its value and then passing it to adb shell (or you can say, it first expanded the variable and then executed the whole command)

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