Estou brincando com Instant Apps para Android. Instalei todos os pacotes corretos e cansei para criar um novo aplicativo com suporte para Instant App (marquei a caixa para Instant App ao criar um novo aplicativo). O problema é que sempre encontro problemas com ferramentas de compilação. Alguém mais tem esse problema e foi capaz de encontrar alguma solução alternativa.
Meu ambiente:
- Android Studio 3.0 Canary 1
- Compilar SDK: 25
- Ferramentas de construção: "26.0.0 rc2"
- Plug-in Gradle: 3.0.0-alpha1
- Gradle: testei gradle-4.0-milestone1 e 2
- Java 1.8 / 1.7
- SO: testei Windows 10 e Linux Ubuntu 16.4 LTS
O erro:
Error: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.internal.aapt.AaptException: AAPT2 compile failed:
aapt2 compile -o /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/res/merged/androidTest/debug /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml
Issues:
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:520 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:521 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:568 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:594 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:595 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:597 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:598 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:599 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:600 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:601 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:602 invalid dimen
- ERROR: /home/simonp/Work/201705_InstantApp/InstantAppTest/feature/build/intermediates/incremental/mergeDebugAndroidTestResources/merged.dir/values/values.xml:603 invalid dimen
:feature:mergeDebugAndroidTestResources FAILED
A linha em questão contém (520):
<item format="float" name="abc_disabled_alpha_material_dark" type="dimen">0.30</item>
Espero ter fornecido informações suficientes para você resolver o problema. Obrigado.
Respostas:
A solução alternativa é mudar sua máquina de desenvolvimento para um local que use "." como uma marca decimal.
Pode ser alterado da seguinte forma:
fonte
Abaixo são mencionadas quatro soluções diferentes: A, B, C e D; escolha um que seja adequado para você:
A) Correção do Android Studio por meio do arquivo de inicialização do Ubuntu .desktop
Esta é uma alternativa apenas do Ubuntu para a abordagem geral de correção do Android Studio (veja abaixo). Observe que você ainda pode querer implementar a parte sobre como corrigir o shell e talvez até mesmo reverter quaisquer modificações para
studio.sh
para confirmar totalmente esta correção.Eu cansei de corrigir o meu
studio.sh
para cada atualização do canário, então eu vim com uma solução melhor que elimina esta etapa. Ele funciona no Ubuntu e envolve simplesmente a criação de um iniciador .desktop que define a variável de ambiente doente em questão.Anote onde o Android Studio 3 está instalado, por exemplo
~/opt/android-studio-3
.Prepare seu ícone local e diretório de aplicativos, caso ainda não existam:
Crie um ícone do Android Studio 3 que fará seu iniciador se destacar do ícone padrão e salve-o no
~/.local/share/icons/android-studio-3.png
. Ou você pode usar o que fiz esfregando um pedaço de queijo no original (~/opt/android-studio-3/bin/studio.png
):Crie um arquivo inicializador do Android Studio 3 copiando e colando-o em um shell:
Torne-o executável:
Agora para a parte mais complicada. Idealmente, você deve ser capaz de encontrar, iniciar e criar shorts para Android Studio 3 a partir do Dash:
Mas, pessoalmente, quase sempre tenho problemas para fazer o Ubuntu detectar meus arquivos .desktop novos ou alterados. Uma solução é fazer logout e login novamente. Se alguém souber como forçar uma nova varredura, me avise!
B) Corrigindo o script de inicialização do Android Studio
Aqui está uma correção fácil, elegante e semipermanente: apenas altere a localidade do próprio Android Studio modificando seu script de inicialização:
Edite,
studio.sh
por exemplo,~/opt/android-studio/bin/studio.sh
ou qualquer que seja o seu caminho de instalação.Em algum lugar na parte superior do arquivo, abaixo
#!/bin/sh
e antes que as primeiras linhas de código apareçam, adicione o seguinte:LC_NUMERIC="en_US.UTF-8"
.Aqui está a parte superior do meu
studio.sh
para integridade:Reinicie o Android Studio
Uma nota sobre a atualização do Android Studio ou Gradle
Quando você atualizar posteriormente a instalação do Android Studio, ele detectará que você modificou
studio.sh
. Você deve deixar o instalador substituir o arquivo e, em seguida, executar o patch novamente conforme descrito acima. Finalmente reinicie o Android Studio, e você estará pronto novamente. As outras soluções não são afetadas por isso.C) Fixação da carcaça; Gradle, Jenkins, tudo isso
Construir a partir do shell usando
gradlew
também requer que a correção seja aplicada. Isso afeta apenas o shell e não o Android Studio. Escolha um:Especifique a correção em cada invocação desta forma:
LC_NUMERIC="en_US.UTF-8" ./gradlew clean assDebug
Ou para tornar isso permanente para o projeto , edite o
gradlew
arquivo na raiz do projeto e, em algum lugar no topo, adicione isto:LC_NUMERIC="en_US.UTF-8"
Como aqui:
Ou, é claro, você também pode adicionar uma correção global e permanente através do uso de um alias
gr
:Observe que é assim que os aliases do shell bash são adicionados no Ubuntu; se você estiver em um sistema operacional diferente, talvez deva anexar a ~ / .bashrc ou ~ / .profile.
Em seguida, inicie um novo shell e agora, em vez de invocar,
./gradlew
use o novo aliasgr
:gr clean assDebug
A clara desvantagem do nº 2 é que isso deve ser aplicado a todos os projetos manualmente. A vantagem, eu acho, é que isso será substituído automaticamente quando um novo gradlew for instalado, bem como
studio.sh
é substituído, então você pode testar se o bug foi corrigido =)D) Desativando APPT2 todos juntos
Pessoalmente, eu não faria isso, mas eu adicionei para completar, já que é definitivamente uma maneira de fazer o appt2 parar de dar erros. Adicione esta linha ao seu
gradle.properties
:android.enableAapt2=false
fonte
android.enableAapt2
(ou similar) parafalse
no meugradle.properties
. Muito obrigado pela resposta útil de qualquer maneira :)Resolvi esse problema adicionando a seguinte linha aos arquivos gradle.properties
fonte
export LC_NUMERIC="en_US.UTF-8"
ao seu .bashrc que funcionouEsse problema foi corrigido no mais recente estábulo do Android Studio. Atualizar seu Android Studio para 3.0 deve resolver esse problema para você (também não é necessário desativar o AAPT2).
fonte
Certifique-se de não adicionar unidades (dp) ao usar
format="float"
Eu estava enfrentando o mesmo problema porque gerei dimensões automaticamente usando o Android Studio
Extract dimen resource
e adicionei um tipo de unidade como:<item name="margin_top" type="dimen" format="float">51.75dp</item>
Deveria ser:
<item name="margin_top" type="dimen" format="float">51.75</item>
fonte
adicionar
para repositórios trabalhar para mim
fonte
Bibliotecas necessárias para máquinas de 64 bits:
Se você estiver executando uma versão de 64 bits do Ubuntu, precisará instalar algumas bibliotecas de 32 bits com o seguinte comando:
Se você estiver executando o Fedora de 64 bits, o comando é:
fonte