O primeiro repositório de informações, guias e novidades sobre um dos celulares Android mais originais que existem

terça-feira, 17 de agosto de 2010

Operações Cirúrgicas em APK



Há uma esperança para você que já se frustou com alguma aplicação que ocupa a tela toda com os botôes, como essa aqui ao lado.

Como relatado em posts anteriores, isso ocorre devido a código faltando em um objeto do framework. Em linguagem mais simples, é bug do firmware. Mas pode ser contornado mudando um simples detalhe na aplicação, simples e fácil mesmo para quem não sabe programar em Java.

O procedimento é muito simples quando se tem os fontes da aplicação, como no caso do Aptoide. Mas e quando for uma aplicação comercial e os fontes não estão disponiveis?

Os arquivos apk são realmente arquivos zip renomeados, pode-se extrair seus conteúdos facilmente usando qualquer descompactador de zip. Os arquivos que precisam ser modificados ficam no diretório res/layout dentro do zip.

Mas há alguns detalhes. Para começar, ao compilar a aplicação para o Android, o conteúdo desses arquivos xml é convertido para um formato mais rápido para o sistema trabalhar e dificil de editar.

A ferramenta que resolve isso é o apktool, Esqueça o descompactador, use o apktool que também já converte os arquivos de volta para o formato texto/xml. No exemplo abaixo, estamos descompactando o arquivo tabhost-bad.apk:

> apktool decode -s tabhost-bad.apk
I: Copying raw classes.dex file...
I: Loading resource table...
I: Decoding resources...
I: Loading resource table from file: tabhost-bad.apk
I: Copying assets and libs...
> cd tabhost-bad
> cd res
> cd layout

Procure por arquivos xml que contenham definições de TabWidget, em linhas de texto semelhantes a abaixo:

<tabwidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" />

Substitua "wrap_content" por um tamanho fixo, por exemplo "65px".

<tabwidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="65px" />

Pronto, agora é só gerar o novo apk, que nesse exemplo vamos chamar de tabhost-fixed.apk:

> cd ..
> cd ..
> cd ..
> apktool build tabhost-bad tabhost-fixed.apk
I: Copying classes.dex file...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...

Um último detalhe. Os arquivos apk são sempre assinados, contém a assinatura digital de seus desenvolvedores. Essa assinatura é invalidada e não pode ser mantida após a alteração dos arquivos. Sem ter a chave secreta usada pelo desenvolvedor original da aplicação, não podemos forjar a assinatura. Felizmente, isso não é necessário na maioria dos casos. Basta usar qualquer chave para criar uma nova assinatura. As aplicações não costumam verificar a assinatura e o instalador de aplicações do Android apenas exige uma assinatura válida qualquer, não importa a origem.




A nova assinatura pode ser feita com a ferramenta criada por Dave Da illest. Basta colocar os arquivos no mesmo diretório e executar o sign.bat.

Então é só instalar o novo apk e testar.

3 comentários:

Unknown disse...

kra eu disponho meu mini para testarmos!!! só preciso que me guie!! se for para o bem da humanidade vamos arriscar!!
só que nao sei programar nem compilar!! mas precisamos fazer um firmware livre para esse aparelho e se possivel Android 2.0!!

Unknown disse...

na real temos uma aparelho comparável ao hero da htc ou melhor e nao temos um firmware como o dele

Greg disse...

Concordo, Giuseppe. Vamos fazer assim então, tenta ir instalando o SDK seguindo as dicas que passei no último post. Se tiver qualquer dificuldade com isso, me avisa.