¿Cuál es la diferencia entre las aplicaciones del sistema y las aplicaciones privilegiadas en Android?

Así que en 4.3 había un concepto de aplicaciones de sistema. APKs que fueron colocados en/system/app Se le dieron privilegios de sistema. A partir de 4.4, hay un nuevo concepto de "aplicación privilegiada". Las aplicaciones privilegiadas se almacenan en/system/priv-app Directorio y parecen ser tratados de manera diferente. Si busca en el código fuente de AOSP, enPackageManagerService, verás nuevos métodos como

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

Así que aquí hay un ejemplo de una situación en la que estos difieren.

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

Esto afecta la prioridad de cualquier actividad que no esté definida como aplicaciones del sistema. Esto parece implicar que no puede agregar una actividad al administrador de paquetes cuya prioridad sea mayor que 0, a menos que sea una aplicación del sistema. Esto haceno por lo que puedo decir, excluyo las aplicaciones privilegiadas (aquí hay mucha lógica, puedo estar equivocado).

Mi pregunta es, ¿qué implica esto exactamente? Si mi aplicación tiene privilegios, pero no el sistema, ¿qué diferencia hará eso? EnPackageManagerService Puede encontrar varias cosas que difieren entre el sistema y las aplicaciones privilegiadas, no son exactamente lo mismo. Debería haber algún tipo de ideología detrás de las aplicaciones privilegiadas, de lo contrario, simplemente habrían dicho:

if locationIsPrivileged: app.flags |= FLAG_SYSTEM

Y hecho con eso. Este es un concepto nuevo, y creo que sería importante conocer la diferencia entre este tipo de aplicaciones para cualquiera que esté realizando el desarrollo de AOSP a partir de 4.4.

Respuestas a la pregunta(1)

Su respuesta a la pregunta