8 votes

Où sont stockés les UID de chaque application ?

Lors de l'installation d'une application, Android lui attribue un UID unique. Quel(s) fichier(s) est (sont) utilisé(s) pour garder la trace des UID utilisés et de leur propriétaire ? Je veux changer de force l'UID d'une application pour m'assurer qu'il est le même sur différents appareils.

J'ai déjà vérifié avec /data/system/packages.xml . Mais alors qu'il contient les autorisations d'application par nom de paquet, je n'y ai pas vu d'UID.

Si cela dépend de la version d'Android, pour chaque version supérieure ou égale à 4.4.4 et source à la documentation pour le comprendre moi-même pour les futures versions.

7voto

Guillermo Gomez Points 423

Vous avez déjà manqué la bonne réponse.
Les UIDs sont stockés directement dans /data/system/packages.xml Une version plus facile à interpréter et contenant moins d'informations est toutefois disponible à l'adresse suivante packages.list .
Voici une ligne d'exemple de ce qu'il y a à l'intérieur (faites défiler vers la droite)

<package name="[jackpal.androidterm](https://play.google.com/store/apps/details?id=jackpal.androidterm)" codePath="/data/app/jackpal.androidterm-1" nativeLibraryPath="/data/app/jackpal.androidterm-1/lib" primaryCpuAbi="armeabi" flags="572996" ft="1592b6fa088" it="153d4948841" ut="158ed133c1f" version="71" **userId="10001"**\>

Vous voyez, il y a un userId Attribut XML. C'est exactement l'UID que vous demandez.
En outre, userId peut être remplacé par sharedUserId si une application partage son UID avec une autre. Comme (aussi défilement vers la droite)

<package name="com.android.providers.telephony" codePath="/system/app/TelephonyProvider" nativeLibraryPath="/system/app/TelephonyProvider/lib" primaryCpuAbi="arm64-v8a" flags="540165" ft="159d34468e8" it="4ba52c60" ut="159d34468e8" version="1" **sharedUserId="1001"**\>

Bien sûr, vous ne voulez pas passer par cette terriblement longue packages.xml Vous pouvez donc jeter un coup d'oeil à packages.list comme

jackpal.androidterm 10001 0 /data/data/jackpal.androidterm default 3003,1028,1015

Très droit, n'est-ce pas ? Le 2ème champ délimité par un espace est exactement l'UID et c'est le même que celui dans packages.xml . Ne pas modifier packages.list . Tous les enregistrements non concordants dans packages.list sera corrigé de packages.xml .

Il est également possible de modifier l'UID d'une application installée. si il n'a pas d'UID partagé. Il suffit de modifier packages.xml et de redémarrer, alors le nouvel UID prendra effet immédiatement. Les anciennes données seront effacées pour l'application modifiée. Si vous voulez conserver les données, appliquez chown récursivement sur le répertoire de données de l'application dans /data/data . Si les anciennes données d'une application sont effacées en raison d'une erreur d'UID, les informations correspondantes apparaîtront à l'adresse suivante /data/system/uiderrors.txt . Comme ça :

1970/01/01 00:00: Package jackpal.androidterm uid has changed from 0 to 10001, old data erased.

Testé sur Android de 4 à 5. Je suppose que c'est applicable de Gingerbread à Nougat.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X