Error al crear el archivo de imagen (sistema de archivos de sólo lectura)

En primer lugar esto no es una pregunta duplicada y he intentado soluciones de otros hilos similares, pero parece que este caso es diferente.

En mi caso puedo instalar con éxito y ejecutar otro proyecto android desde el mismo emulador (x86 también intentó el brazo), pero este proyecto de aplicación en particular lanza error siguiente al instalar también manualmente "adb install" desde el interior de shell no funcionan bien.

Uno de los errores del registro a continuación se encuentra (número de línea 232) https://android.googlesource.com/platform/system/vold/+/froyo/Loop.cpp

Sin embargo, no sé si el error "No proveedor de contenido …" está relacionado con la misma pila de errores.

Si tuviera el error de permiso de escritura (sdcard o permiso del sistema de archivos como ese) entonces otras aplicaciones también no deberían instalarse!

Esta aplicación problemática es un proyecto de NDK con un proveedor de contenido personalizado que intenté omitir pero no sirvió. parece que el error del proveedor de contenido está relacionado con la instalación de apk desde os y no realmente el proveedor de contenido desde dentro de la aplicación.

Estoy cansado de probar con un dispositivo real, estoy preocupado de que esto degradaría la vida de mi teléfono, porque tenía que hacerlo muy a menudo.

--------- beginning of /dev/log/main D/AndroidRuntime( 1977): D/AndroidRuntime( 1977): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<< W/linker ( 1977): libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix. D/AndroidRuntime( 1977): CheckJNI is ON D/dalvikvm( 1977): Trying to load lib libjavacore.so 0x0 D/dalvikvm( 1977): Added shared lib libjavacore.so 0x0 D/dalvikvm( 1977): Trying to load lib libnativehelper.so 0x0 D/dalvikvm( 1977): Added shared lib libnativehelper.so 0x0 D/dalvikvm( 1977): No JNI_OnLoad found in libnativehelper.so 0x0, skipping init D/dalvikvm( 1977): Note: class Landroid/app/ActivityManagerNative; has 179 unimplemented (abstract) methods E/memtrack( 1977): Couldn't load memtrack module (No such file or directory) E/android.os.Debug( 1977): failed to load memtrack module: -2 D/AndroidRuntime( 1977): Calling main entry com.android.commands.pm.Pm E/PackageHelper( 1680): Failed to create secure container smdl2tmp1 --------- beginning of /dev/log/system W/ActivityManager( 1149): No content provider found for permission revoke: file:///data/local/tmp/myapp.apk E/Vold ( 932): Error creating imagefile (Read-only file system) E/Vold ( 932): ASEC image file creation failed (Read-only file system) W/Vold ( 932): Returning OperationFailed - no handler for errno 30 E/DefContainer( 1680): Failed to create container smdl2tmp1 W/ActivityManager( 1149): No content provider found for permission revoke: file:///data/local/tmp/myapp.apk D/dalvikvm( 1149): GC_EXPLICIT freed 161K, 22% free 5442K/6948K, paused 1ms+1ms, total 8ms D/AndroidRuntime( 1977): Shutting down VM 

El problema puede ser:

  • un error de Android AOSP o un error en la ROM que está utilizando (configuración incorrecta)
  • algo ha causado que la partición donde se almacenan las aplicaciones instaladas en la tarjeta SD (o una tarjeta interna emulada), sea de sólo lectura

"Las aplicaciones en la tarjeta SD se almacenan en un contenedor cifrado para propósitos de seguridad de la plataforma, de modo que otras aplicaciones no pueden modificarlas o corromperse.Al montar la tarjeta SD, estos contenedores están montados de modo que se puede acceder de la misma manera que las aplicaciones almacenado en el almacenamiento interno. "

En su stacktrace el problema es este:

E / Vold (932): Error al crear el archivo de imagen (sistema de archivos de sólo lectura)
E / Vold (932): Error en la creación de archivos de imagen ASEC (sistema de archivos de sólo lectura)

He tenido un problema similar con una aplicación que había definido en su AndroidManifest.xml el android: installLocation = "preferExternal" y las siguientes cosas funcionaron para mí ( hechas independientemente una de otra ):

 I/qtaguid ( 6299): Failed write_ctrl(u 40) res=-1 errno=22 I/qtaguid ( 6299): Untagging socket 40 failed errno=-22 W/NetworkManagementSocketTagger( 6299): untagSocket(40) failed with errno -22 D/Finsky ( 6299): [1] 2.onResponse: Verification id=29 response=0 D/Finsky ( 6299): [1] PackageVerificationReceiver.onReceive: Verification requested, id = 29 E/Vold ( 127): Error creating imagefile (Read-only file system) E/Vold ( 127): ASEC image file creation failed (Read-only file system) W/Vold ( 127): Returning OperationFailed - no handler for errno 30 E/PackageHelper( 6280): Failed to create secure container smdl733025106.tmp W/DefContainer( 6280): Failed to copy package at /storage/emulated/0/myapp.apk W/DefContainer( 6280): java.io.IOException: Failed to create container smdl733025106.tmp W/DefContainer( 6280): at com.android.defcontainer.DefaultContainerService.copyPackageToContainerInner(DefaultContainerService.java:327) W/DefContainer( 6280): at com.android.defcontainer.DefaultContainerService.access$000(DefaultContainerService.java:67) W/DefContainer( 6280): at com.android.defcontainer.DefaultContainerService$1.copyPackageToContainer(DefaultContainerService.java:108) W/DefContainer( 6280): at com.android.internal.app.IMediaContainerService$Stub.onTransact(IMediaContainerService.java:60) W/DefContainer( 6280): at android.os.Binder.execTransact(Binder.java:446) 
  • Según https://developer.android.com/guide/topics/data/install-location.html cambie a android: installLocation = "auto"

  • Según http://forum.xda-developers.com/showpost.php?p=58409922&postcount=4845 Si desea instalarlo en " almacenamiento interno de dispositivos ", independientemente de lo que diga el manifiesto o de lo que el sistema decida.

    Accede a Ajustes> Aplicaciones> Abrir el menú> Preferir ubicación de instalación> configurarlo en "Almacenamiento de dispositivos internos". Tenía este conjunto para "Deja que el sistema decida". Esto hizo que algunos de los APK fallaran en la instalación, porque estaban marcados para preferir la tarjeta SD como su ubicación de instalación y por lo tanto intentaron instalar en el SD y simplemente falló. Ahora que todo se instala en el dispositivo, funciona bien.

  • Si desea instalarlo en el " almacenamiento externo "

    raíz adb
    adb shell
    mount -o rw, remontar rootfs /
    chmod 777 / mnt / sdcard
    pm instalar /mnt/sdcard/myapp.apk
    mount -o ro, remontar rootfs /

  • Según https://code.google.com/p/android/issues/detail?id=9593 && http://www.androidpolice.com/2011/04/19/fixing-the-couldnt-install-on- usb-storage-or-sd-card-problema-en-android /
    Sólo si puede encontrar el smdl2tmp1.asec en las siguientes rutas de acceso o si obtiene el error

    smdl2tmp1 03-24 18: 48: 38.784: ERROR / Vold (86): Archivo ASEC '/mnt/secure/asec/smdl2tmp1.asec' existe actualmente – destruirlo primero! (Dirección ya en uso)

    raíz adb
    shell adb rm /sdcard/.android_secure/smdl2tmp1.asec
    adb shell rm /mnt/secure/asec/smdl2tmp1.asec

En mi caso estoy usando un dispositivo con Android versión 6, el desarrollo de Unity.

Estoy recibiendo el mismo error al instalar la aplicación directamente desde el Editor de Unity, esto no sucederá si lo hago subir la aplicación a la consola del desarrollador de Android Juego como una versión Beta y luego descargar e instalar desde allí, en este caso Android hará el cifrado necesario e instalará la aplicación correctamente.

Mi solución para hacer la instalación directa fue para establecer en: android build -> Player Settings> Install location -> forcer Internal

En adición a la respuesta de @ Mnemoinc:

  • Si desea forzar la instalación al "almacenamiento interno"

    raíz adb
    adb shell
    pm install -f /sdcard/myapp.apk

Esto podría ser útil cuando se utiliza Cyanogenmod y tener un almacenamiento seguro.

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