Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


El paquete xyz tiene un identificador no coincidente: 10044 en disco, 10045 en configuración

He encontrado una guía sencilla para instalar un Android-x86 en una VM ( guía ).
La conexión a Eclipse y todo funciona bien, pero instalar mi aplicación en la máquina virtual falla con los siguientes errores:

06-21 22:40:26.390: INFO/PackageManager(2439): /data/app/xyz.apk changed; unpacking 06-21 22:40:26.390: ERROR/PackageManager(2439): Package xyz has mismatched uid: 10044 on disk, 10045 in settings 06-21 22:40:26.390: WARN/PackageManager(2439): Native ABI mismatch from package file 06-21 22:40:26.390: WARN/PackageManager(2439): Package couldn't be installed in /data/app/xyz-1.apk 

Busqué el error en google y encontré un pequeño script de Python para solucionar el problema, pero no funciona ( script ). Después de la ejecución del guión recibí el mismo error.

Uso Android-x86 2.2 genérico, más detalles se pueden encontrar aquí: Versión 2.2

¿Hay alguna posibilidad de solucionar ese problema?

EDITAR:

He probado todas las versiones 2.2. Sólo genérico y esparta trabajan en general, pero nadie acepta mi apk.
Probado con adb install <packagefile> también.

EDIT2:

He probado las herramientas recomendadas de @Vlad. Funciona parcialmente después de firmar el apk. Finalmente utilicé apkTools y reemplazé los archivos antiguos de apkEdit por los nuevos de apktool.
Pero la instalación con adb cuelga con el mensaje en espera de dispositivo o nada. Si creo eclipse DDMS la conexión con el dispositivo se perderá cada vez que intento instalar el apk.
Aquí está el error cuando intento instalar el apk normal : Failure [INSTALL_FAILED_INVALID_APK]

  • Android os.arch salida para ARM, MIPS, x86?
  • Cómo probar la aplicación basada en Bluetooth en Androidx86 en la parte superior de VirtualBox con Bluetooth incorporado bluetooth
  • ¿Cómo ejecutar Android-x86 4.2 iso en VirtualBox VM?
  • Cómo ejecutar wifi peer to peer aplicación en el emulador de Android ..?
  • ¿Cómo se escribe el código nativo android para ARM en x86?
  • Android-x86 no se instalará en VirtualBox
  • Cambiar la resolución de pantalla de Android x86
  • Cámara virtual x86 para Android + cámara
  • 3 Solutions collect form web for “El paquete xyz tiene un identificador no coincidente: 10044 en disco, 10045 en configuración”

    Error Package xyz has mismatched uid: 10044 on disk, 10045 in settings causada por existir carpeta /data/data/xyz/ .

    En esta carpeta de mensajes existe y tiene otro propietario (10044) desde ahora instalado (10045). Se debe a una instalación impura anterior.

    Por ejemplo, la instalación anterior falló con algunos errores y no quita las carpetas creadas.

    Porque en la carpeta puede ser datos de otra aplicación Android no puede permitir su uso. PackageManager intenta arreglarlo de diferentes maneras pero si no puede hacer esto – obtiene la aplicación dir diferente y mostrar este mensaje.

    Mejor solución – instalar la aplicación y limpiar eliminarlo. Después de que instalarlo de nuevo.

    Otra solución: eliminar la carpeta /data/data/xyz/ de alguna manera. Puede ser que necesita raíz para esto.

    Código de PackageManager (los comentarios pueden ser muy útiles):

      // This is a normal package, need to make its data directory. dataPath = getDataPathForPackage(pkg.packageName, 0); boolean uidError = false; if (dataPath.exists()) { // XXX should really do this check for each user. mOutPermissions[1] = 0; FileUtils.getPermissions(dataPath.getPath(), mOutPermissions); // If we have mismatched owners for the data path, we have a problem. if (mOutPermissions[1] != pkg.applicationInfo.uid) { boolean recovered = false; if (mOutPermissions[1] == 0) { // The directory somehow became owned by root. Wow. // This is probably because the system was stopped while // installd was in the middle of messing with its libs // directory. Ask installd to fix that. int ret = mInstaller.fixUid(pkgName, pkg.applicationInfo.uid, pkg.applicationInfo.uid); if (ret >= 0) { recovered = true; String msg = "Package " + pkg.packageName + " unexpectedly changed to uid 0; recovered to " + + pkg.applicationInfo.uid; reportSettingsProblem(Log.WARN, msg); } } if (!recovered && ((parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0 || (scanMode&SCAN_BOOTING) != 0)) { // If this is a system app, we can at least delete its // current data so the application will still work. int ret = mInstaller.remove(pkgName, 0); if (ret >= 0) { // TODO: Kill the processes first // Remove the data directories for all users sUserManager.removePackageForAllUsers(pkgName); // Old data gone! String prefix = (parseFlags&PackageParser.PARSE_IS_SYSTEM) != 0 ? "System package " : "Third party package "; String msg = prefix + pkg.packageName + " has changed from uid: " + mOutPermissions[1] + " to " + pkg.applicationInfo.uid + "; old data erased"; reportSettingsProblem(Log.WARN, msg); recovered = true; // And now re-install the app. ret = mInstaller.install(pkgName, pkg.applicationInfo.uid, pkg.applicationInfo.uid); if (ret == -1) { // Ack should not happen! msg = prefix + pkg.packageName + " could not have data directory re-created after delete."; reportSettingsProblem(Log.WARN, msg); mLastScanError = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE; return null; } // Create data directories for all users sUserManager.installPackageForAllUsers(pkgName, pkg.applicationInfo.uid); } if (!recovered) { mHasSystemUidErrors = true; } } else if (!recovered) { // If we allow this install to proceed, we will be broken. // Abort, abort! mLastScanError = PackageManager.INSTALL_FAILED_UID_CHANGED; return null; } if (!recovered) { pkg.applicationInfo.dataDir = "/mismatched_uid/settings_" + pkg.applicationInfo.uid + "/fs_" + mOutPermissions[1]; pkg.applicationInfo.nativeLibraryDir = pkg.applicationInfo.dataDir; String msg = "Package " + pkg.packageName + " has mismatched uid: " + mOutPermissions[1] + " on disk, " + pkg.applicationInfo.uid + " in settings"; // writer synchronized (mPackages) { mSettings.mReadMessages.append(msg); mSettings.mReadMessages.append('\n'); uidError = true; if (!pkgSetting.uidError) { reportSettingsProblem(Log.ERROR, msg); } } } } pkg.applicationInfo.dataDir = dataPath.getPath(); 

    Su aplicación parece utilizar código nativo. ¿Utiliza NDK? Una forma de comprobar es usar "badges de volcado de apktool"

    Ver http://ibotpeaches.github.io/Apktool/

    Busque algo como código nativo: 'armeabi' en la salida

    El problema tenía que ver con un programa llamado "dexopt" que determina un búfer de tamaño fijo llamado "LinearAlloc" de aplicaciones instaladas en un dispositivo específico. Mientras que el tamaño del búfer es de 8 o 16 MB de tamaño para las nuevas versiones de Android como Ice Cream Sandwich y Jelly Bean, su sólo 5 MB en las versiones anteriores.

    Al firmar el apk, es probable que ejecute los pasos proguard, que elimina partes de código no referenciadas (clases, métodos, campos, etc) Así que pasar ese error relacionado con el tamaño del búfer.

    Pero proguard no puede ser una solución cada vez, todavía tiene la posibilidad de superar el límite de tamaño de búfer.

    Facebook tiene una solución para esto: "Romper nuestra aplicación en múltiples archivos dex". Vea: https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-for-facebook-for-android/10151345597798920

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.