2017-10-29 10 views
1

私のPC上のシェルから、adb shell cmd package list packagesを実行して、インストールされているすべてのパッケージのリストを取得できます。私は端末エミュレータ(現在はTermuxを使用しています)でAndroid端末(Nexus 6P)でこれと同様のコマンドをローカルに実行したいと思います。Androidデバイスの端末エミュレータで「adbシェル」コマンドをローカルで実行するにはどうすればよいですか?

/system/bin/shで同じシェルを開き、次に/system/bin/cmd package list packagesを実行しようとすると、何も起こりません(エラーはなく、何も出力せず、プロンプトを再ロードします)。

/system/bin/cmd -lを実行すると、オプションの一覧が期待どおりに表示されます。 $PATH$LD_LIBRARY_PATHは両方の環境で同じです。主な違いの1つはecho $USERadb shellから "shell"を返しますが、私のローカルユーザー名は/system/bin/shからTermuxから起動されます。

Androidのローカル端末エミュレータでadb shellから実行されるコマンドの動作を複製する方法はありますか?

編集: 私のデバイスはrootedであり、私はrootのみのソリューションでOKです。

+0

あなたが参照することがあり、それ自身のsushシェルではなく、システムのシェルを使用するように指示し、適切なSELinuxのコンテキストを設定してログインするtructs –

+0

リンクありがとうございます。しかし、私はリンクが実際に私が望むものの逆をしようとしていると思う:adbからtermuxの動作をエミュレートする。私は実際には、デバイス上でローカルに実行されているシェルで 'adb shell'から実行されるコマンドの動作をエミュレートしたいと考えています。私の混乱は、同じバイナリを同じデバイス上で使って同じバイナリを実行していて、別の出力を得ていることです(技術的にはローカルで実行すると出力がありません)。 – rjdang

答えて

0

私は便利根ざしヌガーデバイスを持っていないが、次のようなものは、(あなたはSuperSUを使用していると仮定した場合)adb shellに近い十分に近似することがあります。

env -i USER=shell "$(which su)" shell --context u:r:shell:s0 --shell /system/bin/sh --command COMMAND 

私は(非常に簡単に)それをテストTermuxから根っこのマシュマロ装置で。 -iフラグが

  • USER=shellが特に必要とされていない空の環境で起動するために使用される

    • ますが、何らかの理由でTermuxが使用するenvのバージョンは、設定する必要があります:

      は詳しく説明しあなたは

    • shellインを好む場合は少なくとも一つの可変
    • $(which su)お使いのデバイス上のsuバイナリの完全パスにポイントとは、ハードコードすることができますsuバイナリは、シェルのユーザー(adb shellと同じ)
    • --context u:r:shell:s0
    • --shell /system/bin/shはSuperSUは
  • +0

    詳細な対応をありがとうございます。私はこれらの設定/コマンドのいくつかについて知らなかった。私はMagiskをrootに使っていますが、rootは正常に動作しているようです。残念ながら、このコマンドは少なくとも "cmd"コマンドの場合と同じ結果を返します。それはただ何も返しません。 Nougatを実行しているNexus 5xを試して、それがデバイスではないことを確認しました。同じ結果: 'adb shell'で動作し、あなたのコマンドでTermuxのヌルで動作します。ノーガットに導入された変更でなければなりませんか? – rjdang

    関連する問題