Qual é a diferença entre aplicativos do sistema e aplicativos privilegiados no Android?

Então, em 4.3, havia um conceito de aplicativos do sistema. APKs que foram colocados em/system/app receberam privilégios de sistema. A partir de 4.4, há um novo conceito de "aplicativo privilegiado". Aplicativos privilegiados são armazenados em/system/priv-app diretório e parecem ser tratados de forma diferente. Se você olhar no código fonte do AOSP, emPackageManagerService, você verá novos 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;
}

Então, aqui está um exemplo de uma situação em que estes diferem.

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

Isso afeta a prioridade de quaisquer atividades que não estejam definidas como aplicativos do sistema. Isso parece indicar que você não pode adicionar uma atividade ao gerenciador de pacotes cuja prioridade é maior que 0, a menos que você seja um aplicativo do sistema. Isso faznão impedir aplicativos privilegiados, tanto quanto eu posso dizer (há muita lógica aqui, eu posso estar errado.).

Minha pergunta é o que exatamente isso implica? Se meu aplicativo é privilegiado, mas não sistema, que diferença isso fará? EmPackageManagerService Você pode encontrar várias coisas que diferem entre o sistema e os aplicativos privilegiados, eles não são exatamente os mesmos. Deveria haver algum tipo de ideologia por trás de aplicativos privilegiados, do contrário eles teriam acabado de dizer:

if locationIsPrivileged: app.flags |= FLAG_SYSTEM

e foi feito com isso. Este é um conceito novo, e acho que seria importante saber a diferença entre esses tipos de aplicativos para quem está desenvolvendo o AOSP a partir do 4.4.

questionAnswers(1)

yourAnswerToTheQuestion