web-dev-qa-db-ja.com

Android SDKを使用してルート権限を取得するにはどうすればよいですか?

私はAndroidプログラミングを学んでおり、rootとして実行する必要があるアプリケーションを作成したいと考えています。論理的なことは、Androidマニフェストにルート権限を追加することです。

私は このリンク をドキュメントで見ました。特に注意しました FACTORY_TESTパーミッション

public static final String FACTORY_TEST

以来:APIレベル1

製造元のテストアプリケーションとして実行し、rootユーザーとして実行します。デバイスがメーカーテストモードで実行されている場合にのみ使用できます。定数値: "Android.permission.FACTORY_TEST"

それが最善の方法ですか?

SDKを使用できない場合、「ルート」アプリケーションを機能させるにはどうすればよいですか?

22
Rob

あなたがする必要があるのは次のようなものです:

Process root = Runtime.getRuntime().exec("su");

これにより、スーパーユーザーが表示され、ルートアクセスを許可またはブロックできます。ユーザーがルート化されていない場合、このアプローチは機能しない可能性があります。 ここ は、テストする方法です。

30
Mohit Deshpande

最初に、基本を正しく理解します。 Android下でLinuxカーネルを実行します。スーパーユーザー権限でプロセスを実行する必要がある場合(rootとして実行する場合)、プロセスを実行する唯一の方法はcommand lineこれは、カーネルと直接対話する唯一の方法であるためです。また、コマンドを実行する前にsuを使用する必要があります。

Process process = Runtime.getRuntime().exec("su");

ほとんど何も達成しません。ダイアログを使用してスーパー使用特権を要求するだけです。できることは、単にsuを実行する代わりに、次のようにsuでプロセスを実行することです。

Process process = Runtime.getRuntime().exec(new String[] { "su", "-c", yourCommand});

-cオプション

Suのいくつかのオプションで最もよく使用されるのは、su to execute the command that directly follows it on the same lineを示す-cです。そのようなコマンドは新しいユーザーとして実行され、コマンドの実行が完了した後、または起動したプログラムが閉じられた後、suが実行されたターミナルウィンドウまたはコンソールはすぐに元のユーザーのアカウントに戻ります。 詳細

代替オプション

上記の方法に代わるもう1つの方法は、コマンドラインを使用してアプリを/system/app/ディレクトリにコピーすることです。その後、アプリケーションはルート権限で自動的に実行されます(システムアプリと同じ)

14
Aniket Thakur

SDKには、ルートとしてアプリを実行する方法はありません。

9
Romain Guy