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.