5

su バイナリのみがインストールされている Android フォンを使用していますが、動作します。つまり、adb シェルで電話にアクセスし、「su」コマンドを実行すると、root になります。

コードを介してコマンドを実行しようとすると、どの方法で実行しようとしても機能しないようです。次のコマンドのさまざまなバリエーションを試しました。

Runtime.getRuntime().exec("su -c ps");

Superuser.apk または SuperSU.apk アプリがインストールされている別のルート化された電話でこのコマンドを実行すると、ルート権限での実行を許可するかどうかを尋ねるダイアログが表示されます。apk が存在しない場合、何も要求されず、コマンドが機能しません。

最初の電話にapkをインストールしようとしましたが、何もしないようです. それで、元の質問が尋ねるように-> SUアプリがインストールされていないアプリ内から昇格されたコマンドを実行する方法はありますか?

4

4 に答える 4

6

次のようにコマンドをsuパラメーターとして渡す必要があるためかもしれません:
su -c 'ls -l'
または、へのフルパスを指定する必要があるかもしれませんがsu、あなたが持っているように機能しない理由がわかりません: Runtime.exec("/system/bin/su -c ps")
または多分
Runtime.exec("/system/bin/su -c \'ps\'")

このコマンドの出力も確認してみてください。System.getenv("PATH")

別のバリアントRuntime.exec("su -c \'ls -s \'")
は、実際の の一部であるため、一重引用符をエスケープすることを忘れないでくださいString

これは私が見つけた最も一貫した方法であり、スーパーユーザーまたは SuperSU がインストールされていないデバイスでも機能しました。これらのアプリは、アプリケーションがコマンドを根。@Boardy SuperSU と Superuser はブロードキャストを傍受し、アプリとルート権限の間の仲介者として機能しますが、ルート化されたデバイスには必要ありません。root としてコマンドを実行しているアプリケーションをより詳細に制御したい場合は必要ですが、それでも、どのコマンドではなく、どのアプリケーションに root 権限を与えるかを決定することだけに制限されます。

また、RootTools、より具体的にはRootTools.isAccessGiven()、アプリのルート権限を要求するコマンドを確認することもできます。

ソース: ADB を介して root としてスクリプトを起動する

于 2013-01-20T17:14:41.073 に答える
2

Android の「su」のすべてのバージョンが、コマンド ライン パラメータから実行するコマンドを受け入れるわけではありません。

そうでない場合は、「su」で特権シェルを起動し、その入力ファイル記述子を取得して、コマンドをパイプする必要があります。これは Stackoverflow で何度も取り上げられています。

于 2013-03-16T22:52:42.550 に答える
1

SU アプリをインストールする必要があると思います。これは、アプリを root として実行することを許可するかどうかについてユーザーに質問するものであるためです。

于 2013-01-14T12:53:05.393 に答える