В чем разница между системными приложениями и привилегированными приложениями на 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");
            }
...

Это влияет на приоритет любых действий, которые не определены как системные приложения. Это означает, что вы не можете добавить действие в менеджер пакетов, которыйs приоритет выше 0, если вы не системное приложение. Это делаетне насколько я могу судить, исключить привилегированные приложения (здесь много логики, я могу ошибаться).

У меня вопрос, что именно это означает? Если мое приложение будет привилегированным, но не системным, что это изменит? ВPackageManagerService Вы можете найти различные вещи, которые отличаются между системными и привилегированными приложениями, но они не совсем одинаковы. За привилегированными приложениями должна быть какая-то идеология, иначе они просто сказали бы:

if locationIsPrivileged: app.flags |= FLAG_SYSTEM

и было сделано с этим. Это новая концепция, и я думаю, что было бы важно узнать разницу между этими типами приложений для всех, кто занимается разработкой AOSP, начиная с 4.4.

Ответы на вопрос(1)

Ваш ответ на вопрос