android - aosp - El paquete tiene uid no coincidente: 10124 en el disco, 10134 en la configuración
android security (4)
Tengo algunos problemas con los dispositivos Android 2.3.X para una de mis aplicaciones (el nombre del paquete es com.netbiscuits.kicker). Sin embargo no puedo instalar mi APK. He intentado instalarlo directamente desde eclipse (almacén de claves de depuración) con el siguiente mensaje en LogCat:
05-02 09:29:03.671: D/PackageManager(279): Scanning package com.netbiscuits.kicker
05-02 09:29:03.671: E/PackageManager(279): Package com.netbiscuits.kicker has mismatched uid: 10124 on disk, 10134 in settings
05-02 09:29:03.671: I/PackageManager(279): Linking native library dir for /data/app/com.netbiscuits.kicker-1.apk
05-02 09:29:03.681: D/installd(126): DexInv: --- BEGIN ''/data/app/com.netbiscuits.kicker-1.apk'' ---
05-02 09:29:06.641: D/dalvikvm(2530): creating instr width table
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/Decoder;'' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/DecoderException;'' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/Encoder;'' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/EncoderException;'' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/StringEncoderComparator;'' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult;'' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/language/SoundexUtils;'' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/net/RFC1522Codec;'' has an earlier definition; blocking out
05-02 09:29:07.591: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/BinaryDecoder;'' has an earlier definition; blocking out
05-02 09:29:07.591: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/BinaryEncoder;'' has an earlier definition; blocking out
05-02 09:29:07.591: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/StringDecoder;'' has an earlier definition; blocking out
05-02 09:29:07.591: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/StringEncoder;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/binary/BinaryCodec;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/binary/Hex;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/language/DoubleMetaphone;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/language/Metaphone;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/language/RefinedSoundex;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/language/Soundex;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/net/BCodec;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/net/QCodec;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/net/QuotedPrintableCodec;'' has an earlier definition; blocking out
05-02 09:29:07.641: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/net/URLCodec;'' has an earlier definition; blocking out
05-02 09:29:07.671: D/dalvikvm(2530): DexOpt: ''Lorg/apache/commons/codec/binary/Base64;'' has an earlier definition; blocking out
05-02 09:29:07.751: D/dalvikvm(2530): DexOpt: couldn''t find field Landroid/graphics/BitmapFactory$Options;.inMutable
05-02 09:29:07.971: I/dalvikvm(2530): DexOpt: illegal method access (call Lcom/google/ads/AdRequest;.<init> ()V from Lcom/adtech/mobilesdk/publisher/mediation/admob/AdmobConfiguration;)
05-02 09:29:08.271: D/dalvikvm(2530): DexOpt: couldn''t find field Landroid/content/res/Configuration;.smallestScreenWidthDp
05-02 09:29:08.721: I/dalvikvm(2530): DexOpt: not resolving ambiguous class ''Lorg/apache/commons/codec/binary/Hex;''
05-02 09:29:08.801: D/dalvikvm(2530): DexOpt: couldn''t find static field
05-02 09:29:08.921: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/Decoder;'': multiple definitions
05-02 09:29:08.921: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/DecoderException;'': multiple definitions
05-02 09:29:08.921: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/Encoder;'': multiple definitions
05-02 09:29:08.921: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/EncoderException;'': multiple definitions
05-02 09:29:08.921: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/StringEncoderComparator;'': multiple definitions
05-02 09:29:08.921: I/dalvikvm(2530): DexOpt: not resolving ambiguous class ''Lorg/apache/commons/codec/binary/Hex;''
05-02 09:29:08.931: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult;'': multiple definitions
05-02 09:29:08.931: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/language/SoundexUtils;'': multiple definitions
05-02 09:29:08.941: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/net/RFC1522Codec;'': multiple definitions
05-02 09:29:08.941: I/dalvikvm(2530): DexOpt: not resolving ambiguous class ''Lorg/apache/commons/codec/DecoderException;''
05-02 09:29:10.001: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/BinaryDecoder;'': multiple definitions
05-02 09:29:10.001: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/BinaryEncoder;'': multiple definitions
05-02 09:29:10.001: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/StringDecoder;'': multiple definitions
05-02 09:29:10.001: D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/StringEncoder;'': multiple definitions
05-02 09:29:10.001: I/dalvikvm(2530): DexOpt: not resolving ambiguous class ''Lorg/apache/commons/codec/binary/Base64;''
05-02 09:29:10.001: I/dalvikvm(2530): DexOpt: not resolving ambiguous class ''Lorg/apache/commons/codec/binary/Base64;''
05-02 09:29:10.341: E/dalvikvm(2530): LinearAlloc exceeded capacity (5242880), last=728
05-02 09:29:10.341: E/dalvikvm(2530): VM aborting
05-02 09:29:10.448: I/DEBUG(120): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-02 09:29:10.448: I/DEBUG(120): Build fingerprint: ''SEMC/LT15i_1247-1044/LT15i:2.3.4/4.0.2.A.0.69/uv_v3w:user/release-keys''
05-02 09:29:10.448: I/DEBUG(120): pid: 2530, tid: 2530 >>> /system/bin/dexopt <<<
05-02 09:29:10.448: I/DEBUG(120): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d
05-02 09:29:10.448: I/DEBUG(120): r0 fffffe84 r1 deadd00d r2 00000026 r3 00000000
05-02 09:29:10.448: I/DEBUG(120): r4 6ca9f600 r5 004ffee4 r6 005001c4 r7 0001a82c
05-02 09:29:10.448: I/DEBUG(120): r8 000002d8 r9 00000000 10 0000000e fp 000560a8
05-02 09:29:10.448: I/DEBUG(120): ip 6ca9f70c sp 7eea9740 lr 6fd192b9 pc 6ca402c8 cpsr 20000030
05-02 09:29:10.448: I/DEBUG(120): d0 6472656767756265 d1 746963617061636e
05-02 09:29:10.448: I/DEBUG(120): d2 0000000600000067 d3 2ab070600000000a
05-02 09:29:10.448: I/DEBUG(120): d4 2acb49782ab07060 d5 0000000800000002
05-02 09:29:10.448: I/DEBUG(120): d6 2ab088302ac5d248 d7 0000000c2ac880f0
05-02 09:29:10.448: I/DEBUG(120): d8 0000020c0db232fe d9 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d10 0000000000000000 d11 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d12 0000000000000000 d13 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d14 0000000000000000 d15 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d16 0000000000000000 d17 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d18 0000000000000000 d19 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d20 0000000000000000 d21 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d22 0000000000000000 d23 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d24 0000000000000000 d25 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d26 0000000000000000 d27 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d28 0000000000000000 d29 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): d30 0000000000000000 d31 0000000000000000
05-02 09:29:10.448: I/DEBUG(120): scr 00000000
05-02 09:29:10.471: I/DEBUG(120): #00 pc 000402c8 /system/lib/libdvm.so
05-02 09:29:10.471: I/DEBUG(120): #01 pc 0004846e /system/lib/libdvm.so
05-02 09:29:10.471: I/DEBUG(120): #02 pc 00064a84 /system/lib/libdvm.so
05-02 09:29:10.471: I/DEBUG(120): #03 pc 00064e90 /system/lib/libdvm.so
05-02 09:29:10.471: I/DEBUG(120): #04 pc 000656bc /system/lib/libdvm.so
05-02 09:29:10.471: I/DEBUG(120): #05 pc 000658fe /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #06 pc 0006513e /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #07 pc 0005712c /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #08 pc 0005349a /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #09 pc 000553c2 /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #10 pc 000555fe /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #11 pc 00056fd0 /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #12 pc 00057022 /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #13 pc 00055e4e /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #14 pc 00055efc /system/lib/libdvm.so
05-02 09:29:10.481: I/DEBUG(120): #15 pc 00056000 /system/lib/libdvm.so
05-02 09:29:10.491: I/DEBUG(120): code around pc:
05-02 09:29:10.491: I/DEBUG(120): 6ca402a8 447a4479 f7d14c0b 2000e982 ea86f7d1
05-02 09:29:10.491: I/DEBUG(120): 6ca402b8 447c4809 6bdb5823 4798b103 22264902
05-02 09:29:10.491: I/DEBUG(120): 6ca402c8 f7d1700a bf00eaee deadd00d 00043947
05-02 09:29:10.491: I/DEBUG(120): 6ca402d8 00045505 0005f342 fffffe84 4b09b40e
05-02 09:29:10.491: I/DEBUG(120): 6ca402e8 4c09b517 aa05447b f852591b 6b5b1b04
05-02 09:29:10.491: I/DEBUG(120): code around lr:
05-02 09:29:10.491: I/DEBUG(120): 6fd19298 4a0e4b0d e92d447b 589c41f0 26004680
05-02 09:29:10.491: I/DEBUG(120): 6fd192a8 686768a5 f9b5e006 b113300c 47c04628
05-02 09:29:10.491: I/DEBUG(120): 6fd192b8 35544306 37fff117 6824d5f5 d1ef2c00
05-02 09:29:10.491: I/DEBUG(120): 6fd192c8 e8bd4630 bf0081f0 00028284 ffffff88
05-02 09:29:10.491: I/DEBUG(120): 6fd192d8 b086b570 f602fb01 9004460c a804a901
05-02 09:29:10.491: I/DEBUG(120): stack:
05-02 09:29:10.491: I/DEBUG(120): 7eea9700 2ab06280
05-02 09:29:10.491: I/DEBUG(120): 7eea9704 2acc3620
05-02 09:29:10.491: I/DEBUG(120): 7eea9708 6caa51a0
05-02 09:29:10.491: I/DEBUG(120): 7eea970c 6ca9f600
05-02 09:29:10.491: I/DEBUG(120): 7eea9710 6fd4272c
05-02 09:29:10.491: I/DEBUG(120): 7eea9714 6fd426d8
05-02 09:29:10.491: I/DEBUG(120): 7eea9718 00000000
05-02 09:29:10.491: I/DEBUG(120): 7eea971c 6fd192b9 /system/lib/libc.so
05-02 09:29:10.491: I/DEBUG(120): 7eea9720 0005f342
05-02 09:29:10.491: I/DEBUG(120): 7eea9724 004ffee4
05-02 09:29:10.491: I/DEBUG(120): 7eea9728 005001c4
05-02 09:29:10.491: I/DEBUG(120): 7eea972c 0001a82c
05-02 09:29:10.491: I/DEBUG(120): 7eea9730 000002d8
05-02 09:29:10.491: I/DEBUG(120): 7eea9734 6fd183b1 /system/lib/libc.so
05-02 09:29:10.491: I/DEBUG(120): 7eea9738 df002777
05-02 09:29:10.491: I/DEBUG(120): 7eea973c e3a070ad
05-02 09:29:10.491: I/DEBUG(120): #00 7eea9740 0001a828
05-02 09:29:10.491: I/DEBUG(120): 7eea9744 6ca48473 /system/lib/libdvm.so
05-02 09:29:10.491: I/DEBUG(120): #01 7eea9748 000002d8
05-02 09:29:10.491: I/DEBUG(120): 7eea974c 000002d8
05-02 09:29:10.491: I/DEBUG(120): 7eea9750 2ce60443
05-02 09:29:10.491: I/DEBUG(120): 7eea9754 2acc3620
05-02 09:29:10.491: I/DEBUG(120): 7eea9758 000560a8
05-02 09:29:10.491: I/DEBUG(120): 7eea975c 2c8a5190
05-02 09:29:10.491: I/DEBUG(120): 7eea9760 7eea97d8
05-02 09:29:10.501: I/DEBUG(120): 7eea9764 00000000
05-02 09:29:10.501: I/DEBUG(120): 7eea9768 0000000e
05-02 09:29:10.501: I/DEBUG(120): 7eea976c 6ca64a89 /system/lib/libdvm.so
05-02 09:29:10.531: W/installd(126): DexInv: --- END ''/data/app/com.netbiscuits.kicker-1.apk'' --- status=0x000b, process failed
05-02 09:29:10.531: E/installd(126): dexopt failed on ''/data/dalvik-cache/data@[email protected]@classes.dex'' res = 11
05-02 09:29:10.541: W/PackageManager(279): Package couldn''t be installed in /data/app/com.netbiscuits.kicker-1.apk
05-02 09:29:10.541: I/BootReceiver(279): Copying /data/tombstones/tombstone_07 to DropBox (SYSTEM_TOMBSTONE)
05-02 09:29:10.641: D/dalvikvm(279): GC_EXPLICIT freed 1059K, 34% free 10358K/15623K, external 4874K/6087K, paused 90ms
05-02 09:29:10.671: D/AndroidRuntime(2519): Shutting down VM
05-02 09:29:10.671: D/dalvikvm(2519): GC_CONCURRENT freed 215K, 71% free 304K/1024K, external 0K/0K, paused 0ms+1ms
05-02 09:29:10.671: D/dalvikvm(2519): Debugger has detached; object registry had 1 entries
05-02 09:29:11.411: I/iddd-events(129): Event com.sonyericsson.idd.probe.android.devicemonitor::ApplicationCrash was discarded since it was not active.
También he intentado instalar un APK firmado directamente desde Google Play Store. Eso falló con el mensaje de error: "El archivo del paquete no es válido".
El problema parece aparecer solo en un puñado de dispositivos Android 2.3.x y no tengo la menor idea de por qué. No uso el código NDK nativo, y ya he comprobado si una biblioteca tiene apache commons incluido en algún lugar, pero no he encontrado nada anormal.
¿Cualquier sugerencia?
El problema fue que la versión de apache commons que he especificado para este proyecto (maven) era diferente (más reciente) de la que ya está integrada en Android 2.x. Eso ha provocado estos errores:
D/dalvikvm(2530): DexOpt: not verifying ''Lorg/apache/commons/codec/Decoder;'': multiple definitions
Así que he eliminado la dependencia de apache común y la he reemplazado con mi propia implementación. Supongo que también podría volver a empaquetar las clases comunes de Apache más recientes en su paquete de aplicación o intentar jugar con el alcance proporcionado ...
Error El Package has mismatched uid: 10124 on disk, 10134 in settings
causada por la carpeta /data/data/xyz/
where donde xyz
es el nombre del paquete de la aplicación.
En esta carpeta de mensajes existe un propietario diferente (10124) desde ahora instalado (10134). Es causada por la instalación sucia anterior.
Por ejemplo, la instalación anterior falló con algunos errores y no elimina las carpetas creadas.
Debido a que en la carpeta puede haber datos de otra aplicación, Android no puede permitir su uso. PackageManager
intenta solucionarlo de diferentes maneras, pero si no puede hacerlo, obtiene el directorio de la aplicación y muestra este mensaje.
Mejor solución: instale la aplicación y elimínela. Después de que vuelva a instalarlo.
Otra solución: eliminar la carpeta /data/data/xyz/
de alguna manera. Puede ser que necesites root 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 problema es que la API que definió en la configuración de su proyecto debe ser compatible para funcionar correctamente con la versión de su teléfono, que debe ser compatible con la versión de compilación de APK que está utilizando actualmente. Por lo tanto, compruebe AndroidManifest.xml e incluya la configuración de .jar para la compatibilidad de API. Una buena manera de ir a salvo y evitar este tipo de dolor de cabeza es publicar múltiples APKs .
Una vez que decida publicar múltiples APK, probablemente necesite crear proyectos de Android separados para cada APK que desee publicar, de modo que pueda desarrollarlos adecuadamente por separado. Puede hacerlo simplemente duplicando su proyecto existente y dándole un nuevo nombre. Como alternativa, puede utilizar un sistema de compilación que puede generar diferentes recursos, como texturas, según la configuración de compilación.
Una forma de evitar la duplicación de grandes porciones de su código de aplicación es usar un proyecto de library . Un proyecto de biblioteca contiene código y recursos compartidos, que puede incluir en sus proyectos de aplicación reales.
http://www.technotalkative.com/wp-content/uploads/2013/06/volley-library.png
Al crear múltiples proyectos para la misma aplicación, es una buena práctica identificar cada uno con un nombre que indique las restricciones del dispositivo que se colocarán en el APK , para que pueda identificarlos fácilmente. Por ejemplo, "myAPP08" podría ser un buen nombre para una aplicación diseñada para el nivel de API 8 y superior.
Para activar múltiples APK en la consola del desarrollador para Android Market, asegúrese de tener las versiones de APK que se ajusten a las versiones de Android que tiene en mente. El uso del proyecto de biblioteca es un paso adicional que le ayuda a garantizar la calidad y evitar problemas de compatibilidad cuando se prepara para release su aplicación. Cuanto más cuidadoso y interesado en prestar atención a los details , mejor.
Al final, lo que más importa es que tu APK será confiable y se ejecutará sin problemas en una gran cantidad de dispositivos diferentes.
Definición del problema
Durante la instalación estándar, se ejecuta un programa llamado "dexopt" para preparar su aplicación para el teléfono específico en el que se está instalando. Dexopt usa un búfer de tamaño fijo (llamado búfer "LinearAlloc") para almacenar información sobre todos los métodos en su aplicación. Las versiones recientes de Android utilizan un búfer de 8 o 16 MB, pero Froyo y Gingerbread (versiones 2.2 y 2.3) solo tienen 5 MB. Debido a que las versiones anteriores de Android tienen un búfer relativamente pequeño, nuestra gran cantidad de métodos excedía el tamaño del búfer y causaba que dexopt fallara.
Este es el error para su problema
Soluciones:
- Proguard: Proguard elimina clases / métodos sin referencia de su aplicación. Por lo tanto, el tamaño del archivo dex de su aplicación disminuye. (He resuelto mi problema con proguard)
- Varios archivos Dex: divida su aplicación en varios archivos dex. Facebook tiene una solución para esto . También lea este link para administrar múltiples archivos dex.