Android APK obsoleto no Studio para variante de construção após alterações xml

9

Isso é muito estranho. Hoje o AS (1.4) parou de recriar corretamente o apk de depuração no meu projeto:

  • Todas as alterações de XML não são refletidas no código durante a execução do projeto
  • As alterações no código Java estão se propagando, mesmo quando as alterações XML não são
  • Limpeza e depois a execução parece corrigir, um APK atualizado é criado com sucesso todas as vezes.
  • Eu tenho duas variantes de compilação no meu projeto, esse problema afeta apenas uma delas .
  • Estou usando o Genymotion, mas o problema também existe no emulador e hardware regulares.
  • Eu suspeito que haja algum tipo de bloqueio sendo colocado nos arquivos xml. Por exemplo, se eu renomear um arquivo e clicar em executar, as alterações serão propagadas. Mas inspecionar o R.java mostra entradas para o nome do arquivo antigo e o novo - o antigo simplesmente não está sendo limpo / atualizado.
  • O layout xml com o qual estou testando isso foi retirado para um layout relativo em branco com uma cor de plano de fundo. A cor não está sendo atualizada quando deveria ser.

Eu realmente não sei muito sobre o processo de compilação, então tudo que eu tentei é excluir a pasta de compilação, reimportando o projeto e o antigo cache de reinicialização / invalidação no Android Studio. Alguma sugestão sobre o que pode causar esse comportamento estranho ou como corrigi-lo?

Editar: É muito difícil definir o comportamento por trás disso - às vezes tenho notado que afeta consistentemente apenas certos arquivos xml. Parece que esse cara tem o mesmo problema: problema de criação de projeto do Android Studio

Eu passei algumas horas reinstalando o Android Studio do zero e o problema continua ...

    
por Daniel Wilson 25.10.2015 в 02:01
fonte

2 respostas

1

Eu realmente descobri o problema aqui há um tempo atrás e foi bem sutil. Meu projeto tem variantes de construção com um conjunto de fontes principal, além de um conjunto de fontes para cada variante. Foi definido assim:

sourceSets {

    def defaultDirectory = "src/main/"
    def flavorADirectory = "src/flavor_a/"

    flavor_a {
        java.srcDirs = [defaultDirectory + 'java', flavorADirectory + 'java']
        res.srcDirs = [defaultDirectory + 'res', flavorADirectory + 'res']
        manifest.srcFile flavorADirectory + 'AndroidManifest.xml'
    }

    def flavorBDirectory = "src/flavor_b/"

    flavor_b{
        java.srcDirs = [defaultDirectory + 'java', flavorBDirectory + 'java']
        res.srcDirs = [defaultDirectory + 'gift', flavorBDirectory + 'res']
        manifest.srcFile flavorBDirectory + 'AndroidManifest.xml'
    }
}

Portanto, as variantes foram bem compiladas, mas cada mudança de xml estava provocando uma reconstrução completa. Não tenho certeza do raciocínio exato por trás dele, mas acredito que o principal sourceset deva ser especificado como uma entidade separada. O Android Studio deve ver a palavra-chave main e saber melhor o que fazer com ela. Isso significa que não há necessidade de especificar o diretório padrão como parte de os conjuntos de origem da variante de compilação. Removendo isso, o problema desaparece e não ocorrem mais reconstruções constantes:

 sourceSets {

    def defaultDirectory = "src/main/"

    main {
        java.srcDirs = [defaultDirectory + 'java']
        res.srcDirs = [defaultDirectory + 'res']
    }

    def flavorADirectory = "src/flavor_a/"

    flavor_a {
        java.srcDirs = [flavorADirectory + 'java']
        res.srcDirs = [flavorADirectory + 'res']
        manifest.srcFile flavorADirectory + 'AndroidManifest.xml'
    }

    def flavorBDirectory = "src/flavor_b/"

    flavor_b{
        java.srcDirs = [flavorBDirectory + 'java']
        res.srcDirs = [flavorBDirectory + 'res']
        manifest.srcFile flavorBDirectory + 'AndroidManifest.xml'
    }
}
    
por Daniel Wilson 26.08.2016 / 16:59
fonte
1

Daniel, eu também notei esse problema também. Parece que algumas alterações simplesmente não se propagam, a menos que o ADB detecte que o aplicativo não está atualmente instalado em um dispositivo de destino.

Disclaimer: Esta é uma solução alternativa, em vez de uma explicação do comportamento, mas funciona para mim. Para corrigir o problema, configurei minhas configurações de execução para desinstalar o pacote em questão antes de instalar novamente. Lembre-se de que a desinstalação de um APK obviamente afetará coisas como bancos de dados, dados persistentes de preferências, etc., portanto, não use isso se o processo de desenvolvimento depender deles.

Passos: (de aqui )

  1. No Android Studio, clique na lista suspensa à esquerda do botão Executar e selecione Editar configurações ...
  2. Clique no aplicativo em Aplicativo Android e, na guia Geral, encontre o título "Antes do lançamento"
  3. Clique no botão +, selecione Executar ferramenta externa, clique no botão + na janela pop-up.
  4. Dê algum nome (por exemplo, adb uninstall) e descrição, e digite adb em Program: e uninstall <your-package-name> em Parameters :. Certifique-se de que o novo item esteja selecionado quando você clicar em Ok na janela pop-up.

Nota: Se você não tiver o adb em sua variável de ambiente PATH, forneça o caminho completo para adb no campo Programa: (por exemplo, / home / user / android / sdk / platform-tools / adb).

Novamente, desculpe, isso não é uma explicação do problema em si, mas isso definitivamente resolve o problema para mim.

Deixe-me saber como isso funciona para você.

    
por lustig 02.11.2015 / 14:35
fonte