Falha [INSTALL_FAILED_INVALID_APK]

86

Quando clico para executar um projeto que acabei de criar no Android Studio 0.2.10 e seleciono meu Android (conectado por USB com depuração por USB ativado), recebo este erro:

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]

Alguma ideia do que possa ser?

RuiG
fonte
Selecione meu telefone ... !! Você quis dizer emulador ... ??
Gokul Nath KP
1
Não, meu Android com debug por USB ligado.
RuiG
Você se certificou de que o aplicativo é compatível com o dispositivo que está usando? Verifique os valores MinSDKe TargetSDKem seu manifesto. Você já tentou instalar isso em um emulador? Isso determinará se o problema é com o APK ou com seu dispositivo.
free3dom

Respostas:

156

Eu estava obtendo isso no Android Studio e tudo que fiz para consertar foi ir para "Build" > "Clean Project"e funcionou.

François Dermu
fonte
8
Se ainda não estiver funcionando, Build -> Rebuild Project after Clean Project funcionaria.
Pei,
Acabei de obter isso com uma atualização do gradle 5.4.1 para 5.6.1 - não tenho certeza de que estranheza causou isso, mas grandes atualizações do gradle certamente podem. Uma solução de linha de comando alternativa é ./gradlew cleanseguida por seu comando de compilação normal
Mike Hardy
23

Basta remover o antigo APK android / app / build / outputs / apk / debug / app-debug.apk da pasta. Isso é tudo. aproveite sua codificação ...

Mahendren
fonte
Bem-vindo a @VenkateshMogili
mahendren 01 de
1
rm -fr android/app/build/outputs/apk/debug/
felansu
15

Tive um problema semelhante uma vez, o que observei foi que o nome do pacote em meu Androidmanifest.xml foi iniciado com um caractere de espaço vazio. like " com.example.test" instead of "com.example.test"

Eu removi todos esses espaços inválidos do meu arquivo de manifesto, isso resolveu meu problema

Edição 1 : '-' no nome do pacote também causa o mesmo problema em algumas versões do Android

Akhil
fonte
1
Uau! Eu pensei invalidate cache and restartque forçaria uma compilação limpa, aparentemente não.
GabrielOshiro
10

Eu tive o mesmo problema, mas nenhuma das soluções funcionou para mim. O problema é que eu não tinha . separadores no nome do meu pacote.
ou seja, se o nome do seu pacote é my.packagename está tudo bem, mas não pode ser apenas mypackagename
Peguei a dica deste relatório de bug.

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

Hadi
fonte
9

Se alguém ainda estiver tendo problemas, então Build-> Clean Project então Build-> Rebuild project finalmente Sincronize o projeto com o arquivo Gradle .

Sandeep PC
fonte
8

Como resolver este problema:

  1. Instalar RootExplorer
  2. Crie uma nova tmppasta no cartão SD
  3. Pressione longamente na pasta tmp e selecione Linkesta pasta (última opção no menu)
  4. Vá para /data/local/e toque no botão CREATE LINKde baixo
Liviu
fonte
8

Eu tive esse problema e nenhuma das soluções acima funcionou para mim.

Por algum motivo, as permissões não foram definidas corretamente no meu /data/local/tmpdiretório (apenas o root tinha rwx). Corrigi o problema usando ADB (você precisará de um dispositivo com acesso root):

  1. Conecte seu telefone via USB
  2. Inicie o ADB usando adb shell
  3. Mover para /data/localusarcd /data/local
  4. Mude para o modo raiz usando su
  5. Permitir leitura / gravação / execução no tmpdiretório usandochmod 777 tmp
  6. Desconecte, reinicie o Android Studio e conecte o dispositivo novamente
infl3x
fonte
7

Desligar o Instant Run resolveu meu problema. Não sei nenhuma explicação até agora. Depois de migrar para o Android Studio 3.0, começa um problema como este. Espero que isso ajude alguém no futuro.

bluetoothfx
fonte
6

Quando experimentei esse problema, o que o corrigiu para mim foi garantir que o nome do pacote AndroidManifest.xml fosse o mesmo que build.grade applicationId.

Anonsage
fonte
3

Encontrei outro motivo para esse erro. Se você fez o root em seu dispositivo, as permissões de acesso de / data / local / tmp podem ser alteradas, então adb não pode obter acesso a seu arquivo temporário. A solução é criar a pasta "tmp" no sdcard e criar um link simbólico para ela em / data / local / (via shell ADB ou Root Explorer).

0neel
fonte
Eu não conseguia acreditar nisso: verificação cruzada com outro dispositivo (todas as permissões pareciam idênticas, até o nível raiz); brincou com as permissões (tornou-as 777 pares) - de jeito nenhum. Então, o que perder. Tentei o link simbólico - uau! Funciona (+1). Eu ainda gostaria de saber por que e o que está por trás disso. Não estava causando o enraizamento no meu caso, mas fazendo o daemon ADB rodar em "modo inseguro" (ou seja, com permissões de root).
Izzy
3

Se você escrever android:extractNativeLibs="false"no arquivo AndroidManifest. então mude paraandroid:extractNativeLibs="true"

Ankita Shah
fonte
3

Tentei a maioria das soluções oferecidas acima (as simples, não aquelas que oferecem chmod e alteram bibliotecas internas) e nenhuma delas funciona

Eventualmente, o que funcionou para mim foi: "Clean Project" -> "Rebuild Project" -> alterou o app versionName no build.gradle app module -> Sync Gradle -> Execute o app no ​​dispositivo

HMan
fonte
Esse método funcionou para mim !! Muito obrigado, eu tenho lutado com isso há muito tempo, este é um salva-vidas de fato! Não posso agradecer o suficiente
stb_dev
3

Navegar para Run/Debug Configurations

Clique em Executar na guia superior> Editar configurações

  • Módulo: Selecione seu aplicativo
  • Opções de instalação: implantar o APK padrão
  • Está bem

insira a descrição da imagem aqui

user14612787
fonte
2

Isso ajudou no meu caso:

Settings -> Apps -> Google Play Store -> Click "Enable" button.
sqr163
fonte
Uau. Obrigado. Desativei o GooglePlay e não percebi que essa era a causa raiz dos meus problemas.
W0rmH0le
2

Eu encontrei esse problema por ter variantes de compilação incompatíveis. Um módulo de entrega dinâmica estava na variante de depuração, enquanto os módulos restantes estavam no lançamento. Simplesmente alterar o módulo de Entrega dinâmica para liberar, reconstruir e instalar corrigiu o problema.

clever_trevor
fonte
2

Para projetos Flutter, com o editor de código VS, vá para a pasta de origem do projeto, exclua a pasta "build" e comece a depurar.

Abhi R
fonte
2

Eu tenho esse problema em um projeto com Dagger e vários módulos. O que funcionou para mim (nenhuma das opções acima funcionou) foi 1) esvaziar a pasta .gradle 2) esvaziar a pasta .idea 3) No projeto gradle.properties, marque org.gradle.caching = false 4) Possivelmente invalidar caches no AS , limpar, reconstruir

Você pode conseguir se safar com apenas o # 3, limpar e depois construir.

EDITAR: Ultimamente, tenho conseguido contornar isso reiniciando o AS, limpando e instalando novamente.

Justin
fonte
estranhamente. eu tentei alguns acima. Isso funcionou para mim. O desenvolvimento do Android está ficando louco. codifique por 30 segundos e aguarde 5 minutos para obter a compilação
satyajit de
@satyajit. 5 minutos!! o meu leva 10! Este é o único que funciona de forma consistente para mim.
Dan Anderson
consigo fazê-lo funcionar a ./gradlew installDebugpartir da linha de comando
satyajit
2

A causa desse problema para mim foi ter a variante de compilação errada selecionada para um dos módulos do meu aplicativo. Na ferramenta "Build Variants", selecionei a variante do módulo que correspondia ao módulo do app e ela corrigiu o problema para mim.

Kirk
fonte
1

Tive este problema no android Studio porque na minha compilação de Debug adicionei o sufixo do nome da versão -DEBUG e o - era o problema.

Tente ter apenas letras, números e pontos nos nomes de sua versão e ids de aplicativo

Bruno Oliveira
fonte
0

Eu simplesmente tive o mesmo erro. Tive o ano de 2015 no id do aplicativo. Substituí 2015 por quinze e isso resolveu.

Além disso, se você usa o Android Studio, pode tentar: Tools / Android / Synch Project with Gradle Files

Borzh
fonte
0

Forçar Parar o aplicativo nas configurações do dispositivo.

evya
fonte
0

Eu tive esse problema e nenhuma das soluções acima funcionou para mim.

A razão é provavelmente a versão root do telefone que tem cota disponível ou permissões de instalação do apk apenas no sdcard.

Corrigi o problema usando ADB (você precisará de um dispositivo com acesso root):

  1. Conecte seu telefone via USB
  2. Inicie o ADB usando adb shell
  3. Mude para o modo raiz usando su
  4. crie a pasta tmp no sdcard: mkdir / sdcard / tmp
  5. cd / data / local
  6. crie um link para a pasta no sdcard: ln -s / sdcard / tmp tmp
bochaltura
fonte
0

Parece haver vários motivos para essa falha. Para mim, o problema era que, no arquivo AndroidManifest, fiz referência a uma biblioteca não existente (apenas neste dispositivo específico) usando a tag 'uses-library'. Após remover a biblioteca que este dispositivo não tinha o apk foi instalado corretamente.

Akash
fonte
0

Usei o arquétipo maven androidquickstart e enfrentei o mesmo problema:

Meu nome de pacote era apenas androidquickstart. De acordo com conselhos anteriores

  1. Mudei o pacote para androidquickstart.test
  2. em seguida, em AndroidManifest.xml I mudaram package="androidquickstart"para package="androidquickstart.test"e correspondentemente removido teste a partir de outras partes do XML <activity android:name=".test.HelloAndroidActivity" >para<activity android:name=".HelloAndroidActivity" >
  3. e também corrigiu problemas de pacote em arquivos java (destacados pelo IDE)
Ilya Yevlampiev
fonte
0

O nome do seu pacote deve incluir palavras combinadas por pontos como com.example ou prashant.mydairy ... deve funcionar bem agora

os arquivos em que você deve atualizar o nome do pacote são os seguintes: 1) Arquivo de manifesto 2) Arquivo Gradle (módulo appp): applicationId "package.name"

Prashant Yalatwar
fonte
1
deve ser comentário
Furqan
0

O nome taskAffinity deve ter pelo menos um '.' separador

android_su
fonte
0

Se você tiver acesso ao console do dispositivo (adb shell), altere as seguintes permissões:

  1. chmod 777 / data /
  2. chmod 777 / data / local /
    Você também pode tentar copiar o apk /data/local/, nesse caso, certifique-se de definir as permissões corretas para o apk também.
  3. chmod 777 /data/local/myapk.apk Agora você pode tentar uma instalação por: pm install -r -d /data/local/myapk.apk (observe o caminho absoluto)
Sabin
fonte
0

Parece que ter um número após o ponto foi o culpado.

Tive o mesmo problema com o seguinte applicationId

org.tony.stark.125jarvis

Alterando para

org.tony.stark.jarvis

Consegui instalar o aplicativo nos dispositivos Android.

Ismail Iqbal
fonte
0

Você pode obter este erro se o minSdkVersionno builde.gradleé maior do que a versão Android do dispositivo. Nesse caso, você deve modificar o minSdkVersion.

anemomylos
fonte
0

exclua o código em AndroidManifest.xml:

ferramentas: substituir = "android: appComponentFactory" android: appComponentFactory = ""

funciona.

lichao
fonte