Làm cách nào để cài đặt các công cụ dòng lệnh bị thiếu trên thiết bị Android?


9

Cài đặt Android không phải lúc nào cũng có tất cả các công cụ mà người ta mong đợi có trên một hệ thống giống như Unix.

Ví dụ, ngay bây giờ tôi có một thiết bị có vấn đề không có findtiện ích CLI. Ý tôi là, đây là những gì tôi nhận được khi ở trong adb shell:

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

Cũng thế:

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

Thiết bị đặc biệt này đang chạy Android 5.0 (cộng với một số bổ sung độc quyền của LG, tôi đoán vậy), nhưng tất nhiên câu hỏi dành cho tất cả các phiên bản Android.

Có quy trình chuẩn để cài đặt các công cụ gốc / CLI (như find) trên Android không? (Một người quản lý gói? ) Và, dù sao, làm thế nào để làm điều đó một cách chính xác nhất?



Có, thiết bị này đã được root. Nhưng thật thú vị khi biết về những cách không tương thích cũng vậy. :)
Tên hiển thị

Câu trả lời:


5

Dành cho thiết bị Android đã root

Bạn có thể xem xét việc cài đặt ứng dụng BusyBox của Stephen. Trên mỗi Play Store, phiên bản Android tối thiểu được ứng dụng hỗ trợ là Android 1.6 và đây là một ứng dụng được cập nhật tốt. Về bản chất, nó cài đặt nhị phân busybox vào /system/xbinvà đặt các liên kết tượng trưng trong cùng thư mục cho tất cả các tiện ích mà nó có.

Là gì BusyBox (không phải là ứng dụng)?

BusyBox kết hợp các phiên bản nhỏ của nhiều tiện ích UNIX phổ biến thành một tệp thực thi nhỏ. Nó cung cấp thay thế cho hầu hết các tiện ích bạn thường tìm thấy trong tập tin GNU, shellutils, v.v ... Các tiện ích trong BusyBox thường có ít tùy chọn hơn so với anh em GNU đầy đủ tính năng của chúng; tuy nhiên, các tùy chọn được bao gồm cung cấp chức năng mong đợi và hoạt động rất giống với các đối tác GNU của chúng. BusyBox cung cấp một môi trường khá hoàn chỉnh cho bất kỳ hệ thống nhỏ hoặc nhúng nào.

Dưới đây là danh sách chính thức của các tiện ích nó cung cấp. findcông cụ có thể được tìm thấy ở đó.

Một thay thế có thẩm quyền cho BusyBox là Toybox, đã thay thế Toolbox trong bản phát hành Marshmallow.

Toybox là gì?

Toybox kết hợp nhiều tiện ích dòng lệnh Linux phổ biến lại với nhau thành một tệp thực thi được cấp phép BSD. Nó đơn giản, nhỏ, nhanh và tuân thủ các tiêu chuẩn hợp lý ( POSIX-2008LSB 4.1 ).

Dưới đây là danh sách chính thức của các tiện ích toybox hỗ trợ. Hiện tại, BusyBox dường như hỗ trợ nhiều công cụ hơn Toybox.

Tôi không nghĩ có một ứng dụng tồn tại để cài đặt nhị phân Toybox, vì vậy bạn có thể sử dụng câu trả lời của tôi ở đây cho mục đích cài đặt. Lưu ý rằng câu trả lời có thể được sử dụng để cài đặt cả Toybox và BusyBox. Chỉ điều kiện tiên quyết là tải xuống nhị phân từ các nguồn chính thức.

Liên kết tải xuống chính thức:

Dành cho thiết bị Android chưa root

Tôi không biết liệu có một cách tiếp cận phổ quát cho tất cả các phiên bản Android hay không. Điều đó nói rằng, đối với Android 4.0 trở lên BusyBox Install (Không root) yêu cầu hoạt động. Có thể có một số ứng dụng đầu cuối đi kèm với nhị phân BusyBox. Tôi đã không thử nghiệm cá nhân bất kỳ ứng dụng thiết bị đầu cuối nào như vậy nhưng thật dễ hiểu rằng nhược điểm lớn nhất của chúng là: bạn không thể sử dụng bất kỳ hoặc sử dụng tốt chúng bằng .

Tuy nhiên, có một cách tiếp cận, dường như hoạt động cho mọi phiên bản Android trên 4.2 (dựa trên các thử nghiệm của tôi). /data/local/tmplà một thư mục có thể được chỉnh sửa bởi shellngười dùng. adb shellcấp cho bạn shell từ xa trên thiết bị và đăng nhập với cùng một người dùng.

Tất cả những gì bạn cần làm là đặt nhị phân BusyBox / Toybox /data/local/tmpvà tạo liên kết tượng trưng cho các tiện ích trong cùng thư mục. Bạn có thể sử dụng các bước sau cho điều đó.

(Yêu cầu thiết lập trong PC.)

adb đẩy LOCAL_FILE / data / local / tmp / # thay thế LOCAL_FILE bằng đường dẫn tệp của nhị phân toybox / busybox trong PC
vỏ adb
chmod 755 / data / local / tmp / FILE # thiết lập quyền thích hợp cho tệp nhị phân được đẩy. Thay thế FILE bằng tên của nhị phân bạn đã đẩy trong bước đầu tiên. Khuyến nghị là sử dụng một từ duy nhất làm tên với tất cả các chữ cái viết thường
box = / data / local / tmp / FILE # thiết lập một biến cục bộ để sử dụng trong bước tiếp theo. Thay thế FILE khi thích hợp
$ hộp | $ hộp sed 's / \ / \ n / g' | $ hộp sed '$ d' | trong khi đọc dòng; làm $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; xong # Chúng tôi đang thực hiện nhị phân được tham chiếu bởi $ box để liệt kê tất cả các tiện ích, sau đó là tạo một danh sách và sau đó cho mỗi mục trong danh sách, chúng tôi đang tạo một liên kết tượng trưng trong một thư mục.

Izzy đã đề xuất cách đơn giản nhất để đặt liên kết tượng trưng cho nhị phân BusyBox .

adb shell / data / local / tmp / FILE --install -s / data / local / tmp / # Thay thế FILE cho phù hợp. --install -s sẽ tạo các liên kết tượng trưng mong muốn cho bạn trong một thư mục. Đường dẫn của thư mục được cung cấp bên cạnh nó. 

Tất cả những công cụ đó bây giờ có thể được truy cập bằng cách sử dụng đường dẫn tuyệt đối /data/local/tmp/TOOL. Thay thế CÔNG CỤ bằng tên tiện ích. Ví dụ sử dụng lệnh gọi find find:

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

Đối với các phiên shell tương tác, bạn có thể thêm vị trí của FILE vào $ PATH bằng lệnh xuất:

export PATH = / data / local / tmp: $ PATH # đây là tiền tố / data / local / tmp vào giá trị hiện có của $ PATH. xuất sẽ đảm bảo rằng các vỏ con nhìn thấy cùng một giá trị trong $ PATH

Xong việc đó, giờ đây bạn có thể sử dụng find hoặc một tiện ích BusyBox / Toybox khác theo cách này:

vỏ adb 
tìm - giúp

Cần lưu ý rằng những thay đổi trong $ PATH chỉ được áp dụng cho phiên shell hiện tại. Điều đó có nghĩa là mỗi khi bạn khởi chạy shell bằng adb, bạn sẽ xuất $ PATH.

Điều đó nói rằng, không có giải pháp nào chỉ dành cho Android cho các phiên shell không tương tác ngoài việc tìm cách tạo biến mà sự tồn tại và giá trị của nó sẽ tồn tại ngoài phiên shell hiện tại trong PC của bạn chứ không phải Android . Thí dụ:

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)

Các công cụ không được tìm thấy trong busybox và toybox, bạn sẽ phải tự xây dựng chúng cho Android, nếu chưa được ai đó xây dựng và đăng ở một vị trí đáng tin cậy mà bạn có thể tin tưởng, có thể tải xuống và cài đặt.
Firelord
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.