根ざした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は、多くの一般的なLinuxコマンドラインユーティリティを単一のBSDライセンスの実行可能ファイルに結合します。シンプルで小さく、高速で、標準にかなり準拠しています(POSIX-2008およびLSB 4.1)。
以下は、toyboxがサポートするユーティリティの公式リストです。現時点では、BusyBoxはToyboxよりも多くのツールをサポートしているようです。
Toyboxバイナリをインストールするためのアプリは存在しないと思うので、インストールの目的でここで私の答えを使用できます。回答は、ToyboxとBusyBoxの両方のインストールに使用できることに注意してください。前提条件は、公式ソースからバイナリをダウンロードすることだけです。
公式ダウンロードリンク:
根ざしていないAndroidデバイスの場合
すべてのAndroidバージョンに共通のアプローチがあるかどうかはわかりません。つまり、Android 4.0以降では、BusyBox Install(No Root)が機能すると主張しています。BusyBoxバイナリに付属している端末アプリがいくつかある場合があります。私はそのような端末アプリを個人的にテストしていませんが、それらの最大の欠点はadbを使用してそれらをうまく活用できないことを理解するのは簡単です。
ただし、4.2を超えるAndroidバージョン(私のテストに基づく)で機能するように見えるアプローチがあります。ユーザー/data/local/tmp
が編集できるディレクトリshell
です。adb shell
デバイスのリモートシェルを許可し、同じユーザーとしてログインします。
あなたがしなければならないのは、BusyBox / Toyboxバイナリを入れ/data/local/tmp
て、同じディレクトリにユーティリティのシンボリックリンクを作成することだけです。これには次の手順を使用できます。
(PCでadbセットアップが必要です。)
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)