Android no ChromeOS Flex: Passo a Passo com Waydroid
Leitura: ~26 min Feito com Master Rules Claude v9.4
TL;DR
- O ChromeOS Flex não tem Android nem Google Play, mas a máquina virtual Linux dele (Crostini) aceita o Waydroid, que roda um Android completo em contêiner.
- O caminho tem cinco etapas: preparar o Linux, obter um kernel com Binder (compilado ou pré-compilado), iniciar a VM com ele, rodar o instalador e abrir o Android com o comando start-waydroid.
- A solução é comunitária, sem suporte da Google; o guia de referência foi testado no ChromeOS Flex v134.0.6998.130, então confira cada passo antes de repetir na sua versão.
Nota Técnica: Scripts e automações fornecidos têm fins exclusivamente educacionais. Teste sempre em ambiente controlado. @CanalQb não se responsabiliza por danos, perdas ou bloqueios decorrentes do uso indevido.
O Flex não traz Android, mas o Linux dele consegue rodar um completo.
A Google deixou o subsistema Android e a Play Store de fora do ChromeOS Flex, e a maior parte dos tutoriais que prometem "ativar" o recurso termina em uma instalação de outro sistema por cima do seu. Existe um caminho que mantém o Flex no lugar e usa apenas a máquina virtual Linux que já vem nele.
Esse caminho depende de um detalhe de kernel que quase todo mundo pula e que decide se o Android vai abrir ou travar na primeira tela. Ele aparece já no primeiro passo, e a explicação vem junto com cada comando.
Quais são as soluções rápidas para os problemas mais comuns?
Os travamentos mais frequentes nesse procedimento vêm de ordem errada de comandos, caminho de arquivo incorreto e código copiado de uma tradução automática. Cada item abaixo traz a correção imediata e aponta para a explicação completa no bloco de erros no fim do post.
- vm_start com timeout: rode vmc stop termina antes de iniciar a VM com o kernel novo. ver passo completo
- Terminal abre como penguin: o kernel customizado não foi carregado; confira o caminho do bzImage. ver passo completo
- Avisos GetAcpiSysfsPath: aparecem até em tentativas que funcionam; não pare por causa deles. ver passo completo
- cd cro-kernel não existe: o diretório correto é cros-kernel, com o s. ver passo completo
- Aviso de dispositivo não certificado: registre o Android ID na página oficial do Google. ver passo completo
Por que o ChromeOS Flex não roda apps Android e como o Waydroid resolve isso?
O ChromeOS Flex não inclui o subsistema Android nem a Google Play, recursos reservados a Chromebooks certificados. O Waydroid contorna essa lacuna rodando um Android completo dentro de um contêiner Linux, aproveitando que a máquina virtual Linux (Crostini) continua disponível no Flex, desde que o kernel dela ganhe suporte ao Binder.
A própria Google lista essa diferença entre Flex e ChromeOS em Chromebooks: no Flex não há apps Android nem Play Store, e o suporte ao ambiente de desenvolvimento Linux varia conforme o modelo do computador. Por isso, os tutoriais mais antigos sugerem desinstalar o Flex e instalar o Brunch, um projeto comunitário que substitui o sistema. Serve para quem aceita apagar o que tem, mas não para quem quer manter o Flex oficial, com as atualizações automáticas da Google.
O Waydroid segue outra lógica. Segundo a documentação oficial, ele usa namespaces do Linux (user, pid, uts, net, mount e ipc) para isolar um Android completo em um contêiner, com acesso direto ao hardware necessário. A imagem de Android que ele usa é derivada do LineageOS e, hoje, está baseada no Android 13. Em vez de emular um celular inteiro, o sistema compartilha o kernel do anfitrião, o que costuma dar um desempenho muito melhor do que um emulador tradicional.
Para entender onde cada peça se encaixa, veja as camadas que vamos montar:
| Camada | Função | Quem mantém |
|---|---|---|
| ChromeOS Flex | Sistema do computador, responsável por criar e iniciar a máquina virtual Linux | |
| Termina (VM Linux) | Máquina virtual leve que hospeda os contêineres; é o kernel dela que vamos trocar | Google, com o kernel substituído por você |
| Contêiner penguin | O terminal Linux (Debian) que você abre pelo app Terminal | |
| Waydroid + imagem Android | Android completo em contêiner, com janelas integradas ao ChromeOS | Projeto Waydroid e autores das imagens |
O ponto crítico é o Binder, o mecanismo de comunicação entre processos que o Android usa para quase tudo, do gerenciador de janelas aos serviços do sistema. O kernel oficial do Crostini não o inclui, e o guia de referência trata o suporte a ele como requisito para o Android funcionar direito. Daí vem o plano inteiro: compilar (ou baixar) um kernel com Binder, iniciar a VM com ele e deixar um instalador preparar o contêiner.
Uma exceção importante: se o seu modelo de computador não oferece a opção de Linux em Configurações, nada do que vem a seguir é aplicável. Verifique isso antes de gastar tempo com compilação.
O que você precisa ter antes de começar?
Você precisa de ChromeOS Flex com o ambiente Linux (Crostini) instalado, aceleração de GPU ativada para o Crostini pela flag chrome://flags#crostini-gpu-support e cerca de 3 GB livres dentro da máquina virtual Linux. Computador com processador x86-64, 4 GB de RAM e 16 GB de armazenamento é o mínimo oficial do Flex.
Esses números vêm de duas fontes: o guia de referência, que fala em Linux ativo, GPU habilitada e 3 GB livres, e os requisitos de instalação do próprio Flex divulgados na época do lançamento. Eles são o piso, e quem vai compilar o kernel deve tratar o espaço como o recurso mais barato de sobrar. A compilação gera muitos arquivos intermediários, então reservar uma folga além dos 3 GB evita repetir o processo no meio. Essa folga é uma recomendação nossa, não uma exigência do guia original.
- Ative o Linux (se ainda não estiver ativo). Abra Configurações, vá em Sobre o ChromeOS, depois em Desenvolvedores, e ao lado de Ambiente de desenvolvimento Linux clique em Configurar. O assistente baixa o ambiente e cria o contêiner Debian. Sem esse passo, não existe máquina virtual para receber o kernel novo. Quando terminar, o app Terminal abre com um prompt de usuário. Se a opção não aparecer, o modelo do seu computador provavelmente não oferece suporte, e o guia termina aqui.
- Ative a aceleração de GPU. Digite chrome://flags#crostini-gpu-support na barra de endereço, mude a flag para Enabled e reinicie o navegador quando o ChromeOS pedir. O comando de boot da VM usa o parâmetro --enable-gpu, e a flag é o que permite essa aceleração existir. Sem ela, o Android abre sem renderização acelerada e fica lento. Depois do reinício, a flag aparece como Enabled.
- Confira o espaço livre. No Terminal Linux, rode df -h /. A coluna Avail mostra o espaço disponível dentro da VM. Se estiver apertado, aumente o disco em Configurações, Desenvolvedores, Ambiente de desenvolvimento Linux, Gerenciar armazenamento. Sem espaço, a compilação falha tarde, depois de muito tempo gasto.
- Anote a versão do ChromeOS e do kernel. Em Configurações, Sobre o ChromeOS, veja o número da versão; no Terminal Linux, rode uname -r. O guia foi testado no ChromeOS Flex v134.0.6998.130 e escrito para a série 6.6 do kernel. Se a sua versão for bem mais nova, trate cada passo como hipótese a confirmar.
Faça também um backup do que importa dentro do Linux. Trocar o kernel da VM não deveria apagar os arquivos do contêiner, mas qualquer experimento com a camada de virtualização é um bom motivo para ter cópia dos seus projetos em outro lugar.
Erro comum: pular a flag de GPU porque "o Android abre mesmo assim". Abre, mas sem aceleração, e o resultado é uma interface que engasga. Se isso acontecer depois, volte à flag antes de culpar o Waydroid.
Como instalar as dependências de compilação e as ferramentas LLVM?
Instale os pacotes de compilação do Debian (build-essential, bc, flex, bison, libelf-dev e git) e depois o conjunto LLVM versão 18, criando links simbólicos para clang, ld.lld e as demais ferramentas. O kernel será compilado com o parâmetro LLVM=1, que exige essas ferramentas no caminho padrão do sistema.
Este é o primeiro bloco de comandos do procedimento de compilação. Se você preferir pular a compilação e usar um kernel pré-compilado, vá direto para a seção sobre essa alternativa, mais adiante.
- Instale as dependências básicas. Abra o Terminal Linux e rode o comando abaixo. O apt update atualiza a lista de pacotes; o apt install traz o compilador e as bibliotecas que o kernel pede: flex e bison geram analisadores usados no processo de build, bc faz cálculos de configuração, libelf-dev lê arquivos ELF e git baixa o código-fonte. Sem eles, o make para logo no começo com mensagens de arquivo ausente. Quando funciona, o apt termina sem erro e devolve o prompt.
sudo apt update && sudo apt install build-essential bc flex bison libelf-dev git - Instale o LLVM 18 e crie os links. O script oficial apt.llvm.org adiciona o repositório e instala a versão pedida. O laço for cria, em /usr/bin, um link com o nome genérico (clang, ld.lld e outros) apontando para a versão 18, porque o kernel procura as ferramentas sem número de versão. Sem os links, o make reclama que o clang não foi encontrado.
LLVM_VERSION=18 curl -L https://apt.llvm.org/llvm.sh | sudo bash -s "${LLVM_VERSION}" for f in clang clang++ ld.lld llvm-objdump llvm-ar llvm-nm llvm-strip llvm-objcopy llvm-readelf; do sudo ln -sf $f-$LLVM_VERSION /usr/bin/$f done - Prefira baixar o script antes de executar (opcional). O comando acima executa como administrador um script baixado da internet, em uma única linha. Se quiser ler o conteúdo primeiro, baixe o arquivo, abra com less e só então rode. É o mesmo efeito, com a vantagem de você ter visto o que vai acontecer.
curl -L https://apt.llvm.org/llvm.sh -o llvm.sh less llvm.sh sudo bash llvm.sh 18 - Confirme o resultado. Rode clang --version. O esperado é uma linha informando a versão 18 do clang. Se aparecer "comando não encontrado", os links simbólicos do passo 2 não foram criados e o laço precisa ser repetido.
$f - $LLVM_VERSION). Nada disso funciona. No bash, as palavras corretas são for, in, do e done, sem espaços dentro das variáveis. Copie os blocos desta página, não de textos traduzidos.Erro comum: rodar o script do LLVM sem conexão estável. Se o download cair no meio, o apt deixa o repositório pela metade e o passo seguinte falha com mensagens de pacote não encontrado. Repita o comando; o script é seguro de reexecutar.
Como baixar o código do kernel, ativar o Binder e compilar?
Clone o ramo chromeos-6.6 do repositório de kernel da Google, gere a configuração da VM Termina com o script prepareconfig, abra o menuconfig, habilite o Android Binder IPC Driver e o sistema de arquivos Binderfs, e compile com make bzImage. O resultado é o arquivo arch/x86/boot/bzImage.
Antes de clonar, vale uma checagem rápida: o guia de referência foi escrito para o ramo 6.6. Se o uname -r do seu Terminal Linux mostrar outra série, procure o ramo correspondente no repositório antes de seguir. Não testamos outras séries, então essa é uma cautela, não uma garantia.
- Baixe o código-fonte. O parâmetro --depth=1 traz só o último estado do ramo, sem o histórico, o que economiza tempo e disco. O -b escolhe o ramo chromeos-6.6 e o nome final da pasta será cros-kernel.
git clone https://chromium.googlesource.com/chromiumos/third_party/kernel cros-kernel -b chromeos-6.6 --depth=1 - Prepare a configuração. A variável CHROMEOS_KERNEL_FAMILY=termina seleciona a família do kernel usado na VM Linux, e container-vm-x86_64 é o perfil de configuração dela. O olddefconfig completa as opções novas com valores padrão. Atenção ao nome da pasta no cd: é cros-kernel, com s.
cd cros-kernel CHROMEOS_KERNEL_FAMILY=termina ./chromeos/scripts/prepareconfig container-vm-x86_64 make LLVM=1 LLVM_IAS=1 olddefconfig - Habilite o Binder no menuconfig. Rode make LLVM=1 LLVM_IAS=1 menuconfig. Na interface de texto, navegue assim: entre em Device Drivers, desça até Android (perto do fim da lista), entre em Android Binder devices, marque Android Binder IPC Driver com a barra de espaço, pressione Enter e apague todo o texto da caixa que aparece, confirmando com Ok. Depois marque Android Binderfs filesystem, também com a barra de espaço. Com as setas esquerda e direita, escolha Save, depois Ok, e em seguida Exit até voltar ao prompt.
make LLVM=1 LLVM_IAS=1 menuconfig - Compile. O -j$(nproc) usa todos os núcleos do processador. O tempo varia muito conforme o hardware, e o guia de referência apenas avisa que pode demorar. Deixe o computador na tomada e não feche o Terminal. Ao final, o comando termina sem erro e o arquivo bzImage existe.
make LLVM=1 LLVM_IAS=1 bzImage -j$(nproc) - Copie o kernel para um lugar acessível. O comando coloca o bzImage na pasta pessoal do Linux, que aparece no app Arquivos em Arquivos Linux. De lá você o move para Meus arquivos, onde o ChromeOS enxerga o arquivo ao iniciar a VM.
cp arch/x86/boot/bzImage ~/
Por que apagar o texto da caixa do Binder? Essa caixa guarda a lista de nomes dos dispositivos Binder criados de forma fixa pelo kernel. Esvaziá-la deixa a criação desses dispositivos para o Binderfs, o sistema de arquivos que o instalador monta mais tarde. Esta é a nossa leitura da lógica do guia, que dá a instrução sem explicar o motivo.
Erro comum: salvar o menuconfig sem ter marcado as duas opções. O make segue normalmente, mas o kernel sai sem Binder e o instalador falha adiante, depois de todo o tempo de compilação. Reabra o menuconfig e confira as duas marcações antes de compilar.
Vale a pena usar o kernel pré-compilado em vez de compilar?
Vale quando o objetivo é testar rápido e você aceita confiar em um binário de terceiros. O autor do guia mantém um repositório de kernels prontos para o Crostini, e usar um deles elimina as etapas de compilação. Compilar você mesmo é mais lento, mas dá controle sobre o que roda como kernel da sua máquina virtual.
O guia original oferece essa saída logo no começo do Passo 1, em uma nota que sugere baixar o kernel pronto e pular para a etapa seguinte. Os arquivos ficam na página de releases do repositório crostini-binder-kernel, na conta do autor. Não conseguimos abrir essa página durante a pesquisa deste post, portanto o nome exato do arquivo e a versão do kernel contida ali precisam ser conferidos por você antes do download.
| Critério | Compilar o kernel | Kernel pré-compilado |
|---|---|---|
| Tempo | Longo; depende do processador | Poucos minutos de download |
| Controle e auditoria | Total: você escolhe o ramo e as opções | Nenhum; é um binário de terceiros |
| Compatibilidade com sua versão | Você ajusta o ramo se necessário | Precisa bater com o kernel que o ChromeOS espera {verificar} |
| Espaço em disco | Alto, por causa dos arquivos de build | Baixo |
A linha da compatibilidade merece atenção. O kernel da VM é iniciado pelo ChromeOS com o parâmetro --kernel, então qualquer divergência grande entre o que o sistema espera e o que você entrega pode resultar em uma VM que nem sobe. Se optar pelo pré-compilado, compare a versão publicada com a série que o seu uname -r mostra e, em caso de dúvida, compile.
Há ainda uma terceira via para quem usa Nix: o repositório nixos-crostini, de outro autor, descreve um ambiente reprodutível para compilar kernels com Binder e Ashmem, mas ele mira a VM do tipo Baguette (comando vmc start com --vm-type BAGUETTE), um caminho diferente do que seguimos aqui. Mencionamos para completar o mapa, sem recomendá-lo para quem está começando.
Exceção prática: se você já compilou uma vez, guarde o bzImage em outra pasta. Ele serve para reinstalar o ambiente sem repetir a compilação, desde que o ChromeOS continue aceitando aquele kernel.
Como iniciar a máquina virtual Linux com o kernel customizado?
Abra o shell crosh com Ctrl+Alt+T, desligue a VM com vmc stop termina e inicie com vmc start termina --enable-gpu --kernel seguido do caminho do bzImage dentro de /home/chronos/user/MyFiles. Se der certo, o prompt vira (termina) chronos@localhost, indicando que você está no shell da VM, não no contêiner penguin.
- Mova o bzImage para Meus arquivos. No app Arquivos, copie o bzImage de Arquivos Linux para uma pasta em Meus arquivos, por exemplo uma pasta chamada kernel. O caminho que o crosh enxerga para Meus arquivos é /home/chronos/user/MyFiles, e é nele que o comando seguinte vai procurar. Resultado esperado: o arquivo aparece em Meus arquivos, na pasta que você criou.
- Abra o crosh e desligue a VM. Pressione Ctrl+Alt+T. O comando vmc stop termina encerra a máquina virtual atual. Esse passo é obrigatório: um usuário relatou no Gist do guia o erro de timeout ao iniciar a VM, e a resposta de outro usuário foi lembrar de rodar o vmc stop termina antes.
vmc stop termina - Inicie com o kernel novo. O parâmetro --enable-gpu liga a aceleração e o --kernel aponta para o seu arquivo. Troque o caminho pelo local real. No exemplo, o kernel está em Meus arquivos, na pasta kernel.
vmc start termina --enable-gpu --kernel /home/chronos/user/MyFiles/kernel/bzImage - Reconheça o prompt certo. O guia descreve o prompt esperado como (termina) chronos@localhost ~ $. Textos traduzidos escrevem "(terminal)", o que confunde. Se, em vez disso, você cair em um prompt com o seu nome e a palavra penguin, a VM iniciou com o kernel padrão e o passo precisa ser revisto.
Uma checagem que o guia não traz e que sugerimos como diagnóstico: com o prompt (termina) à frente, rode uname -r e grep binder /proc/filesystems. Na teoria, o segundo comando deve listar o Binder se o kernel foi compilado com Binderfs; sem retorno, o kernel customizado não está em uso. Não executamos esses comandos neste guia, então trate o resultado como pista, não como veredito.
Sobre as mensagens de erro de ACPI (GetAcpiSysfsPath) que aparecem ao iniciar: em um dos comentários do Gist, elas surgem mesmo na tentativa que chega ao shell. Isso indica que, por si só, essas linhas não significam falha, algo coerente com o fato de o Flex não ser um Chromebook com firmware próprio da Google.
Limitação: esse boot manual vale só para a sessão atual. Ao reiniciar o ChromeOS, a VM volta ao kernel padrão e este passo precisa ser repetido, a não ser que você automatize como mostramos adiante.
Como rodar o instalador do Waydroid e escolher a versão do Android?
Com o prompt (termina) ativo, baixe e execute o script 01-setup_lxd.sh do repositório ChromeOS-Waydroid-Installer. Ele configura permissões de dispositivos, monta o Binder filesystem, instala o Waydroid e pergunta qual Android instalar: 1 (Android 11, imagem oficial), 2 (Android 13, não oficial) ou 3 (Android 13 TV, não oficial).
O repositório, mantido pelo mesmo autor do guia, descreve o conteúdo como scripts para instalar o Waydroid no Crostini e no ChromeOS Flex, sob a licença GPL-3.0. A lista do que o instalador faz vem do guia de referência: ajusta as permissões de dispositivos de caractere e bloco para o contêiner, monta o Binder filesystem e cria dispositivos de loopback, instala o Waydroid, prepara o Cage para o Waydroid usar e instala scripts personalizados.
- Leia o script antes de executar (recomendado). O comando original usa curl com pipe para o bash, executando o que vier da internet sem você ver. Baixar para um arquivo e abrir com less leva trinta segundos e mostra o que será feito. Resultado: você sabe, linha a linha, o que vai rodar na sua VM.
curl -L https://github.com/supechicken/ChromeOS-Waydroid-Installer/raw/refs/heads/main/installer/01-setup_lxd.sh -o 01-setup_lxd.sh less 01-setup_lxd.sh - Execute o instalador. O parâmetro -e interrompe o script ao primeiro erro e o -u trata variável indefinida como erro. Isso evita que o instalador siga em frente depois de uma falha silenciosa. O comando equivalente ao do guia, em uma linha, é o curl com pipe para bash -eu.
bash -eu 01-setup_lxd.sh - Escolha a versão do Android. Quando o prompt perguntar, digite o número da opção. Na primeira tentativa, a opção 1 é a mais prudente: as outras duas são imagens não oficiais de um autor independente, e quando algo quebra fica mais difícil saber se o problema é o seu ambiente ou a imagem.
- Leia a saída final. O guia pede explicitamente para ler as informações impressas na tela ao fim da instalação. Elas trazem instruções específicas da sua instalação, e pular essa leitura é a causa mais provável de dúvidas depois.
Uma observação sobre o rótulo oficial. A documentação do Waydroid informa que a imagem que ele distribui está atualmente baseada no Android 13, enquanto o instalador chama de oficial a imagem do Android 11. Não assuma que os dois significam a mesma coisa: confira o texto que o instalador exibir e decida pela primeira tentativa em cima dele.
Erro comum: rodar o instalador no contêiner penguin em vez do shell da VM. Os ajustes de permissão do instalador acontecem na camada da máquina virtual, e por isso o prompt precisa ser (termina). Se o prompt for o de penguin, volte ao passo de boot.
Como abrir o Android e instalar aplicativos?
Depois da instalação, rode start-waydroid dentro do Crostini para iniciar o Android. Com ele ativo, os comandos oficiais do Waydroid cuidam do resto: waydroid app install arquivo.apk instala um aplicativo, waydroid app launch abre pelo nome do pacote, waydroid app list mostra os instalados e waydroid show-full-ui exibe o Android em tela cheia.
O start-waydroid é um script próprio do instalador, descrito no guia como o comando que inicia o Android quando a instalação termina. Os demais comandos vêm da documentação oficial do Waydroid e valem para qualquer instalação dele. A tabela resume os principais.
| Comando | O que faz |
|---|---|
| waydroid status | Verificação rápida do estado do Waydroid |
| waydroid app install xyz.apk | Envia um pacote ao contêiner e o instala |
| waydroid app launch com.foo.bar | Abre o aplicativo pelo nome do pacote Android |
| waydroid app list | Lista os aplicativos instalados |
| waydroid show-full-ui | Mostra o Android inteiro em uma janela |
| waydroid log | Acompanha o arquivo de log do Waydroid |
| waydroid session stop | Encerra a sessão do Android |
- Inicie o Android. Abra o Terminal Linux e rode start-waydroid. A primeira abertura costuma ser a mais demorada, porque o sistema inicializa pela primeira vez. Quando funciona, uma janela do Android aparece integrada ao ChromeOS.
start-waydroid - Instale um aplicativo. Baixe um APK e use o comando de instalação. A documentação alerta que muitos APKs na internet trazem só suporte a ARM e não funcionam em máquinas x86_64, como a maioria dos computadores com Flex. Procure a versão compatível ou use a F-Droid, loja alternativa recomendada pela própria documentação.
waydroid app install xyz.apk waydroid app list waydroid app launch com.foo.bar - Guarde logs para pedir ajuda. Se algo falhar, redirecione o log para um arquivo e anexe ao pedido de suporte. A documentação mostra esse formato de uso.
waydroid log > ~/waydroid-log.txt
Limitação: a Play Store só existe se a imagem instalada for do tipo GAPPS. Não confirmamos se as imagens oferecidas pelo instalador incluem os serviços do Google {verificar}. Se a sua não incluir, a alternativa é a F-Droid e o uso direto de APKs.
Como automatizar tudo para não repetir o boot a cada reinicialização?
Instale a extensão ChromeOS AutoStart e crie duas entradas: uma do tipo ChromeOS shell (crosh) com o comando vmc start termina --enable-gpu --kernel e o caminho do bzImage, e outra do tipo ChromeOS VM (crosvm) com o comando start-waydroid. Assim, a VM sobe com o kernel certo e o Android abre sozinho depois de cada reinício do ChromeOS.
A necessidade vem de um fato simples: o kernel customizado só vale para a sessão em que foi iniciado. Em cada reinício, a VM sobe de novo com o kernel padrão, sem Binder, e o Android não funciona até você repetir o boot manual. O guia chama essa automação de opcional, mas recomendada, e nós concordamos. A extensão é um projeto do mesmo autor do guia e do instalador.
- Instale a extensão ChromeOS AutoStart. Siga as instruções de instalação do repositório ChromeOS-AutoStart. Quando a instalação termina, a janela de configuração da extensão abre sozinha. Sem ela, você não consegue criar as entradas dos próximos passos.
- Crie a entrada do kernel. Clique em Add a new entry, escolha ChromeOS shell (crosh) em Autostart type, digite no campo Commands o comando de boot da VM com o caminho real do seu bzImage e clique em Save. Esta entrada deve existir antes da do Android, porque o Android depende da VM já estar com o kernel certo.
vmc start termina --enable-gpu --kernel /home/chronos/user/MyFiles/kernel/bzImage - Crie a entrada do Android. Clique de novo em Add a new entry, escolha ChromeOS VM (crosvm) em Autostart type, digite start-waydroid em Commands e clique em Save. O guia de referência numera as duas partes como Passo 4; aqui elas são os passos 2 e 3 desta lista.
- Teste com um reinício. Reinicie o computador, espere o ChromeOS carregar e confira se o Android abre. Se não abrir, rode o boot manual uma vez e verifique o caminho do bzImage na entrada do crosh, que é a causa mais comum.
Exceção e risco: uma extensão que roda comandos no shell do ChromeOS é uma ferramenta poderosa. Instale somente a partir do repositório indicado e revise o que cada entrada executa. Se você mudar o bzImage de pasta, lembre de atualizar a entrada, ou a VM voltará ao kernel padrão sem aviso.
Como resolver o aviso de dispositivo não certificado do Google Play Protect?
Se a imagem tiver serviços do Google, o primeiro uso exibe um aviso de que o dispositivo não é certificado. A documentação oficial do Waydroid resolve com três etapas: ler o Android ID com um comando sqlite3, registrá-lo na página google.com/android/uncertified e reiniciar a sessão do Waydroid depois de alguns minutos.
Esta seção só se aplica se a imagem instalada incluir a Google Play, algo que a documentação associa às imagens GAPPS. Como não verificamos o conteúdo das imagens do instalador, confirme primeiro se o aviso aparece para você.
- Leia o Android ID. O comando abaixo abre um shell no contêiner, consulta o banco de dados dos serviços do Google e imprime uma sequência de números. Essa sequência identifica o seu Android virtual. Resultado esperado: uma linha com um número longo.
sudo waydroid shell -- sh -c "sqlite3 /data/data/*/*/gservices.db 'select value from main where name = \"android_id\";'" - Registre o dispositivo. Acesse a página google.com/android/uncertified, entre na sua conta Google e cole o número. O registro vincula esse Android virtual à sua conta, o que reduz o aviso sobre dispositivo não certificado. Faça isso apenas com uma conta que você aceite associar a esse ambiente.
- Aguarde e reinicie a sessão. Os serviços do Google levam alguns minutos para refletir a mudança. Depois, encerre a sessão e abra o Android de novo. O aviso deve sumir; se continuar, aguarde mais um pouco antes de repetir.
waydroid session stop
Erro comum: registrar o número errado. Se o comando imprimir várias linhas, use o valor que aparece como Android ID e não misture com outros textos. Se o comando retornar vazio, o banco de dados ainda não foi criado, o que costuma significar que o Android ainda não terminou a primeira inicialização.
Limitação: o Play Protect é uma proteção da Google sobre aplicativos. Registrar o dispositivo não transforma o Waydroid em um aparelho certificado, e apps que dependem de verificações de integridade de dispositivo podem continuar se recusando a abrir. Não prometemos compatibilidade com nenhum aplicativo específico.
Quais são os limites e riscos reais dessa solução?
É uma solução comunitária, sem suporte da Google, testada pelo autor do guia no ChromeOS Flex v134.0.6998.130. Ela depende de substituir o kernel da máquina virtual Linux, de rodar scripts baixados da internet e de o seu modelo de computador suportar o Linux no Flex. Algumas pessoas relataram nos comentários do guia que não conseguiram fazer o kernel customizado inicializar.
Vale detalhar cada limite, porque eles definem quando faz sentido tentar.
Idade do teste. O guia cita a v134.0.6998.130 como versão testada, e o Gist mostra atividade até 31 de maio de 2026. A versão do ChromeOS Flex que você usa hoje provavelmente é mais nova. Mudanças no kernel da VM, nos parâmetros do vmc ou no formato do caminho de arquivos podem exigir ajustes que este post não conhece.
Suporte variável. A Google informa que o suporte ao ambiente Linux no Flex varia por modelo. Em hardware sem esse suporte, não há VM para receber o kernel.
Código de terceiros. O kernel pré-compilado, os scripts do instalador, as imagens de Android não oficiais e a extensão de automação vêm de uma mesma pessoa e de um projeto pequeno. Leia o que for possível, prefira compilar o kernel você mesmo e comece pela imagem oficial.
Casos sem solução registrada. No Gist, dois usuários descreveram que a VM sobe com o shell de penguin, sem o kernel novo, e a conversa terminou sem resposta que resolva. Isso significa que há cenários em que o método falha por motivos ainda desconhecidos. Se você cair em um deles, a saída é abrir uma questão no repositório do instalador, anexando versão do ChromeOS, caminho usado e saída dos comandos.
Alternativas. Para quem precisa de Play Store certificada e suporte oficial, o caminho confiável é um Chromebook com subsistema Android. Quem aceita trocar de sistema pode avaliar o Brunch, mencionado pelo guia, ciente de que ele substitui o Flex. Não avaliamos o Brunch neste post.
Perguntas frequentes sobre Android no ChromeOS Flex
O ChromeOS Flex tem suporte oficial a aplicativos Android?
Posso usar este guia em um Chromebook comum?
Eu preciso compilar o kernel ou posso baixar um pronto?
Preciso repetir o boot com o kernel customizado a cada reinício?
Qual versão do Android escolher no instalador: 11 ou 13?
Dá para usar a Google Play dentro do Waydroid no Flex?
{Erros e Soluções}
Os erros mais frequentes neste procedimento envolvem o boot da VM, o caminho do kernel e comandos copiados de traduções. Cada card traz a mensagem exata, a causa provável, a correção e como evitar a repetição.
Error: operation `vm_start` failed: timeout while waiting for a signal
Causa: relatada no Gist do guia, a mensagem aparece quando o comando de início é executado sem a VM anterior ter sido parada. A resposta de outro usuário na mesma conversa foi justamente lembrar do vmc stop termina. É a explicação mais provável, mas não confirmamos em hardware próprio.
Solução: no crosh, rode vmc stop termina e depois repita o vmc start termina --enable-gpu --kernel com o caminho correto do bzImage. Se o erro persistir, verifique se o arquivo existe em Meus arquivos e se o nome está escrito exatamente igual.
Prevenção: sempre execute o stop primeiro e copie o caminho do arquivo em vez de digitá-lo.
O terminal abre como usuario@penguin:~$ em vez de (termina) chronos@localhost
Causa: a VM iniciou com o kernel padrão e não com o seu bzImage. Dois usuários descreveram esse sintoma no Gist; a conversa foi encerrada sem uma solução registrada, então não há causa confirmada. As hipóteses mais prováveis são caminho incorreto, arquivo fora de Meus arquivos ou VM que não foi parada antes.
Solução: pare a VM, confirme que o bzImage está em Meus arquivos, confirme o caminho com o prefixo /home/chronos/user/MyFiles e rode o start de novo. Depois de iniciar, use uname -r e grep binder /proc/filesystems no shell da VM para verificar. Se ainda falhar, abra uma questão no repositório do instalador com a versão do ChromeOS e o caminho usado.
Prevenção: mantenha o kernel em uma pasta simples, sem espaços e sem acentos no nome.
ERROR: GetAcpiSysfsPath: Failed to get ChromeOS ACPI sysfs path VDAT
Causa: aviso emitido pelo crosh ao iniciar a VM em máquinas que não têm o firmware de um Chromebook. Nas saídas coladas pelos usuários no Gist, as linhas aparecem tanto em uma tentativa que falhou quanto em outra que chegou ao shell, o que mostra que elas sozinhas não indicam falha.
Solução: ignore essas linhas e olhe o que vem depois. O sinal de sucesso é o prompt da VM; o de falha, uma linha de erro como a do timeout.
Prevenção: não pare o procedimento ao ver esse aviso. Compare sempre com o prompt final.
bash: cd: cro-kernel: No such file or directory
Causa: o diretório criado pelo git clone se chama cros-kernel, com s, mas versões traduzidas do guia escrevem cro-kernel. O nome está errado por erro de digitação na tradução.
Solução: use cd cros-kernel. Se estiver em outro diretório, volte à pasta onde rodou o git clone com cd ~ e liste com ls para ver o nome real.
Prevenção: copie os comandos desta página em vez de textos traduzidos, e confira o nome da pasta com ls antes de entrar nela.
Aviso: o dispositivo não é certificado pelo Google Play Protect
Causa: o Android do Waydroid não é um aparelho certificado, então a Google mostra o aviso na primeira vez que os serviços do Google são usados, segundo a documentação oficial do Waydroid.
Solução: leia o Android ID com o comando sqlite3 da documentação, registre o número em google.com/android/uncertified, aguarde alguns minutos e rode waydroid session stop antes de abrir de novo.
Prevenção: faça o registro logo depois da primeira inicialização, antes de instalar aplicativos que dependam dos serviços do Google.
O APK instala, mas o aplicativo não abre
Causa: a documentação do Waydroid alerta que muitos APKs encontrados na internet têm apenas suporte a ARM e, por isso, não funcionam em máquinas x86_64, o caso da maioria dos computadores com Flex.
Solução: procure uma versão do aplicativo compatível com x86_64 ou instale pela F-Droid, indicada pela documentação como forma de obter aplicativos de modo gráfico.
Prevenção: antes de baixar um APK, confira se o fornecedor lista arquiteturas compatíveis.
Gostou do passo a passo? Veja mais tutoriais de tecnologia e automação no canal @CanalQb no YouTube.
Conteúdo elaborado com apoio de inteligência artificial a partir das fontes listadas abaixo. Dúvidas de privacidade e conformidade: IAPP Global Privacy Directory.
Fontes e Referências
Consultas feitas em 07/11/2026. Dados de versão e comandos devem ser conferidos nas fontes oficiais antes de qualquer execução.
- Guia de referência: Bringing Android functionality to ChromeOS Flex with Waydroid (Gist)
- Instalador: supechicken/ChromeOS-Waydroid-Installer (GitHub)
- Kernels pré-compilados: supechicken/crostini-binder-kernel (releases)
- Documentação do Waydroid: docs.waydro.id
- Opções de linha de comando: Waydroid command line options
- Instalar e executar aplicativos: Install and Run Android Applications
- Certificação do Google Play: Google Play Certification (Waydroid)
- Dispositivos com Linux no ChromeOS: ChromeOS Systems Supporting Linux (Chromium)
- Ativar o Linux no Chromebook: Suporte Google — Linux no ChromeOS
- FAQ de Linux no ChromeOS: chromeos.dev — Linux on ChromeOS FAQ
- Diferenças do Flex: The Register — Chrome OS Flex is here
- Automação de inicialização: supechicken/ChromeOS-AutoStart (GitHub)
- Discussão da comunidade: r/ChromeOSFlex — guia do Waydroid no Flex
- Brunch (alternativa que substitui o sistema): sebanc/brunch (GitHub)