Bagaimana cara menginstal alat baris perintah yang hilang ke perangkat Android?

9

Instalasi Android tidak selalu memiliki semua alat yang diharapkan pada sistem seperti Unix.

Sebagai contoh, saat ini saya memiliki perangkat bermasalah yang tidak memiliki findutilitas CLI. Maksud saya, inilah yang saya dapat saat adb shell:

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

Juga:

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

Perangkat khusus ini menjalankan Android 5.0 (ditambah beberapa penambahan kepemilikan oleh LG, saya kira), tetapi pertanyaannya adalah untuk semua versi Android, tentu saja.

Apakah ada prosedur standar untuk menginstal alat asli / CLI (seperti find), di Android? (Seorang manajer paket? ) Dan, bagaimana pun juga, bagaimana melakukannya dengan cara yang paling benar?

Nama tampilan
sumber
Ya, perangkat ini di-root. Tetapi menarik juga untuk mengetahui tentang cara-cara yang tidak kompatibel dengan akar rumput. :)
Nama Tampilan

Jawaban:

5

Untuk perangkat Android yang di-rooting

Anda dapat mempertimbangkan menginstal aplikasi BusyBox oleh Stephen. Per Play Store, versi Android minimum yang didukung oleh aplikasi adalah Android 1.6 dan ini adalah aplikasi yang diperbarui dengan baik. Intinya, ia menginstal binary busybox ke /system/xbindan menempatkan symlink di direktori yang sama untuk semua utilitas yang dimilikinya.

Apa itu BusyBox (bukan aplikasi)?

BusyBox menggabungkan versi kecil dari banyak utilitas UNIX umum menjadi satu executable kecil. Ini memberikan penggantian untuk sebagian besar utilitas yang biasanya Anda temukan di GNU fileutils, shellutils, dll. Utilitas di BusyBox umumnya memiliki lebih sedikit pilihan daripada sepupu GNU berfitur lengkap mereka; namun, opsi yang disertakan menyediakan fungsionalitas yang diharapkan dan berperilaku sangat mirip dengan rekan-rekan GNU mereka. BusyBox menyediakan lingkungan yang cukup lengkap untuk sistem kecil atau tertanam.

Berikut adalah daftar utilitas resmi yang disediakannya. findAlat dapat ditemukan di sana.

Alternatif kompeten untuk BusyBox adalah Toybox, yang telah menggantikan Toolbox dalam rilis Marshmallow.

Apa itu Toybox ?

Toybox menggabungkan banyak utilitas baris perintah Linux bersama menjadi satu executable berlisensi BSD. Ini sederhana, kecil, cepat, dan cukup sesuai standar ( POSIX-2008 dan LSB 4.1 ).

Berikut adalah daftar resmi dari utilitas toybox. BusyBox, saat ini, tampaknya mendukung lebih banyak alat daripada Toybox.

Saya tidak berpikir ada aplikasi untuk menginstal biner Toybox, jadi Anda dapat menggunakan jawaban saya di sini untuk tujuan pemasangannya. Perhatikan bahwa jawabannya dapat digunakan untuk pemasangan Toybox dan BusyBox. Hanya prasyarat yang mengunduh biner dari sumber resmi.

Tautan unduhan resmi:

Untuk perangkat Android yang tidak di-root

Saya tidak tahu apakah ada pendekatan universal untuk semua versi Android. Yang mengatakan, untuk Android 4.0 dan lebih tinggi BusyBox Install (No Root) mengaku berfungsi. Mungkin ada beberapa aplikasi terminal yang dilengkapi dengan biner BusyBox. Saya belum secara pribadi menguji aplikasi terminal semacam itu tetapi mudah untuk memahami bahwa kelemahan terbesar mereka adalah: Anda tidak dapat menggunakan atau menggunakan mereka dengan baik menggunakan .

Namun ada pendekatan, yang tampaknya berfungsi untuk semua versi Android di atas 4.2 (berdasarkan tes saya). /data/local/tmpadalah direktori yang dapat diedit oleh shellpengguna. adb shellmemberi Anda shell jarak jauh pada perangkat dan masuk sebagai pengguna yang sama.

Yang harus Anda lakukan adalah memasukkan binary BusyBox / Toybox /data/local/tmpdan membuat symlink untuk utilitas di direktori yang sama. Anda dapat menggunakan langkah-langkah berikut untuk itu.

(Membutuhkan pengaturan di PC.)

adb push LOCAL_FILE / data / local / tmp / # ganti LOCAL_FILE dengan path file toybox / busybox binary di PC
adb shell
chmod 755 / data / local / tmp / FILE # mengatur izin yang sesuai pada file biner yang didorong. Ganti FILE dengan nama biner yang Anda dorong di langkah pertama. Disarankan untuk menggunakan satu kata sebagai nama dengan semua huruf kecil
box = / data / local / tmp / FILE # mengatur variabel lokal untuk penggunaan pada langkah berikutnya. Ganti FILE jika perlu
$ box | $ box sed 's / \ / \ n / g' | $ box sed '$ d' | saat membaca baris; lakukan $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ line; selesai # Kami mengeksekusi biner yang dirujuk oleh $ box untuk mendaftar semua utilitas, diikuti dengan pembuatan daftar dan kemudian untuk setiap item dalam daftar, kami membuat symlink di direktori.

Izzy merekomendasikan cara paling mudah untuk menempatkan symlink untuk biner BusyBox .

adb shell / data / local / tmp / FILE --install -s / data / local / tmp / # Ganti FILE yang sesuai. --install -s akan membuat symlink yang diinginkan untuk Anda di direktori. Jalur direktori disediakan di sebelahnya. 

Semua alat itu sekarang dapat diakses menggunakan jalur absolut /data/local/tmp/TOOL. Ganti ALAT dengan nama utilitas. Contoh penggunaan perintah find calling:

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

Untuk sesi shell interaktif, Anda dapat menambahkan lokasi FILE ke $ PATH menggunakan perintah ekspor:

export PATH = / data / local / tmp: $ PATH # ini adalah awalan / data / lokal / tmp ke dalam nilai $ PATH yang ada. ekspor akan memastikan bahwa sub-shell melihat nilai yang sama dalam $ PATH

Selesai itu, kini Anda dapat menggunakan find atau utilitas BusyBox / Toybox lainnya dengan cara ini:

adb shell 
temukan --help

Perlu dicatat bahwa perubahan dalam $ PATH hanya berlaku untuk sesi shell saat ini. Ini berarti bahwa setiap kali Anda meluncurkan shell menggunakan adb, Anda harus mengekspor $ PATH.

Oleh karena itu, tidak ada solusi Android untuk sesi shell non-interaktif selain menemukan cara untuk membuat variabel yang keberadaan dan nilainya akan bertahan di luar sesi shell saat ini di PC Anda, bukan Android . Contoh:

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)
Firelord
sumber
Alat yang tidak ditemukan di busybox dan toybox, Anda harus membuatnya sendiri untuk Android, jika belum dibangun oleh seseorang dan diposting di lokasi yang dapat dipercaya yang dapat Anda percayai, dapat unduh dan instal.
Firelord