Error [INSTALL_FAILED_INVALID_APK]

85

Cuando hago clic para ejecutar un proyecto que acabo de crear en Android Studio 0.2.10 y selecciono mi Android (conectado por USB con depuración por USB activado), aparece este error:

Waiting for device.
Target device: 0123456789ABCDEF
Uploading file
    local path: /Users/Rui/AndroidStudioProjects/FirstAppProject/FirstApp/build/apk/FirstApp-debug-unaligned.apk
    remote path: /data/local/tmp/rui.firstapp
Installing rui.firstapp
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/rui.firstapp"
pkg: /data/local/tmp/rui.firstapp
Failure [INSTALL_FAILED_INVALID_APK]

¿Alguna idea de lo que podría ser?

RuiG
fuente
Seleccione mi teléfono ... !! ¿Quiso decir emulator ... ??
Gokul Nath KP
1
No, mi Android con depuración por USB activado.
RuiG
¿Te aseguraste de que la aplicación sea compatible con el dispositivo que estás usando? Verifique los valores MinSDKy TargetSDKen su manifiesto. ¿Has intentado instalar esto en un emulador? Esto reducirá si el problema está en el APK o en su dispositivo.
free3dom

Respuestas:

153

Estaba obteniendo esto en Android Studio y todo lo que hice para solucionarlo fue ir "Build" > "Clean Project"y simplemente funcionó.

Francois Dermu
fuente
8
Si aún no funciona, Build -> Rebuild Project after Clean Project funcionaría.
Pei
Acabo de recibir esto con una actualización de gradle 5.4.1 a 5.6.1; no estoy seguro de qué extrañeza lo causó, pero las grandes actualizaciones de gradle ciertamente pueden hacerlo. Una solución de línea de comandos alternativa es ./gradlew cleanseguida por su comando de compilación normal
Mike Hardy
18

Simplemente elimine el antiguo APK android / app / build / outputs / apk / debug / app-debug.apk en la carpeta. eso es todo. disfruta tu codificación ...

mahendren
fuente
Bienvenido @VenkateshMogili
mahendren
1
rm -fr android/app/build/outputs/apk/debug/
felansu
15

Tuve un problema similar una vez, lo que observé fue que el nombre del paquete en mi Androidmanifest.xml se inició con un carácter de espacio vacío. like " com.example.test" instead of "com.example.test"

Eliminé todos esos espacios inválidos de mi archivo de manifiesto, resolvió mi problema

Edición 1 : '-' en el nombre del paquete también causa el mismo problema en algunas versiones de Android

Akhil
fuente
1
¡Guauu! Pensé invalidate cache and restartque forzaría una construcción limpia, aparentemente no es así.
GabrielOshiro
10

Tuve el mismo problema pero ninguna de las soluciones me funcionó. El problema era que no tenía . separadores en el nombre de mi paquete.
es decir, si el nombre de su paquete es my.packagename está bien, pero no puede ser solo mypackagename
Recibí la pista de este informe de error.

https://code.google.com/p/android/issues/detail?id=55841

Hadi
fuente
9

Si alguien todavía tiene problemas, entonces Build-> Clean Project luego Build-> Rebuild project finalmente Sync project with Gradle file .

Sandeep PC
fuente
8

Cómo solucionar este problema:

  1. Instalar en pc RootExplorer
  2. Crear nuevo tmp carpeta en la tarjeta SD
  3. Mantenga presionada la carpeta tmp y seleccione Linkesta carpeta (última opción en el menú)
  4. Vaya /data/local/y toque el botón CREATE LINKdesde la parte inferior
Liviu
fuente
8

Tuve este problema y ninguna de las soluciones anteriores funcionó para mí.

Por alguna razón, los permisos no se establecieron correctamente en mi /data/local/tmpdirectorio (solo la raíz tenía rwx). Solucioné el problema usando ADB (necesitará un dispositivo rooteado):

  1. Conecte su teléfono a través de USB
  2. Inicie ADB usando adb shell
  3. Pasar a /data/localusarcd /data/local
  4. Cambiar al modo raíz usando su
  5. Permitir lectura / escritura / ejecución en el tmpdirectorio usandochmod 777 tmp
  6. Desconecte, reinicie Android Studio y vuelva a conectar el dispositivo
infl3x
fuente
7

Al apagar Instant Run resolví mi problema. No conozco ninguna explicación hasta ahora. Después de migrar a Android Studio 3.0, comienza un problema como este. Espero que esto ayude a alguien en el futuro.

bluetoothfx
fuente
6

Cuando experimenté este problema, lo que me solucionó fue asegurarme de que el nombre del paquete AndroidManifest.xml fuera el mismo que el de la aplicación build.grade.

Anonage
fuente
3

Encontré otra razón de este error. Si ha rooteado los permisos de acceso de su dispositivo de / data / local / tmp pueden cambiarse, por lo que adb no puede acceder a su archivo temporal. La solución es crear la carpeta "tmp" en la tarjeta sd y crear un enlace simbólico en / data / local / (a ​​través de ADB shell o Root Explorer).

0neel
fuente
No podía creer eso: verificado con otro dispositivo (todos los permisos parecían idénticos, hasta el nivel raíz); jugueteó con los permisos (los hizo 777 parejos), de ninguna manera. Entonces, qué perder. Probé el enlace simbólico - ¡guau! Obras (+1). Todavía me gustaría saber por qué y qué hay detrás de eso. En mi caso, no fue el enraizamiento lo que lo causó, sino que hizo que el demonio ADB se ejecutara en "modo inseguro" (es decir, con permisos de root).
Izzy
3

Si escribe android:extractNativeLibs="false"en el archivo AndroidManifest. luego cámbialo aandroid:extractNativeLibs="true"

Ankita Shah
fuente
2

Esto ayudó en mi caso:

Settings -> Apps -> Google Play Store -> Click "Enable" button.
sqr163
fuente
Guau. Gracias. Inhabilité GooglePlay y no noté que esta era la causa principal de mis problemas.
W0rmH0le
2

Probé la mayoría de las soluciones ofrecidas anteriormente (las simples, no las que ofrecen chmod y alteran las bibliotecas internas) y ninguna de ellas funciona

Finalmente, lo que funcionó para mí fue: "Proyecto limpio" -> "Proyecto de reconstrucción" -> cambió el nombre de la versión de la aplicación en el módulo de la aplicación build.gradle -> Sincronizar Gradle -> Ejecutar la aplicación en el dispositivo

HMan
fuente
2

Me encontré con este problema al tener variantes de compilación no coincidentes. Un módulo de Dynamic Delivery estaba en la variante de depuración mientras que los módulos restantes estaban en el lanzamiento. Simplemente cambiando el módulo Dynamic Delivery para liberar, reconstruir e instalar, se solucionó el problema.

clever_trevor
fuente
2

Para los proyectos de Flutter, con el editor de VS Code, vaya a la carpeta de origen del proyecto, elimine la carpeta "build" y comience a depurar.

Abhi R
fuente
2

Tengo este problema en un proyecto con Dagger y varios módulos. Lo que funcionó para mí (nada de lo anterior funcionó) fue 1) vaciar la carpeta .gradle 2) vaciar la carpeta .idea 3) En el proyecto gradle.properties, marque org.gradle.caching = false 4) Posiblemente invalide las cachés en AS , limpiar, reconstruir

Es posible que pueda salirse con la suya con solo el n. ° 3, limpiar y luego construir.

EDITAR: Últimamente he podido solucionar esto reiniciando AS, luego haciendo una limpieza y luego volviendo a instalar.

Justin
fuente
extrañamente. he probado algunos de arriba. esto funcionó para mí Este desarrollo de Android se está volviendo loco. código durante 30 segundos y espere 5 minutos para obtener la compilación
satyajit
@satyajit. ¡¡5 minutos!! el mío tarda 10! Este es el único que funciona constantemente para mí.
Dan Anderson
puedo hacer que funcione ./gradlew installDebugdesde la línea de comando
satyajit
2

La causa de este problema para mí fue tener la variante de compilación incorrecta seleccionada para uno de los módulos de mi aplicación. En la herramienta "Compilar variantes", seleccioné la variante del módulo que coincidía con el módulo de la aplicación y me solucionó el problema.

Iglesia
fuente
1

Tuve este problema en Android Studio porque en mi compilación de depuración agregué el sufijo del nombre de la versión -DEBUG y el - era el problema.

Intente tener solo letras, números y puntos en los nombres de las versiones y los ID de las aplicaciones

Bruno Oliveira
fuente
1

Navegar a Run/Debug Configurations

Haga clic en Ejecutar en la pestaña superior> Editar configuraciones

  • Módulo: seleccione su aplicación
  • Opciones de instalación: Implementar APK predeterminado
  • Okay

ingrese la descripción de la imagen aquí

usuario14612787
fuente
0

Solo tuve el mismo error. Tenía el año 2015 en la identificación de la aplicación. Reemplacé 2015 por quince y eso lo resolvió.

Además, si usa Android Studio, puede probar: Tools / Android / Synch Project con Gradle Files

Borzh
fuente
0

Forzar Detener la aplicación en la configuración del dispositivo.

evya
fuente
0

Tuve este problema y ninguna de las soluciones anteriores funcionó para mí.

La razón es probablemente el teléfono de la versión raíz que tiene cuotas disponibles o permisos de instalación de apk solo en la tarjeta sd.

Solucioné el problema usando ADB (necesitará un dispositivo rooteado):

  1. Conecte su teléfono a través de USB
  2. Inicie ADB usando adb shell
  3. Cambiar al modo root usando su
  4. crear carpeta tmp en la tarjeta sd: mkdir / sdcard / tmp
  5. cd / datos / local
  6. cree el enlace de la carpeta en la tarjeta sd: ln -s / sdcard / tmp tmp
bochaltura
fuente
0

Parece haber múltiples razones para este fracaso. Para mí, el problema era que en el archivo AndroidManifest había hecho referencia a una biblioteca no existente (solo en este dispositivo en particular) usando la etiqueta 'uses-library'. Después de eliminar la biblioteca que este dispositivo no tenía, la apk se instaló correctamente.

Akash
fuente
0

He usado el arquetipo androidquickstart maven y me enfrenté al mismo problema:

El nombre de mi paquete era un único androidquickstart. Según consejos anteriores

  1. He cambiado el paquete a androidquickstart.test
  2. a continuación, en AndroidManifest.xml he cambiado package="androidquickstart"a package="androidquickstart.test"y correspondientemente eliminado prueba de otras partes del xml <activity android:name=".test.HelloAndroidActivity" >a<activity android:name=".HelloAndroidActivity" >
  3. y también problemas de paquetes solucionados en archivos java (resaltados por el IDE)
Ilya Yevlampiev
fuente
0

El nombre de su paquete debe incluir palabras combinadas por puntos como com.example o prashant.mydairy ... debería funcionar bien ahora

Los archivos donde debe actualizar el nombre de su paquete son los siguientes: 1) Archivo de manifiesto 2) Archivo Gradle (módulo appp): applicationId "package.name"

Prashant Yalatwar
fuente
1
debe ser comentario
Furqan
0

El nombre de taskAffinity debe tener al menos un '.' separador

android_su
fuente
0

Si tiene acceso a la consola del dispositivo (adb shell), cambie los siguientes permisos:

  1. chmod 777 / datos /
  2. chmod 777 / data / local /
    Es posible que también desee intentar copiar el apk, /data/local/en cuyo caso, asegúrese de establecer los permisos correctos para el apk también.
  3. chmod 777 /data/local/myapk.apk Ahora puede intentar una instalación: pm install -r -d /data/local/myapk.apk (tenga en cuenta la ruta absoluta)
Sabin
fuente
0

Parece que tener un número después del punto fue el culpable.

Tuve el mismo problema con el siguiente applicationId

org.tony.stark.125jarvis

Cambiándolo a

org.tony.stark.jarvis

Pude instalar la aplicación en los dispositivos Android.

Ismail Iqbal
fuente
0

Se puede obtener este error si el minSdkVersionen builde.gradlees más grande que la versión Android del dispositivo. En ese caso, debe modificar el archivo minSdkVersion.

anemomylos
fuente
0

eliminar código en AndroidManifest.xml:

herramientas: reemplazar = "android: appComponentFactory" android: appComponentFactory = ""

funciona.

lichao
fuente