Androidにおけるシステムアプリと特権アプリの違いは何ですか?
質問
4.3 では、システム アプリケーションという概念がありました。APK は
/system/app
に配置された APK にはシステム特権が与えられていました。4.4では、新しい概念として、"特権アプリ"が存在します。特権アプリは
/system/priv-app
ディレクトリに格納され、異なる方法で扱われるようです。AOSPのソースコードを見てみると
PackageManagerService
の下に、次のような新しいメソッドがあるのがわかるでしょう。
static boolean locationIsPrivileged(File path) {
try {
final String privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app")
.getCanonicalPath();
return path.getCanonicalPath().startsWith(privilegedAppDir);
} catch (IOException e) {
Slog.e(TAG, "Unable to access code path " + path);
}
return false;
}
では、これらが異なる場合の例です。
public final void addActivity(PackageParser.Activity a, String type) {
...
if (!systemApp && intent.getPriority() > 0 && "activity".equals(type)) {
intent.setPriority(0);
Log.w(TAG, "Package " + a.info.applicationInfo.packageName + " has activity "
+ a.className + " with priority > 0, forcing to 0");
}
...
これは、システムアプリケーションとして定義されていないすべてのアクティビティの優先度に影響します。これは、システム アプリケーションでない限り、優先順位が 0 よりも高いアクティビティをパッケージ マネージャーに追加できないことを意味しているようです。これは ではなく は特権アプリを除外します (ここには多くの論理があり、私は間違っているかもしれません。)。
私の質問は、これは正確に何を意味するのでしょうか。私のアプリが特権的であっても、システムではない場合、どのような違いがあるのでしょうか? では
PackageManagerService
には、システム アプリと特権アプリの違いを示すさまざまなものがありますが、それらはまったく同じものではありません。特権アプリの背後には何らかの思想があるはずで、そうでなければただ言っただけでしょう。
if locationIsPrivileged: app.flags |= FLAG_SYSTEM
とされています。これは新しい概念で、4.4の時点でAOSP開発をしている人は、この種のアプリの違いを知っておくことが重要だろうと思うのです。
どのように解決するのか?
いくつかの調査の結果、priv-app にあるアプリはシステム アクセス許可を得る資格があり、古いアプリが system-app にあることでシステム アクセス許可を主張する資格があったのと同じであることが明らかになりました。この件に関する Google の公式文書は、コミットメッセージの形でしか見つかりませんでした。 コミット ハッシュ: ccbf84f44c9e6a5ed3c08673614826bb237afc54
あるシステム アプリは他のシステム アプリより
signatureOrSystem" 権限は、/system パーティションに存在するすべてのアプリで使用できなくなりました。 権限は、もはや /system パーティションに存在するすべてのアプリにはありません。 その代わりに、新しい その代わりに、/system/priv-app ディレクトリが新たに作成され、そのディレクトリに APK があるアプリのみが signatureOrSystem の使用を許可されます。 ディレクトリにある APK を持つアプリのみが、プラットフォーム証明書を共有せずに signatureOrSystem パーミッションの使用を許可されます。 プラットフォーム証明書を共有することなく、signatureOrSystem パーミッションの使用が許可されます。これにより、システムバンドルが悪用される可能性があるアプリの表面積が これにより、システムにバンドルされたアプリケーションを悪用して、パーミッションで保護された操作にアクセスしようとする可能性のある表面領域を減らすことができます。 これにより、システムにバンドルされたアプリケーションが、パーミッションで保護された操作にアクセスするために悪用される可能性がある表面を減らすことができます。
ApplicationInfo.FLAG_SYSTEM フラグは、ドキュメントに書かれているとおりの意味を持ち続けています。 アプリケーション apk が /system パーティにバンドルされたことを示します。 アプリケーション apk が /system パーティションにバンドルされていることを示します。 新しい隠しフラグFLAG_PRIVILEGEDが導入されました。 これらのパーミッションにアクセスする実際の権利を反映する、新しい隠しフラグ FLAG_PRIVILEGED が導入されました。 パーミッションにアクセスする実際の権利を反映する新しい隠しフラグが導入されました。
更新: Android 8.0 の priv-app は、Privileged Permission Whitelisting が追加され、若干変更されました。priv-app に入っているだけでなく、さまざまなシステム権限を得るために、アプリをホワイトリストに追加する必要があります。これに関する情報は、こちらを参照してください。 https://source.android.com/devices/tech/config/perms-whitelist
関連
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] match_parentとfill_parentの違いは何ですか?
-
[解決済み] compileSdkVersionとtargetSdkVersionの違いは何ですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】Android : invisibleとgoneの違い?
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] Android APKファイルの中身を見るには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] キャンバスに複数行のテキストを描画する
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信