Guia Passo-a-Passo: Corrigindo Problemas com o uiautomatorviewer
Tags: android, testing, kotlin, ui
Published: 2023-10-25 13:07:50

Olá, Devs Android! Se você já tentou automatizar testes de UI para seus aplicativos usando Espresso e UIAutomator, provavelmente já se deparou com a ferramenta `uiautomatorviewer`. Esta ferramenta é inestimável para entender e encontrar elementos da tela do app. No entanto, enfrentei um problema onde ela parou de funcionar. Neste artigo, vou guiá-los através dos passos que segui para resolver esse problema.

## O problema

Ao tentar executar o `uiautomatorviewer`, me deparei com o seguinte erro:
![Mensagem no terminal informando:Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7imqdn7qau7a225gty1t.png)

Após muita pesquisa e tentativa e erro, descobri que a solução se resume a dois passos principais.

## Passo 1: Alterar a versão do Java para 1.8

O primeiro passo é garantir que você esteja usando a versão 1.8 do Java. Mas, se você é como eu e trabalha em vários projetos com diferentes versões do Java, alternar entre elas pode ser uma dor de cabeça. Aqui é onde o `jenv` se torna útil.

### Configurando o `jenv`:

- Instale o `jenv` usando o Homebrew:
```bash
brew install jenv
```

- Adicione o caminho `jenv` e inicialize-o em seu shell (estou assumindo que você está usando zsh):
```bash
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
```

- Recarregue o shell para aplicar as alterações:
```bash
source ~/.zshrc
```

### Instalando e Definindo Java 8 com `jenv`:

1. Instale o Java 8:
```bash
brew install openjdk@8
```

2. Verifique as JVMs disponíveis no seu sistema:
```bash
/usr/libexec/java_home -V
```
Isto deverá mostrar as JVMs disponíveis, e você deverá encontrar uma linha semelhante a:
```
1.8.0_212, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
```

3. Adicione o Java 8 ao `jenv`:
```bash
jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
```
Ele deve confirmar com:
```
openjdk64-1.8.0.212 adicionado
1.8.0.212 adicionado
1.8 adicionado
```

4. Defina a versão do Java no sistema para Java 8:
```bash
jenv global 1.8
```

5. Verifique a versão do Java:
```bash
java -version
```
Agora, isso deve indicar que você está usando o Java 8.

E pronto! Você instalou e definiu o Java 8 como a versão padrão usando `jenv`.

## Passo 2: Baixando o novo arquivo SWT

Após fazer a alteração na versão do Java, me deparei com um segundo erro:
![Segunda mensagem de erro, dessa vez é um erro de interface do uiautomator](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hm9i883q67pyx8pmzc8e.png)
O próximo passo é baixar uma versão específica de um arquivo SWT que reside em um diretório específico do Android SDK.

1. **Baixar a versão 4.20 do `swt.jar`**:
   - Acesse: [Eclipse Downloads - swt-4.20-cocoa-macosx-x86_64.zip](https://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/R-4.20-202106111600/swt-4.20-cocoa-macosx-x86_64.zip).
2. **Extraia o swt.jar do arquivo baixado**
   - Dentro do arquivo zip existe um swt.jar.
3. **Renomear o arquivo extraído**:
   - Mude o nome do `swt.jar` baixado para `swt2.jar`.
4. **Copiar o arquivo renomeado**:
   - Mova o `swt2.jar` para o diretório `Android/sdk/tools/lib/x86_64/`.
   - **Importante**: Não substitua ou delete o arquivo original.
5. **Teste**:
   - Inicie o uiautomatorviewer para verificar se a atualização foi bem-sucedida.

> **Dica ao Iniciar o `uiautomatorviewer`**: Ao lançar o `uiautomatorviewer`, redimensione a janela.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zihq3i6uf0alarrif5jh.png)



## Conclusão

Com essas duas alterações, consegui fazer o `uiautomatorviewer` funcionar perfeitamente novamente. Espero que este guia ajude outros desenvolvedores que enfrentam o mesmo problema. Se você tiver dúvidas ou sugestões, sinta-se à vontade para deixar um comentário abaixo!

## Links

- [Issue no Github](https://github.com/android/android-test/issues/911#issuecomment-849389068)
- [Gist de gramcha](https://gist.github.com/gramcha/81dcec3f1e4ce8cffd7f248d3e2a42a7#fromHistory)
```