Jaka jest różnica między aplikacjami systemowymi a uprzywilejowanymi aplikacjami na Androida?

W 4.3 pojawiła się koncepcja aplikacji systemowych. APK, które zostały umieszczone w/system/app otrzymały uprawnienia systemowe. Od wersji 4.4 istnieje nowa koncepcja „aplikacji uprzywilejowanej”. Uprzywilejowane aplikacje są przechowywane w/system/priv-app katalog i wydają się być traktowane inaczej. Jeśli spojrzysz na kod źródłowy AOSP, podPackageManagerService, zobaczysz nowe metody, takie jak

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;
}

Oto przykład sytuacji, w której się różnią.

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");
            }
...

Wpływa to na priorytet wszelkich działań, które nie są zdefiniowane jako aplikacje systemowe. To wydaje się sugerować, że nie możesz dodać aktywności do menedżera pakietów, którego priorytet jest wyższy niż 0, chyba że jesteś aplikacją systemową. To robinie wykluczam uprzywilejowane aplikacje, o ile mogę to powiedzieć (jest tu dużo logiki, mogę się mylić.).

Moje pytanie brzmi: co to dokładnie oznacza? Jeśli moja aplikacja jest uprzywilejowana, ale nie systemowa, jakie to będzie miało znaczenie? WPackageManagerService można znaleźć różne rzeczy, które różnią się między aplikacjami systemowymi i uprzywilejowanymi, nie są dokładnie takie same. Za uprzywilejowanymi aplikacjami powinna być jakaś ideologia, inaczej powiedzieliby:

if locationIsPrivileged: app.flags |= FLAG_SYSTEM

i został z tym zrobiony. Jest to nowa koncepcja i myślę, że ważne byłoby poznanie różnicy między tymi rodzajami aplikacji dla każdego, kto tworzy program AOSP od wersji 4.4.

questionAnswers(1)

yourAnswerToTheQuestion