Instale Updates e App's via CWM Recovery

 

Criando pacotes para atualização via recovery

 

Olá amigo leitor.
Hoje vamos ver como criar um pacote de atualização que pode ser instalado no seu android via recovery.

Vale lembrar que, como vimos no artigo passado, o recovery recomendado é o CWM 5.5.0.4, que já instalamos anteriormente no nosso S Duos.

Se você ainda não leu, perca uns minutos e veja lá o que nós fizemos neste artigo passado:


Então vamos por a mão na massa! Mas antes... o meu aviso:

Aviso a todos os leitores: 

Estes procedimentos podem danificar seriamente seu telefone celular ou tablet. Então faça por sua conta e risco.


Primeiro, vamos conseguir alguns arquivos para criar nosso pacote. Claro que você não deve sair por ae enfiando qualquer arquivo no sistema do seu aparelho. O conteúdo aqui é muito mais didático do que prático, ok?


Bem, eu preciso de um arquivo que não está no meu sistema. Este arquivo é o "parted", um binário que tem poderes no que diz respeito a partições de um sistema. Então vamos usá-lo como exemplo. Vamos atrás dele. Normalmente, você deveria pegar o fonte deste binário e compilar para a sua distribuição. Binários não são como seu documento .PDF que você carrega e usa em qualquer computador, ele precisa ser preparado para aquele sistema em questão. Com certeza uma hora isto se tornará necessário para você realizar, mas agora este não é o foco.

Vamos precisar do binário. Faça o download neste link abaixo:

 Clique sobre "parted" na lista. Uma nova janela se abrirá e então clique sobre "View Raw". Guarde este arquivo.

Vamos precisar de mais arquivos para preparar o pacote. Vamos baixar 2 arquivos:




E vamos precisar também de um arquivo que já usamos antes, o CWM-Superuser-3.1.3.zip. Não tem mais ele? Então baixe-o novamente:


O primeiro chama-se "update.zip--for-Android-Devices--master.zip". Na figura abaixo você vê seu conteúdo.


O segundo chama-se "Auto-Sign.zip", e este será o pulo do gato!



Basicamente, vamos criar um arquivo .zip com as mesmas características do nosso modelo update.zip. Este arquivo deve conter:

  • Uma pasta nomeada META-INF, sem espaços em branco e todas as letras maiúsculas;
  • Dentro de META-INF, deverão ser criadas outras 3 pastas, uma dentro da outra (com, google e android, todas escritas com letras minusculas e sem espaços em branco);
  • Dentro da pasta android, teremos dois arquivos, um binário chamado update-binary e um documento de texto chamado updater-script, nomeado com letras minusculas e sem espaços em branco;
  • Junto com a pasta META-INF, todas as pastas a serem inseridas no sistema operacional do android e seus respectivos arquivos devem estar ali, na mesma ordem que deverão ser instaladas no sistema, com nomenclaturas exatas e sem espaços em branco, conforme veremos a seguir;
  • O arquivo README não será incluído;
  •  Os arquivos CERT.RSA, CERT.SF e MANIFEST.MF serão criados mais adiante.

Mãos a obra. Crie uma pasta vazia em seu computador vamos criar a estrutura de pastas. Parted, nosso binário, será colocado em seu local default dentro do android (onde ficam os outros binários do sistema), em /system/bin. Então vamos criar estas pastas também conforme as instruções acima.


Agora vem uma parte mais difícil. Todo cuidado a partir de agora é pouco. Muita atenção será exigida nesta etapa.

Na pasta android vão dois arquivos, updater-script e update-binary. O updater-script é que vamos agora criar ele. ATENÇÃO! Se você está usando o Windows para editar este script, NÃO USE o bloco de notas nem o Wordpad. E vou explicar o porque:

O formato de arquivos de texto Windows e Unix são um pouco diferentes. No mundo POSIX/UNIX/Linux o fim de linha usa apenas um caráter, que é aquele indicado no ASCII como line feed (ou LF), enquanto o mundo Microsoft usa dois caracteres combinados, que são sempre o ASCII carriage return (ou CR) seguido pelo LF.  Como consequência, alguns aplicativos do Windows não vão mostrar as quebras de linha em arquivos formato Unix. Da mesma forma, programas Unix pode exibir os retornos de carro em arquivos de texto do Windows com (^ H) caracteres no final de cada linha. E detalhe importante: você não verá diferença alguma, mas na hora que o script for executado, vai dar erro.

Outro problema que alguns não atentam é para a codificação de caracteres usados. UTF-8 é o ideal para qualquer documento, script ou código escrito. Se você usar outro padrão de codificação, como por exemplo o ANSI/WINDOWS1252 será muito provável que erros aconteçam.

Para evitar estes erros e evitar muita dor de cabeça, no Windows use um editor de texto que seja compatível com os padrões Unix. Alguns deles são:
  • Gedit : o mesmo editor usado no Ubuntu por defaut. O meu preferido!
https://wiki.gnome.org/Apps/Gedit

  • Notepad++ : um dos mais recomendados editores para Windows.


Tem outros por aí, mas eu não conheço. Então escolha um dos dois e vamos criar nosso script.

Na pasta "android" do seu arquivo "update.zip--for-Android-Devices--master.zip", existe um arquivo updater-script, mas nós não vamos usar ele não. Vamos usar o updater-script que veio no pacote do nosso "CWM-Superuser-3.1.3.zip" instalado anteriormente,
que servirá de exemplo para montarmos o nosso script de instalação para nosso arquivo.


A primeira informação a saber é que tipo de script é este. Bem, este tipo de script chama-se Edify, e ele é usado nos scripts de instalação via recovery. Existe outro tipo, o Amend, mas ele é uma codificação que não é mais utilizada desde o android 1.5 pelo Google. Versões das ROMs Cyanogemmod até a 3.x.x.x ainda suportavam esta codificação. Acima desta versão só são aceitas a codificação Edify.

E a sopa de letrinhas? Cada linha é um comando (em branco) e entre parenteses estão os argumentos do comando. Abaixo vou definindo cada comando e o que ele representa:
  • ui_print(msg1...)
    concatenar argumentos e exibir na tela
  • run_program(programa) or
    run_program(programa, arg1...)
    execução do programa com os argumentos retorna status de saída do programa
  • delete(arquivo1,...,arquivoN)
    delete_recursive(arquivo1,...,arquivoN)

    excluir arquivos ou pastas de forma recursiva retorna uma contagem de arquivos ou pastas apagados
  • package_extract_dir(package_path, destination_path)
    aponta o caminho do pacote no arquivo zip (package_path) e o caminho do destino (destination_path) e retorna "t" se for bem sucedida
  • set_perm(uid,gid,mode,target)
    set_perm_recursive(uid,gid,dirmode,filemode,target)

    marca o usuário do arquivo (UID), o grupo (GID), as permissões
    para o diretório (DIRMODE) e para o arquivo (MODE/FILEMODE). Retorna string vazia
  • symlink(target, src1 ...)
    cria um link simbólico do arquivo (target) para o local especificado (src1, src2,...). Tanto target quanto srcN devem ser especificados em caminhos absolutos.
Tem outros comandos para outras funções que não vamos usar por hora. Tem vários sites por ae que tem listas mais completas. Se você quiser ver mais algumas, veja este site abaixo:
Vamos adaptar este script para instalar nosso arquivo.
Linha por linha:

1 e 2- Nome de exibição na tela do recovery. ATENÇÃO com espaços!


Neste comando de exibição de tela, o texto a ser exibido fica dentro dos parenteses e aspas. Atente para os espaços. O comando termina sempre com ponto e virgula. Ele indica os próximos comandos do script.

3- Executar programas.



Sintaxe simples. Primeiro o caminho do executável ("/sbin/busybox"), depois os argumentos ("mount, "/system"). O comando vai montar a pasta /system do android para podermos inserir nela o que queremos. Isto vale para qualquer pasta. Elas devem ser montadas uma por vez, separadas uma das outras, quer dizer, uma linha deste comando para cada ação de montagem. Vamos supor que você queria utilizar mais argumentos com o comando "mount", é só você ir separando os comandos com virgulas e colocando-os entre aspas.

4- Texto de exibição



5- Como diz o texto acima, ele vai apagar possíveis arquivos nos destinos que iremos transferir nosso arquivo.



6- Texto de exibição.



7- Comando para a cópia do arquivo ao seu local de destino.



Se os arquivos a serem transferidos ao sistema forem para diversas pastas, cada pasta deve ter sua própria linha, com a origem (system) e o destino (/system).

8- Texto de exibição.



9- Permissões.



Aqui se define o usuário, o grupo e as permissões para o arquivo. Presumo eu que você já saiba o que são as permissões no mundo Unix/Linux. Se você não sabe, vou ajudar. Ler é requisito de qualquer um que queira aprender.
http://www.vivaolinux.com.br/dica/Os-usuarios-e-permissoes-no-sistema-GNULinux
http://www.infowester.com/linuxpermissoes.php
http://www.infowester.com/linuxpermissoes2.php

10- Texto de exibição.



11- Criação dos links simbólicos



Os links simbólicos são muito usados no Linux. Eles servem para apontar para um executável em outro local, evitando arquivos duplicados no sistema e mantendo compatibilidade com diversos programas que se utilizam de caminhos diferentes para o mesmo arquivo. Para cada arquivo a ser instalado, uma linha própria, com o caminho absoluto do arquivo ("/system/bin/parted") e com o caminho absoluto do link simbólico ("/system/xbin/parted").

12- Tela de exibição.



13- Desmontar as partições montadas.




Mesma operação do começo do nosso script. Feito tudo, é hora de desmontar as partições montadas.

14- Tela de exibição final




Aqui está nosso arquivo updater-script pronto para uso:


Uma dica: Abusem das exibições de tela. Usem a cada comando. Porque? Simples. Se algo der errado, na tela do recovery ele vai te dar uma mensagem de erro. E é só você ver até onde foi o seu script. Ficará muito fácil identificar onde há problemas.

Salve este arquivo na pasta "android", nomeado de "updater-script".

Junto a este script colocaremos um arquivo binário chamado updater-binary. Este é um binário que é requerido pelo clockworkmod para traduzir o formato do updater-script que escrevemos para o formato binário (linguagem de máquinas) que vai fazer a execução do script atualizador em nosso dispositivo. 

Cada versão do ClockWorkMod parece ter seu próprio updater-binary, então não será raro você encontrar pacotes que não irão funcionar no seu aparelho. Mas dentro de sua versão, o updater-binary funciona com qualquer script que você criar (claro, desde que esteja escrito de forma correta). Vamos usar um que nós ja temos certeza que funciona, o updater-binary do pacote CWM-Superuser-3.1.3.zip e adicioná-lo ao nosso pacote, ao lado do updater-script.


Vamos comprimir eles no formato .zip Navegue até as pastas META-INF e system.


Selecione as duas pastas e com o botão direito, escolha "Comprimir".


No local onde se encontra o ponteiro do mouse, escolha .zip, nomeie o arquivo e clique em criar.

Agora vamos usar o outro arquivo que baixamos la no começo, o Auto-Sign.zip. Mas antes, vamos precisar de uma ferramenta muito útil no nosso Ubuntu. Precisamos incorporar ao menu de contexto do Nautilus a possibilidade de abrir um terminal em qualquer pasta que estivermos no sistema. Para isso vamos instalar este plugin pela Central de Programas do Ubuntu:

Ou se você preferir, pelo terminal (ctrl+alt+t):


É preciso reiniciar o nautilus. Um logoff e logon resolve a coisa.

Outro pacote que deve estar instalado é o interpretador Java. Este terá que ser instalado via terminal (claro, se você não o tiver):




Pegue o arquivo criado e insira-o dentro da pasta Auto-Sign.


O arquivo Auto-Sign v0.65.exe é para ser executado no Windows. Não vamos usá-lo.
Com o botão direito sobre uma área vazia desta pasta, escolha "Abrir num terminal".


Após aberto o terminal, vamos assinar nosso pacote para ele ser aceito pelo recovery com o seguinte comando:

java -jar signapk.jar testkey.x509.pem testkey.pk8


Este comando vai inserir no pacote os arquivos CERT.RSA, CERT.SF e MANIFEST.MF.

Feito isto, nosso pacote está pronto para ser instalado. Agora é só copiar para a raiz do seu cartão SD, reiniciar o seu aparelho em modo de recovery e instalá-lo conforme o meu artigo anterior ensinou.

Bem, espero que seja de grande ajuda a você leitor.

Até mais.












Links utilizados para a criação deste artigo: