В чем разница между системными приложениями и привилегированными приложениями на Android?
Так в 4.3 появилась концепция системных приложений. APK были размещены в/system/app
были даны системные привилегии. Начиная с 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
и было сделано с этим. Это новая концепция, и я думаю, что было бы важно узнать разницу между этими типами приложений для всех, кто занимается разработкой AOSP, начиная с 4.4.