8

ソースから Android ROM をコンパイルしています。プリインストールして root 権限で実行したいアプリケーションが 1 つあります。

ROM全体をroot化せずに、この特定のアプリケーションにrootアクセスを許可するにはどうすればよいですか?

4

1 に答える 1

10

うまくいけば、ルートは必要ありません...

典型的なストック Android ROM は、最小権限の原則に沿って、ごくわずかなものに root 権限を提供します。代わりに、アプリには必要な正確なアクセス許可が付与されます。

このアプリにルート権限が必要なのはなぜですか? 最初に、公開されていないすべての内部 Android 権限のリストを調べて、それらのいずれかが目的の機能を果たしているかどうかを確認する必要があります。システム アプリを構築してsignatureいるため、通常は他のアプリでは使用できないアクセス許可を使用することもできます。Android ROM のビルドに使用したキーでアプリが署名されていることを確認するだけで済みます。その後、ROM と一緒に、または個別にアプリを配布することができ、必要なアクセス許可に引き続きアクセスできます。

このようにする利点は次のとおりです。

  • アプリが侵害されているかバグがある場合、影響は限定的です。
  • 実際の Java コードにはこれらのアクセス許可があるため、面倒なコマンド ラインを作成する必要はありません。

したがって、この方法でタスクを実行できる場合は、実行してください。

でも本当にそうなら…

本当に root が必要な場合、事態は複雑になります。

3 つのオプションがあります。優先順:

  • 新しいシステム サービスを追加します。
  • 必要なことだけを行う別の setuid-root バイナリを追加します。
  • suバイナリを変更して、誰が呼び出しているかを正確に確認します。

本当にルートが必要な場合は、新しいシステム サービスを追加します。これはルートとして実行できます。次に、適切な追加の API を追加して、アプリが呼び出すことができるようにします。また、アクセス許可をsignatureレベルに設定して、システム アプリのみが呼び出すことができるようにします。これは、Android ランドでそれを行うアーキテクチャ上「正しい」方法です。

2 番目または 3 番目のオプションでは、必要なコマンド ライン ツールを作成する必要があります。どのアプリでもこの機能を呼び出せるようにすることが許容される場合があります。もしそうなら、新しい setuid-root 実行可能ファイルが良い方法かもしれません。ただし、私が言うように、それを実行している他のアプリを停止する方法がわかりません。

于 2013-04-25T17:04:37.053 に答える