- A extração depende de um arquivo de mapeamento chamado proprietary-files.txt e scripts em Shell ou Python.
- Existem três tipos principais de pacotes para extração: baseados em arquivos, blocos (dat) e payload (bin).
- Ferramentas como sdat2img, brotli e lpunpack são essenciais para converter imagens de sistema em pastas montáveis.

Se você está mergulhando no mundo do desenvolvimento Android, provavelmente já se deparou com a necessidade de lidar com os chamados blobs proprietários. Basicamente, esses arquivos são drivers e bibliotecas fechadas do fabricante que o LineageOS não pode distribuir legalmente, mas que são essenciais para que o Wi-Fi, a câmera ou o Bluetooth do seu aparelho funcionem corretamente. A extração desses arquivos é um passo fundamental para quem deseja criar a árvore de dispositivos (device tree) e compilar a ROM do zero.
Existem caminhos diferentes para conseguir esses dados, dependendo se você já tem um aparelho com a ROM instalada ou se possui apenas o arquivo ZIP de instalação. A ideia é capturar esses binários de um ambiente controlado para que o sistema de build saiba exatamente o que copiar para a imagem final. Vamos detalhar agora como navegar por esse processo, que pode parecer confuso no início, mas é estritamente lógico.
A Estrutura dos Arquivos de Extração

Para que a extração ocorra, cada dispositivo precisa de um arquivo chamado proprietary-files.txt dentro de sua árvore. Este documento funciona como um mapa, listando cada blob necessário. Em alguns casos, você pode encontrar arquivos adicionais como o proprietary-files-qc.txt, embora isso seja mais uma herança de versões antigas e não haja real necessidade de separar as listas hoje em dia.
Dependendo da versão do LineageOS que você está utilizando, a ferramenta de extração muda. Para versões até a 21, utilizam-se scripts em shell como o extract-files.sh e o setup-makefiles.sh. Já a partir da versão 22, a migração para utilitários em Python tornou o processo bem mais ágil e versátil. Independentemente da ferramenta, você deve editar os modelos para preencher as informações de dispositivo, fabricante e ano de copyright.
No arquivo de texto, cada linha representa um blob. Se a linha começar com um traço (-), o sistema declarará um módulo para aquele arquivo, o que é vital se outro componente do Android depender dele para ser compilado. Se houver dois pontos (:), o extrator tentará encontrar o arquivo de origem e renomeá-lo para o destino especificado. Além disso, o uso de sha1sum permite “fixar” a versão de um blob, evitando que ele seja sobrescrito se a versão atual já for a correta.
Extraindo Blobs de Pacotes ZIP

Quando você não tem um aparelho físico rodando LineageOS, a solução é usar o pacote de instalação (.zip). O primeiro passo é criar um diretório temporário e descompactar o conteúdo. O grande desafio aqui é identificar o tipo de OTA, pois a estrutura dos arquivos varia drasticamente.
- OTA baseada em arquivos: É a mais simples. Se você vir uma pasta chamada system com todos os arquivos expostos, basta extraí-la e rodar o script de extração apontando para esse diretório.
- OTA baseada em blocos: Aqui a coisa complica. Os dados ficam em arquivos .dat ou .dat.br. Se houver arquivos .transfer.list, você está neste cenário. Se os arquivos terminarem em .br, você precisará do utilitário brotli para descompactá-los antes de usar o sdat2img para converter os blocos em imagens (.img) que podem ser montadas no Linux.
- OTA baseada em Payload: Comum em dispositivos com partições A/B. O conteúdo está dentro de um arquivo payload.bin. Para lidar com isso, é necessário o python3-protobuf e a ferramenta update-payload-extractor para extrair as imagens de sistema, vendor e product.
Se você encontrar um arquivo super.img, será necessário utilizar o lpunpack para desmembrar a superpartição nas partições menores que podem ser montadas individualmente. Após montar as imagens (usando o comando mount), você deve navegar até a pasta do seu dispositivo no código-fonte e executar o extract-files.sh, informando que a origem é o dump montado e não um aparelho conectado via USB.

Considerações sobre a Origem dos Blobs

Muitos iniciantes ficam confusos com a frase “requer um dispositivo já rodando LineageOS”. Isso soa como um paradoxo, mas a explicação é simples: você pode extrair blobs de um aparelho com a ROM oficial (onde os blobs já foram organizados) ou de um dump do sistema stock. O LineageOS não distribui os blobs nos zips de download para evitar problemas legais de copyright; eles fornecem as ferramentas para que você extraia os arquivos do seu próprio hardware ou de pacotes que você já possui legalmente.
Uma vez que a extração seja concluída, é fundamental desmontar todas as imagens e limpar os diretórios temporários para não deixar lixo no seu sistema de arquivos. Se você extraiu apps (.apk) ou arquivos .jar de um dump odexado, o sistema cuidará automaticamente do processo de de-odex para que os arquivos sejam utilizáveis na build.
Dominar a extração de blobs proprietários envolve entender a diferença entre os formatos de pacotes OTA e saber manipular imagens de disco no Linux. Ao configurar corretamente o arquivo de lista e utilizar as ferramentas de Python ou Shell, você garante que a ROM final tenha todo o suporte de hardware necessário, transformando um conjunto de arquivos binários em um sistema funcional e estável.