不足しているコマンドラインツールをAndroidデバイスにインストールするにはどうすればよいですか?


9

Androidのインストールには、Unixライクなシステムで期待されるすべてのツールがあるとは限りません。

たとえば、現在、findCLIユーティリティを備えていない問題のあるデバイスがあります。つまり、これは私が中にいる間に得られるものですadb shell

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

また:

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

この特定のデバイスはAndroid 5.0(およびLGによる独自の追加機能)を実行していますが、問題はもちろんすべてのAndroidバージョンに当てはまります。

findAndroidにネイティブ/ CLIツール(など)をインストールするための標準的な手順はありますか?(パッケージマネージャー?)そして、とにかく、最も正しい方法でそれを行う方法は?



はい、このデバイスはルート権限を取得しています。しかし、根付いていない互換性のある方法について知ることも興味深いです。:)
表示名

回答:


5

根ざしたAndroidデバイスの場合

StephenによるBusyBoxアプリのインストールを検討できます。Playストアごとに、アプリでサポートされる最小のAndroidバージョンはAndroid 1.6であり、十分に更新されたアプリです。本質的には、それがインストールbusyboxののにバイナリを/system/xbinして置くシンボリックリンクを、それが持っているすべてのユーティリティのための同じディレクトリに。

BusyBox(アプリではありません)とは何ですか?

BusyBoxは、多くの一般的なUNIXユーティリティの小さなバージョンを1つの小さな実行可能ファイルに結合します。通常、GNU fileutils、shellutilsなどで見つかるほとんどのユーティリティに代わるものを提供します。BusyBoxのユーティリティは、通常、フル機能のGNUのいとこよりもオプションが少なくなっています。ただし、含まれているオプションは期待される機能を提供し、GNUの対応物と非常によく似た動作をします。BusyBoxは、小規模なシステムまたは組み込みシステムにかなり完全な環境を提供します。

ここではそれが提供するユーティリティの公式のリストです。findツールはそこにあります。

BusyBoxの有能な代替品はToyboxで、MarshmallowリリースでToolbox取って代わりました

Toyboxとは何ですか?

Toyboxは、多くの一般的なLinuxコマンドラインユーティリティを単一のBSDライセンスの実行可能ファイルに結合します。シンプルで小さく、高速で、標準にかなり準拠しています(POSIX-2008およびLSB 4.1)。

以下は、toyboxがサポートするユーティリティの公式リストです。現時点では、BusyBoxはToyboxよりも多くのツールをサポートしているようです。

Toyboxバイナリをインストールするためのアプリは存在しないと思うので、インストールの目的でここで私の答えを使用できます。回答は、ToyboxとBusyBoxの両方のインストールに使用できることに注意しください。前提条件は、公式ソースからバイナリをダウンロードすることだけです。

公式ダウンロードリンク:

根ざしていないAndroidデバイスの場合

すべてのAndroidバージョンに共通のアプローチがあるかどうかはわかりません。つまり、Android 4.0以降では、BusyBox Install(No Root)が機能すると主張しています。BusyBoxバイナリに付属している端末アプリがいくつかある場合があります。私はそのような端末アプリを個人的にテストしていませんが、それらの最大の欠点は使用してそれらをうまく活用できないことを理解するのは簡単です。

ただし、4.2を超えるAndroidバージョン(私のテストに基づく)で機能するように見えるアプローチがあります。ユーザー/data/local/tmpが編集できるディレクトリshellです。adb shellデバイスのリモートシェルを許可し、同じユーザーとしてログインします。

あなたがしなければならないのは、BusyBox / Toyboxバイナリを入れ/data/local/tmpて、同じディレクトリにユーティリティのシンボリックリンクを作成することだけです。これには次の手順を使用できます。

(PCでセットアップが必要です。)

adb push LOCAL_FILE / data / local / tmp /#LOCAL_FILEをPCのtoybox / busyboxバイナリのファイルパスに置き換えます
adbシェル
chmod 755 / data / local / tmp / FILE#プッシュされたバイナリファイルに適切な権限を設定します。FILEを、最初のステップでプッシュしたバイナリーの名前に置き換えます。すべて小文字の名前として単一の単語を使用することをお勧めします
box = / data / local / tmp / FILE#次のステップで使用するローカル変数を設定します。必要に応じてFILEを置き換えます
$ box | $ box sed 's / \ / \ n / g' | $ box sed '$ d' | 行を読みながら; $ box ln -sf / data / local / tmp / FILE / data / local / tmp / $ lineを実行します。done#$ boxで参照されるバイナリを実行してすべてのユーティリティをリストし、次にリストを作成してから、リスト内の各アイテムについて、ディレクトリにシンボリックリンクを作成します。

Izzyは、BusyBoxバイナリのシンボリックリンクを配置する最も簡単な方法を推奨しています。

adb shell / data / local / tmp / FILE --install -s / data / local / tmp /#必要に応じてFILEを置き換えます。--install -sは、ディレクトリに目的のシンボリックリンクを作成します。その横にディレクトリのパスが表示されます。 

これらのツールはすべて、絶対パスを使用してアクセスできるようになりました/data/local/tmp/TOOL。TOOLをユーティリティ名に置き換えます。findコマンドの呼び出しの使用例:

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

対話型シェルセッションの場合、エクスポートコマンドを使用して、FILEの場所を$ PATHに追加できます。

export PATH = / data / local / tmp:$ PATH#これは、/ data / local / tmpを$ PATHの既存の値の前に付けます。エクスポートは、サブシェルが$ PATHで同じ値を参照するようにします

これで、findまたは別のBusyBox / Toyboxユーティリティを次のように使用できるようになりました。

adbシェル 
--helpを見つける

$ PATHの変更は、現在のシェルセッションにのみ適用されることに注意してください。つまり、adbを使用してシェルを起動するたびに、$ PATHをエクスポートする必要があります。

つまり、Androidではなく、PCの現在のシェルセッションを超えて存在と値が保持される変数を作成する方法を見つける以外に、非インタラクティブシェルセッションに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用にビルドする必要があります。誰かがまだビルドしておらず、信頼できる信頼できる場所に投稿されていなければ、ダウンロードしてインストールできます。
ファイアロード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.