Quelle est la différence entre les applications système et les applications privilégiées sur Android?
donc en 4.3 il y avait un concept D'applications de système. Les APK qui ont été placés dans /system/app
ont reçu des privilèges de système. Depuis la version 4.4, il existe un nouveau concept d ' "application privilégiée". Les applications privilégiées sont stockées dans le répertoire /system/priv-app
et semblent être traitées différemment. Si vous regardez dans le code Source de L'AOSP, sous PackageManagerService
, vous verrez de nouvelles méthodes telles que
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;
}
donc voici un exemple d'une situation où ces différences.
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");
}
...
cela affecte la priorité de toutes les activités qui ne sont pas définies comme des applications système. Cela semble impliquer que vous ne pouvez pas ajouter une activité au gestionnaire de paquets dont la priorité est supérieure à 0, sauf si vous êtes une application système. Cela ne pas empêcher applications privilégiées autant que je peux dire (Il ya beaucoup de logique ici, je peux me tromper.).
ma question Est de savoir ce que cela implique exactement? Si mon application est privilégiée, mais pas système, quelle différence que faire? Dans PackageManagerService
vous pouvez trouver diverses choses qui diffèrent entre le système et les applications privilégiées, ils ne sont pas exactement les mêmes. Il devrait y avoir une sorte d'idéologie derrière les applications privilégiées, sinon ils auraient simplement dit:
if locationIsPrivileged: app.flags |= FLAG_SYSTEM
et on en a fini avec. Il s'agit d'un nouveau concept, et je pense qu'il serait important de connaître la différence entre ces types d'applications pour tous ceux qui font du développement AOSP à partir de la version 4.4.
3 réponses
donc après quelques recherches, il est clair que les applications dans priv-app sont éligibles aux permissions système, de la même manière que les anciennes applications étaient éligibles aux permissions système en étant dans system-app. La seule documentation officielle de Google que j'ai pu trouver sur ceci est venue sous la forme d'un message de propagation: Commettre hachage: ccbf84f44c9e6a5ed3c08673614826bb237afc54
certaines applications système sont plus Système que d'autres
"signatureOrSystem" les autorisations ne sont plus disponibles pour toutes les applications résidant fr /partition système. Au lieu de cela, il y a une nouvelle /system / priv-app directory, et seulement les applications dont les Apk sont directory sont autorisés à utiliser les permissions signatureOrSystem sans partager la plateforme cert. Cela permettra de réduire la superficie exploitation possible des applications groupées par le système pour tenter de gagner accès aux opérations de permission gardées.
The ApplicationInfo.Flag_system flag continue à dire ce qu'il est dit dans la documentation: il indique que la demande apk était empaqueté sur la partition / system. Un nouveau drapeau caché FLAG_PRIVILEGED a été introduit, qui reflète le droit d'accéder à ces autorisation.
mise à jour: à partir de Android 8.0 priv-app a légèrement changé avec l'ajout de la Permission privilégiée liste blanche. En plus d'être dans priv-app, votre application doit également être ajouté à une liste blanche afin de obtenir diverses permissions système. Des informations à ce sujet peuvent être trouvées ici: https://source.android.com/devices/tech/config/perms-whitelist
mon obesrvation était, priv-app a la permission de la racine. supposons que si u installe une application enracinée dans system / app, il faudra tout de même que supersu accorde root. Mais si vous installez la même application enracinée dans system / priv-app vous n'avez pas besoin de supersu du tout. J'ai observé cela en expérimentant avec un rom, en nettoyant toutes les applications de chineese n en installant adaway,titanium, etc.
a partir de ce que je lis sur le web, priv-app ne sont utilisés que pour les applications google. Si vous avez encore besoin d'exécuter des applications avec des permissions système, vous devez continuer à utiliser /system/app. La méthode que vous affichez dans vos questions est, en fait, utilisée par googleapps!