Como codificar no Android Studio de qualquer dispositivo com o projetor JetBrains

Procurando codificar remotamente no Android Studio? Confira o JetBrains Projector, a melhor maneira de executar o IntelliJ IDE da JetBrains em qualquer dispositivo.

JetBrains é a empresa por trás de alguns dos IDEs mais populares, incluindo IntelliJ IDEA, PyCharm e PhpStorm. Até o Android Studio, uma espécie de IDE interno do Google para desenvolvimento Android, é baseado no IntelliJ.

Embora os IDEs do IntelliJ sejam populares por um motivo (eles são bom), eles podem ser um pouco pesados ​​às vezes. O IntelliJ e o Android Studio podem consumir muitos recursos apenas por serem abertos, por exemplo. E se você estiver compilando algo, eles usarão ainda mais. Você também não pode (ainda) realmente executar coisas do JetBrains em dispositivos móveis, já que o JetBrains não possui compilações ARM facilmente acessíveis.

Então, o que acontece se você não tiver um computador potente ou nem mesmo tiver um computador? Normalmente, seria aqui que você procuraria outros IDEs que funcionem em ARM. Mas a JetBrains tem uma solução, chamada JetBrains Projector.

O que é um projetor?

Você provavelmente já ouviu falar de área de trabalho remota ou VNC antes. Ele permite interagir graficamente com um computador em uma rede local ou até mesmo na Internet. O Projetor JetBrains funciona um pouco como uma área de trabalho remota, mas sem algumas desvantagens.

Para usar o Projetor JetBrains, você precisa de um computador em algum lugar da Internet para hospedá-lo. Pode ser uma instância AWS ou um servidor doméstico. Você pode então conectar-se a ele a partir de qualquer navegador compatível, incluindo Chrome e Firefox móvel.

Mas em vez de exibir uma área de trabalho inteira e enviar um feed de vídeo de volta para um cliente conectado, O Projetor JetBrains envia as informações necessárias para que o cliente exiba um IDE como se estivesse exibindo localmente. Isso significa que não há compactação ou escala de resolução, então o IDE parece quase nativo.

Além disso, o JetBrains Projector não se limita apenas aos IDEs oficiais da JetBrains. Contanto que você tenha um IDE baseado em um da JetBrains, você pode usá-lo com o JetBrains Projector. Isso inclui o Android Studio.

Por que um projetor?

O maior motivo pelo qual você pode querer fazer desenvolvimento remoto é o que falei na introdução: E se você não tiver um computador poderoso baseado em x86? Você pode comprar um semi-poderoso especificamente para trabalho de desenvolvimento ou pode ativar um servidor em nuvem e usar o Projetor JetBrains.

Também pode ser útil se você quiser apenas aliviar os requisitos de recursos. Por exemplo, tenho um laptop para jogos bastante poderoso com um i7-9750H e 32 GB de RAM. Isso é suficiente até mesmo para os grandes projetos com os quais lido. Mas se eu quiser fazer outra coisa além do desenvolvimento que também consuma muitos recursos, como assistindo YouTube, jogando um jogo? Então as coisas começam a desmoronar.

Mas tenho um servidor Ryzen 7 5800X com 32 GB de RAM. Então instalei o JetBrains Projector nisso. Agora posso simplesmente abrir uma nova janela do Chrome e conectar-me a ela no meu laptop sem me preocupar em fazer malabarismos com recursos. O servidor também constrói muito mais rápido que meu laptop, então é uma situação ganha-ganha.

Como é usar um projetor?

O Projetor JetBrains deve ser hospedado em uma máquina Linux. Isso não significa que você não possa executá-lo no macOS ou no Windows com WSL, mas você pode encontrar alguns problemas estranhos por causa disso.

Para configurá-lo, tudo que você precisa fazer é ir até o Repositório GitHub do instalador do projetor e siga as instruções lá. Eles orientarão você na instalação das dependências e na configuração de um IDE. Existem até algumas etapas de solução de problemas do WSL, se você precisar delas.

Em seguida, você pode simplesmente conectar-se ao endereço do seu servidor usando a porta e o token corretos (se você definir um), e agora você tem um IDE em execução no seu dispositivo sem nenhum inchaço.

Desenvolvimento Android

Sou desenvolvedor Android, portanto, embora eu possa usar o IntelliJ IDEA para desenvolvimento, o Android Studio tende a funcionar melhor. Embora o JetBrains Projector suporte IDEs de terceiros, agora é tão simples quanto usar a interface de linha de comando integrada para baixá-los e instalá-los. Ainda é muito simples, no entanto.

Para usar o Android Studio com o projetor JetBrains, tudo que você precisa fazer é baixar e extrair o Android Studio em algum lugar adequado. Em seguida, você pode adicioná-lo manualmente ao projetor por meio da linha de comando, especificando o caminho.

Há também outro problema com o desenvolvimento e o projetor Android: a execução de aplicativos. Sem nada extra, você pode codificar aplicativos e visualizar visualizações no Projetor, mas não pode usar um emulador ou conectar-se a um dispositivo real para realmente executar e depurar aplicativos. Ou você pode?

É quase como se o Google esperasse que esse tipo de cenário acontecesse porque o ADB pode se conectar a um servidor remoto pela Internet. Tudo o que é necessário é um túnel SSH do cliente para o servidor do Projetor. Configurei o Android Studio no projetor para não tentar gerenciar o ADB e usar a porta 5038. Então eu apenas uso algum tipo de cliente SSH (OpenSSH, plink, etc) para criar um túnel que encaminha o servidor ADB rodando localmente na porta 5037 para o servidor na porta 5038. Fácil!

Tudo que você precisa é de um túnel SSH para o desenvolvimento adequado do Android.

Se você quiser mais detalhes sobre como fazer o Android Studio e o tunelamento SSH funcionarem, confira isto Documento GitHub por Joaquim Verges.

Uma observação sobre o Android Studio e outros IDEs de terceiros baseados em JetBrains: você não pode atualizá-los na tela do projetor. Você precisará acessar remotamente o servidor diretamente e atualizá-los a partir daí. Certifique-se de que a instância correspondente do projetor esteja parada antes de fazer isso.

Android Desenvolvimento Android

Como o JetBrains Projector é executado em um navegador e você pode se conectar a partir de algo como um telefone Android, como um exemplo completamente aleatório, eu queria tentar algo.

O Android 11 introduziu a capacidade de ativar ADB sem fio diretamente do dispositivo. Embora alguns fabricantes tenham exposto a configuração antes disso, ela não está disponível para todos os dispositivos certificados pelo Google, desde que estejam no Android 11 ou posterior. Embora a depuração sem fio deva ser usada em um computador, ela não precisa ser assim.

Aplicativos como Shizuku demonstre que é possível no Android 11 conectar-se com ADB ao seu dispositivo...a partir do seu dispositivo, sem sequer pensar em usar um computador. Embora Shizuku use isso para permitir que os aplicativos executem operações elevadas, acho que você provavelmente pode ver onde isso vai dar.

Então fiz um aplicativo! Não sei se algum dia tornarei isso público, mas é bem simples. Eu tenho uma biblioteca SSH junto com um binário ARM64 ADB. Eu uso o binário ADB para conectar-me ao dispositivo que estou usando e, em seguida, uso a biblioteca SSH para criar um túnel de encaminhamento do meu dispositivo para o servidor do Projetor. E, finalmente, eu o uso para armazenar e iniciar URLs de projetores.

Bam, desenvolvendo para Android...a partir de Android! Sempre que não estou em casa, mas quero trabalhar no desenvolvimento do Android, posso simplesmente pegar meu Samsung Galaxy Guia S7. Eu tenho um teclado Bluetooth e um mouse Bluetooth (nota lateral: se você estiver usando o Projetor, você realmente deseja usar um mouse ou trackpad. Ele não funciona bem com entrada por toque), então posso desenvolver e depurar sem precisar trocar de dispositivo e sem ter que carregar um laptop muito mais pesado.

Problemas

O Projetor JetBrains ainda está em desenvolvimento inicial, então não é perfeito.

  1. Às vezes, fica um pouco lento ao responder a coisas como rolar e arrastar, e os controles podem ficar instáveis.
  2. Aleatoriamente, ao visualizar o código da biblioteca (descompilado ou na visualização do código-fonte), o peso da fonte fica muito pesado e tudo fica lento. No entanto, isso pode ter sido corrigido no momento em que escrevi isto.
  3. Alguns plug-ins não funcionarão corretamente. Como este não é um stream de vídeo direto, plug-ins como os navegadores incorporados simplesmente não exibem nada.
  4. Não há suporte ao servidor X e provavelmente não haverá. Isso pode dificultar o desenvolvimento de aplicativos de desktop e navegador, mas você sempre pode usar um túnel SSH com encaminhamento X e um servidor X local se realmente precisar.
  5. Às vezes, a interface trava e você precisa atualizar a página ou até mesmo reiniciar o serviço do servidor para que funcione novamente.

E tem mais.

Mas tudo isso é um obstáculo? Certamente não para mim. Estou perfeitamente bem com uma experiência um pouco menos refinada (afinal, eu uso o Android Studio Canary), especialmente se isso significar que posso transferir todo o trabalho de compilação para outro computador e até mesmo desenvolver para meu tablet a partir do meu tábua.

Android Studio rodando em um Samsung Galaxy Tab S7 via projetor JetBrains

Mesmo com seus problemas, ainda gosto muito do Projetor JetBrains. Ele torna possível o desenvolvimento a partir de dispositivos móveis, move a carga de recursos de um computador local para um remoto e também é muito legal.

Eu sei que outros IDEs, como o Visual Studio, permitem descarregar a compilação para um computador remoto, mas isso ainda exige que você tenha o IDE instalado e em execução localmente.

Pessoalmente, estou muito animado para ver o que o Projetor JetBrains vai a partir daqui, porque já é incrível agora. Esperançosamente, eles serão capazes de corrigir alguns dos problemas que descrevi acima, mas mesmo agora, o Projetor deve ser seguro para uso em projetos prontos para produção.

Se você quiser experimentar o Projetor JetBrains, aqui está o link novamente para o instalador e guia de configuração inicial. Se você deseja configurar o Android Studio no projetor, aqui está o link novamente, também.