Wo wird die UID für jede Anwendung gespeichert?

Bei der Installation einer Anwendung gibt Android ihr eine eindeutige UID, welche Datei(en) wird/werden verwendet, um die verwendeten UIDs zu verfolgen und wem sie gehören? Ich möchte die Anwendungs-UID zwangsweise ändern, um sicherzustellen, dass sie auf verschiedenen Geräten gleich sind.

Ich habe schon bei nachgefragt /data/system/packages.xml. Aber während das Anwendungsberechtigungen nach Paketnamen enthält, wurde dort keine UID angezeigt.

Wenn es von der Android-Version abhängt, für jede Version höher oder gleich 4.4.4 und Quelle zur Dokumentation, um es für zukünftige Versionen selbst herauszufinden.

Antworten (1)

Sie haben die richtige Antwort bereits verpasst.
Die UIDs werden direkt in gespeichert /data/system/packages.xml, obwohl eine einfacher zu interpretierende Version mit weniger Informationen unter verfügbar ist packages.list.
Hier ist eine Beispielzeile für den Inhalt (nach rechts scrollen)

<package name=" 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" >

Sie sehen, es gibt ein userIdXML-Attribut. Dies ist genau die UID, nach der Sie fragen.
Außerdem userIdkann durch ersetzt werden, sharedUserIdwenn eine App ihre UID mit einer anderen teilt. Like (auch nach rechts scrollen)

<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" >

Natürlich willst du das nicht so lange durchmachen , packages.xmlalso solltest du dir vielleicht mal anschauenpackages.list

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

Sehr direkt, nicht wahr? Das 2. Feld mit Leerzeichen ist genau die UID und es ist die gleiche wie die in packages.xml. Nicht ändern packages.list. Alle nicht übereinstimmenden Datensätze in packages.listwerden von korrigiert packages.xml.

Außerdem ist es möglich, die UID einer installierten App zu ändern, wenn sie keine gemeinsame UID hat. Einfach bearbeiten packages.xmlund neu starten, dann ist die neue UID sofort wirksam. Alte Daten werden für die geänderte App gelöscht. Wenn Sie Daten behalten möchten, wenden Sie sich chownrekursiv auf das Datenverzeichnis der App in /data/data. Wenn die alten Daten einer App durch eine nicht übereinstimmende UID gelöscht werden, werden entsprechende Informationen unter angezeigt /data/system/uiderrors.txt. So was:

01.01.1970 00:00: UID des Pakets jackpal.androidterm wurde von 0 auf 10001 geändert, alte Daten gelöscht.

Getestet auf Android von 4 bis 5. Ich denke, das gilt von Gingerbread bis Nougat.

danke, ich hatte nicht alle Daten durchsucht, sicherlich sind der erste Teil Berechtigungen, dann UIDs.
Funktioniert das noch unter Android 10? Können Sie bitte näher erläutern, wie Sie den Datenverlust vermeiden können? Danke schön.
@Sruly 'chown -Rhv 10001.10001 /data/user*/0/jackpal.androidterm'
@alecxs Es scheint die UID der Apps nicht zu ändern, es ändert nur den Eigentümer und die Gruppe der Dateien. Ich suche nach einer Möglichkeit, die UID der App so zu ändern, dass sie mit der UID für diese App auf einem anderen Gerät übereinstimmt.
@Sruly chown rekursiv ist "wie man den Verlust der Daten vermeidet" (nach dem Bearbeiten von packages.xml aus dieser Antwort)