2011-12-29 14 views
3

Android OSはNDKコンパイル済みの.apk内でネイティブコードが実行されているアクセス許可をどのように処理しますか? JNIはネイティブ関数を呼び出すだけなので、コードの実際の固有部分はAndroidのアクセス許可の影響を受けてはならないと私には思われます。たとえば、data/systemの下にファイルを書き込むAndroidアプリ(.apk)を開発しようと考えています。 AOSは既にデータ/システムをRWとしてマウントしていますので、書き込みを簡単に実行するネイティブプログラムを開発することができました。私は、NDKを使ってこれを実装すると、ネイティブ実装のためにディレクトリに書き込む権限を設定する必要がないと考えています。この仮定は正しいですか?Android NDKネイティブ権限

おかげで、 デビッド

+0

幸いにも、許可された権限でユーザにアクセスするのは簡単な方法ではありません。あなたの前提は、それらのいくつかに適用されるかもしれませんが、すべてに適用されることはありませ – harism

答えて

1

私の思考は、私はNDKを使ってこれを実装するとき、私は理由ネイティブimplemenationのディレクトリに書き込むための権限を設定する必要はないということです。この仮定は正しいですか?

絶対にありません。アクセス権は、どのプログラミング言語を書いても、プロセスのすべてに影響します。

+0

あなたは詳しく説明できますか?これは、私が知っていることですが、Activity Managerサービスは、アプリケーションが特定のアクティビティのインテントを作成するときに、すべてのアンドロイドパーミッションを適用します。アプリを通じてネイティブコードを実行する場合、どのようにしてこれらのアクセス許可を強制できますか?インテントオブジェクトはJavaレベルの実装にのみ存在するため、ネイティブコードはこのプロセス全体をバイパスします。 また、ネイティブレベルでは、唯一の強制アクセス権がカーネルによって行われているため、特定のUIDとGIDが特定のハードウェアにアクセスすることができなくなったと考えられています。 – David

+0

@David: "Activity Manager Serviceは、与えられた活動の意図 " - いいえ。パーミッションは 'Intents'とはまったく関係ありません。 「これらの権限をどのように実施できますか?」 - 必要な場所で権限が強制されるためです。 「ネイティブレベルでは、特定のUIDとGIDが特定のハードウェアにアクセスするのを妨げるカーネルによって実行される唯一の権限があるとも考えました」 - これが行われている間に、カーネルレベルの権限チェックがたくさんあります「インターネット」)。 – CommonsWare

+0

developer.android.comの続きから、「IntentオブジェクトはContext.startActivity()またはActivity.startActivityForResult()に渡され、アクティビティを起動したり、新しい何かを行うための既存のアクティビティを取得します。 ActivityManagerService.javaを調べた後、AMSはアクティビティを開始するインテントを受け取った後、PackageManageServiceを呼び出して、関連するインテント権限がpackages.xmlにあるかどうかをチェックします。アプリケーションでこのネイティブコードが呼び出されたときにアクティビティが開始されていないことがわかります。そのため、これらのアクセス許可がどのように適用されるかについて詳しく説明できますか? – David

関連する問題