Olá, eu sou Maneshwar. Estou construindo o git-lrc, um revisor de código micro AI que funciona em cada commit. É gratuito e aberto na Github. Estrela o git-lrc para ajudar os desenvolvedores a descobrirem o projeto. Dê uma chance e compartilhe sua opinião.
Você fez isso.
A Netflix está tocando, algo na tela vale ser compartilhado, você pressiona printscreen e obtém um retângulo preto onde estava o vídeo.
O botão de play está lá. A barra de rolagem também.
O programa em si? Desapareceu.
A mesma coisa acontece com a gravação de tela, só que mais estranho.
Você olha diretamente para o vídeo enquanto ele toca, perfeitamente visível e colorido, e a gravação salva sai preta.
Suas vistas dizem uma coisa. O arquivo diz outra.
A maioria de nós arquiva isso como "a Netflix bloqueou" e continua com nossas vidas.
Mas o mecanismo por trás disso é mais estranho e honestamente, mais elegante do que "bloqueado".
Então vamos camada a camada.
The mental model I had is wrong
Aqui está o que eu assumi:
- Eu pressiono printscreen
- Algo detecta isso
- Esse algo pinta preto sobre a área protegida
- Eu obtenho uma imagem censurada
Razível. Também completamente errado.
Nada detecta nada. Nada pinta nada.
Sente-se com isso, porque o resto deste post se desenrola a partir disso.
Dois consumidores, dois compostos
Aqui está a ideia carregadora e me envergonha admitir que levei muito tempo para chegar nela: a tela e o gravador de tela não estão olhando para a mesma imagem.
Eu havia assumido que existia um framebuffer, uma "imagem canônica" do que o telefone atualmente parece, e que um printscreen era simplesmente uma cópia dela.
Não. SurfaceFlinger, o compositor do Android, não renderiza uma única imagem que todos compartilham.
Ele renderiza um composto separado por destino de saída.
O painel físico é um destino.
O serviço de printscreen é outro. Uma sessão de cast é a terceira.
Para cada destino, SurfaceFlinger percorre a lista de camadas e faz exatamente uma pergunta por camada: essa camada pertence a este saída? Para o painel, a resposta sempre é sim.
Para a saída do printscreen, qualquer camada carregando FLAG_SECURE é pulada.
Então a camada do vídeo nunca é removida da captura se não for adicionada.
Pelo que é preto especificamente
Aqui está a parte favorita.
O buffer de captura é alocado e zerado.
Camadas normais escrevem nele. A camada segura não escreve. Então o buffer é codificado e entregue.
Zeros são preto.
Isso é tudo. Ninguém escolheu preto.
Não há paintItBlack() sentado no AOSP.
O preto é simplesmente o que a memória não tocada parece quando você interpreta como pixels. O retângulo não está censurado, ele está vazio.
É a ausência de uma decisão.
Isto também explica algo que eu tinha visto centenas de vezes e nunca registrei: o preto é exatamente a forma do vídeo, e a UI ao redor dele sobrevive perfeitamente bem.
O botão de play, barra de rolagem, texto do título, tudo presente.
Eles são camadas separadas. Apenas uma delas tinha a flag.
Meu banco está fazendo isso também
Então eu fui e tirei uma captura de tela do meu aplicativo bancário.
O mesmo quadro preto. Gerenciador de senhas, o mesmo.
Screenshot de visualização de imagem no WhatsApp? O mesmo.
Aqui está toda a implementação:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.Para FLAG_SECURE, acredito que sim. É uma política, e o root possui a política. Passe no SurfaceFlinger, pare de honrar a bandeira, as capturas de tela voltam.
O Netflix HD é onde eu esgotar os recursos. Os quadros estão na TEE. O root te dá o kernel, mas o kernel não é quem está dizendo não. Então, o que realmente sai do outro lado?
Não tentei isso. Não tenho aparelhos extras para estragar.
Então, alguém já fez isso? Flashaholics, pessoas com ROM personalizada, o que vocês conseguiram?
Agentes de IA escrevem código rápido. Eles também removem silenciosamente lógicas, alteram comportamentos e introduzem bugs — sem te avisar. Você geralmente descobre isso em produção.
git-lrc resolve isso. Ele se conecta ao git commit e revisa cada diff antes que ele seja aplicado. Configuração de 60 segundos. Totalmente gratuito.
Toda feedback ou contribuição é bem-vinda! Está online, fonte disponível e pronto para qualquer um usar.




