Como fazer um updater-script
Aprenda como fazer um script esse post
Descrição:
O update-script é um conjunto de comandos à executar no recovery do android
Dentro da zip de uma rom, você encontrará o diretório:
META-INF\com\google\android
dentro da pasta 'android' você vai encontrar dois arquivos:
update-binary
O update-binary é o arquivo que vai converter essas informações que estão no updater-script para código de maquina, algo como um compilador.
updater-script
Updater-script contém um conjunto de informações que serão interpretadas pelo recovery
A única linguagem reconhecida pelo update-binary é a Edify, então, nesse post, vou ensinar vocês como fazer um script em Edify.
Nesses arquivos estão as informações de instalação da rom. Se o script for escrito de forma incorreta, a rom pode não instalar, ou instalar com diversos erros/bugs.
Veja abaixo cada um dos comandos com a explicação de cada função.
__________________________________________
getprop
Exemplo do comando:
assert(getprop("ro.product.device") == "ST15i" || getprop("ro.build.product") == "ST15i" ||
getprop("ro.product.device") == "ST15a" || getprop("ro.build.product") == "ST15a" ||
getprop("ro.product.device") == "smultron" || getprop("ro.build.product") == "smultron");
Essas linhas geralmente estão no topo do seu arquivo updater-script. Mas o que elas fazem?
assert(getprop("ro.product.device") == "GT-S5300" || getprop("ro.build.product") == "GT-S5300" ||
getprop("ro.product.device") == "GT-S5300B" || getprop("ro.build.product") == "GT-S5300B" ||
getprop("ro.product.device") == "GT-S5300L" || getprop("ro.build.product") == "GT-S5300L" ||
getprop("ro.product.device") == "cori" || getprop("ro.build.product") == "cori");
Elas procuram o nome do dispositivo nas propriedades do aparelho , para evitar que pessoas consigam flashear esse arquivo em outros aparelhos e brickar o celular.
E porque tantos nomes se é o mesmo aparelho?
R: Muitos aparelhos são exatamente iguais mas lançam com diferentes nomes no mundo todo, o que é o caso do Galaxy pocket, celular do exemplo acima.
Você consegue essa confirmação também por arquivo com o comando "file_getprop"
package_extract_dir & package_extract_file
O comando "package_extract_file" extrai arquivos e o "package_extract_file" extrai pastas
Exemplo do comando:
package_extract_dir("system", "/system");
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
run_program
Execução de programas.
Exemplo do comando:
run_program("/tmp/backuptool.sh", "backup");
*Só executa Shell Scripts
show_progress
Exemplo do comando:
show_progress(0,0);
Essa é sem dúvida a função mais inútil do recovery, kkkkkk
Ela é a velocidade da barra de carregamento da barra do recovery
Quando você instala uma rom, você tem uma barra que nem sempre funciona bem, como deveria, é justamente por causa dessa linha.
show_progress(10, 1);
Vai de 0 até 10% da barra
Eu gosto de usar esse comando:
show_progress(1.34,10);
Com ele, a barra vai progressivamente do 0 ao 100%
format & mount
Servem para formatar e montar a partição
*Juntei os dois em um pois contém a mesma estrutura
Exemplo do comando FORMAT:
format("ext4", "emmc", "system");
comando("Sistema de arquivos", "Tipo de partição", "Diretório")
Exemplo do comando MOUNT:
mount("yaffs2", "MTD", "system");
comando("Sistema de arquivos", " Tipo de partição", "Diretório")
Clique nos links para saber mais sobre os assuntos
Sistema de arquivos
Partição
Diretórios
Sistemas de arquivos/Partição listados acima
yaffs2 = Sistemas de arquivos, acompanha partição MTD
Yet Another Flash File System + Memory Technology Device
ext4 = Sistemas de arquivos, acompanha partição + EMMC
Extended filesystem 4 + Embedded MultiMediaCard
*Que fique bem claro, cada celular tem seu modo de partição, pode ser igual, como pode não ser, exemplo:
Comando Galaxy 5
mount("ext4", "EMMC", "/dev/block/stl12", "/system");
Comando Galaxy Pocket
mount("rfs", "EMMC", "/dev/block/stl9", "/system");
Comando x10 Mini Pro
mount("yaffs2", "MTD", "system", "/system");
/dev/block Eu farei um post sobre partições e criação de kernel, nele explicarei esse diretório com mais detalhes.
em resumo, o caso do dev block é o seguinte
mount("ext4", "EMMC", "/dev/block/mmcblk0p9", "/system");
mount("ext4", "EMMC", "/dev/block/mmcblk0p10", "/data");
comando("Sistema de arquivos", "Tipo de Partição" "local da partição", "Diretório")
veja que o bloco mmcblk0p9 é a partição 'system' e o bloco mmcblk0p10 é o 'data'
Se o kernel não suportar o sistema de arquivos ou a partição que você colocou, o sistema pode não rodar, ou rodar de forma estranha.
ui_print
É uma palavra ou frase que você quer que apareça na instalação.
Eu usava essa no final do script
Exemplo do comando:
ui_print("-> Instalacao Completa!");
ui_print(" ");
ui_print("Use o Factory Reset,");
ui_print("para mais perfomance do sistema.");
ui_print("Obrigado por Escolher a Digdin Rom");
ui_print(" "); É um espaço vazio na tela. Usado para pular linha.
symlink
Exemplo do comando:
symlink("toolbox", "/system/bin/nome_do_arquivo");
symlink("busybox", "/system/xbin/nome_do_arquivo");
Como em qualquer sistema operacional baseado em Unix/Linux, o Android usa links simbólicos (symlinks). Uma ligação simbólica é um tipo especial de arquivo que contém uma referência a outro arquivo ou diretório sob a forma de um caminho absoluto ou relativo, o que afeta a resolução caminho. No Android, eles são usados principalmente na /bin e pasta /xbin, onde todos os binários de execução estão. No Android, os links são feitos da busybox (xbin) ou da toolbox (bin)
delete & delete_recursive
O comando "delete" apaga arquivos e o delete_recursive deleta pastas
Exemplos do comandos:
delete("/system/build.prop"));
delete_recursive("/system");
set_perm & set_perm_recursive
O comando "set_perm" muda a permissão de arquivos e o set_perm_recursive muda a permissão de pastas
Exemplos do comandos:
set_perm(0, 0, 06755, "/system/xbin/su");
set_perm_recursive(0, 2000, 0755, 0750, "/system/etc/init.d");
set_perm_recursive(UID, GID, dirmode, filemode, dirx)
UID = user id
GID = group id
dirmode = Permissão para definir a diretórios contidos no diretório especificado
filemode = permissão para definir a arquivos contidos no diretório especificado
dirX = diretório para definir a permissão
*Permissão de arquivos/pastas não tem nenhuma conexão com permissão de aplicativos, caso queira saber mais sobre, clique aqui
unmount
Desmonta a partição.
Exemplos do comandos:
Exemplos do comandos:
unmount("/system");
*Depois que tudo foi instalado, é recomendável que você desmonte a partição.
write_raw_image/img
Exemplos do comandos:
package_extract_file("boot.img", "/tmp/boot.img")
write_raw_image("/tmp/boot.img", "boot"),
delete("/tmp/boot.img"));
Embora o comando package_extract_file esteja lá em cima, resolvi repostar com o aviso.
*IMGs geralmente são ligados ao kernel ou recovery, se você flashear de forma incorreta, você pode brickar seu celular PARA SEMPRE, sem chance de retorno.
Já peguei um Galaxy 5 nessas condições. Um amigo tentou colocar o sistema do Galaxy S3 nele. a rom não veio com o getprop, então ela instalou direto, o kernel foi substituído, junto com o bootloader, recovery e sistema. Depois de flasheado, o sistema não ligava de forma nenhuma, devido à incompatibilidade com tudo. Não dava para instalar com o ODIN, pois o odin não reconhecia mais o celular como Galaxy 5.
Exemplo de updater-script
Atenção: foram retiradas várias bins e xbins para caber no post NÃO COPIE ESSE SCRIPT, é só para EXEMPLO
Dicas
1) Para escrever o script, você vai precisar de outro programa que não seja o bloco de notas ou word.
*Um updater-script feito no bloco de notas não vai funcionar. Use Notepad++
Caso queira saber o porque, leia o artigo "Nunca use o bloco de notas"
2) Não esqueça de colocar ponto e virgula (;) no final cada ação do seu script
3) Deixe a ultima linha do script em branco (ou seja, pule uma linha)
Para finalizar
Essa é a base para programar um updater-script bom e funcional. Farei mais posts explicando como programar para o AROMA e como fazer comandos mais complexos para sua rom/sistema. Fique atento!
Nenhum comentário:
Todos os comentários são monitorados. Comentários ofensivos serão removidos e os respectivos usuários banidos.