8 votos

¿Dónde se almacenan los UID de cada aplicación?

Cuando se instala una aplicación, Android le da un UID único, ¿qué archivo(s) se utiliza para mantener un registro de los UIDs utilizados y a quién pertenecen? Quiero cambiar a la fuerza el UID de la aplicación para asegurarme de que es el mismo en diferentes dispositivos.

Ya lo he comprobado con /data/system/packages.xml . Pero mientras que eso contiene los permisos de la aplicación por el nombre del paquete, no vio ningún UID allí.

Si depende de la versión de Android, para cada versión superior o igual a la 4.4.4 y fuente a la documentación para averiguarlo yo mismo para futuras versiones.

7voto

Guillermo Gomez Puntos 423

Ya ha fallado la respuesta correcta.
Los UIDs se almacenan justo en /data/system/packages.xml aunque una versión más fácil de interpretar y con menos información está disponible en packages.list .
Aquí hay una línea de ejemplo de lo que hay dentro (desplácese a la derecha)

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

Verás, hay un userId Atributo XML. Este es exactamente el UID que está pidiendo.
Además, userId puede ser sustituido por sharedUserId si una aplicación comparte su UID con otra. Como (también desplazarse a la derecha)

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

Por supuesto que no quieres pasar por eso terriblemente largo packages.xml Así que tal vez quiera echar un vistazo a packages.list como

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

Muy recto, ¿no es así? El 2º campo delimitado con espacio es exactamente el UID y es el mismo que el de packages.xml . No modificar packages.list . Todos los registros no coincidentes en packages.list se corregirá de packages.xml .

También es posible cambiar el UID de una aplicación instalada si no tiene un UID compartido. Simplemente edite packages.xml y reiniciar, entonces el nuevo UID tendrá efecto inmediatamente. Los datos antiguos se borrarán para la aplicación modificada. Si quiere conservar los datos, aplique chown recursivamente en el directorio de datos de la aplicación en /data/data . Si los datos antiguos de una aplicación se borran por coincidencia de UID, la información relacionada aparecerá en /data/system/uiderrors.txt . Así:

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

Probado en Android del 4 al 5. Supongo que esto es aplicable desde Gingerbread hasta Nougat.

0 votos

Gracias no había escaneado todos los datos, seguramente la primera parte son los permisos y luego los UID.

0 votos

Parece muy completo, lo probaré lo antes posible para marcarlo como respuesta.

0 votos

¿Sigue funcionando en Android 10? ¿Puedes explicar más cómo evitar la pérdida de datos? Gracias.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X