[Hacking][slideshow]

Como portar um app de outro smartphone

Aqui ensino um dos tutoriais mais pedidos. Como fazer a portabilidade de um app de outro celular para sua ROM. Também ensino técnicas de como usar um apps da Play Store na sua ROM e como consertar bugs, o que com certeza vai ocorrer nesse processo.





Descrição:
1. Como colocar apps de terceiros numa ROM
2. Colocando um app JNI na ROM
3. Portando um app para sua ROM/Sistema


Como colocar apps de terceiros numa ROM
1. Baixe um explorer com acesso root (ES File Explorer ou Root Explorer servem)
2. Copie o apk que quer passar para a ROM e cole dentro da pasta /System/app
3. Mude as permissões para RW-R--R--

Depois que fizer isso, apenas reinicie o sistema. Depois de ligado, o Android reconhecerá o app que você colocou na pasta System como um app do sistema.


Colocando um app JNI na ROM
Existem alguns apps que não funcionam quanto são copiados para o diretório do sistema, que é o caso do QuickPic. Ele, como alguns outros apps, são feitos em JNI, o que não permite a leitura da lib dentro do apk se ele estiver no sistema, justamente pelo sistema ser uma partição 'somente leitura'

Apps JNI só funcionarão na sua ROM da seguinte forma:


1. Abra o apk como zip (Na foto estou usando o Winrar);
2. Abra a pasta lib.;
3. Se seu processador for x86. abra a pasta x86, se for ARM, abra a pasta Armeabi;
4. Extraia o(os) arquivo(os) *.so de dentro do apk.;
5. Depois de extraído o arquivo '*.so', você vai voltar até a raiz e deletar a pasta lib. ;
6. Para o app funcionar, você colará o apk dentro da pasta /system/app e os arquivos *.so que estavam dentro do app para a pasta /system/lib.

Só para constar, Esse caso do QuickPic é uma exceção, Muitos apps funcionam se você simplesmente copiar o apk para a pasta /system/app. (E é claro, colocar a permissão 0644 RW-R--R--. Caso não saiba o que é permissão de arquivo, clique aqui).




No caso de um zip, é só colocar o apk na pasta /system/apk, não precisa mudar nada, o updater-script muda as permissões quando a ROM é instalada.

Porque resolvi ensinar isso primeiro?
R: Bem, para mostrar que boa parte dos apps do sistema que são proprietários, tem libs dentro do sistema e que o app não vai funcionar só copiando o apk.

Mas na pasta lib tem mais de 100 arquivos "*.so", como vou descobrir quais são os certos?
R: Assim...


Portando um app para sua ROM/Sistema

Voce vai precisar de:
App Catlog

CatLog - Logcat Reader!


Se quiser fazer esse procedimento pelo computador, o ADB tem a função nativa de logcat

App que deseja portar instalado no seu celular

Vou portar o app MobileTV do Motorola D1 (XT918) para o Moto G (xt1039).

Eu vou instalar um app que sei que não vai funcionar corretamente no meu celular, para assim, fazer um 'link' para mais um problema.

Depois de instalar, abra o app.

Se aparecer uma mensagem de erro, significa que o app necessita de outro arquivo que está no sistema do celular antigo, vamos descobrir qual.

Abra o Catlog e escreva o nome do app ou de algum processo dele, como na foto acima
*Ao abrir o catlog, ele vai mostrar logs em tempo real de tudo que está acontecendo no sistema, por isso você deve filtrar o que quer.

Agora que filtrou o que quer, minimize o app e abra novamente o app que quer portar.

Volte para o catlog

Aqui estão todos os processos gerados pelo app MobileTV, aperte o botão entre o pause e o close para estender a lista de erros e procure os erros com um  E .

Ali está a linha que precisamos
...' /system/lib]]] couldn't find "libJellyPG.so"

Mostrou que o app não consegue encontrar o arquivo libJellyPG.so, Esse arquivo está no Motorola D1, 

Ali marcado vocês podem ver, já peguei o arquivo que faltava de dentro da pasta
/system/lib do D1 e joguei dentro da mesma pasta /system/lib, só que no Moto G, vamos abrir o app


Aqui você vê que o app só precisava daquela lib para abrir, mas o app não funciona. Porque não?

Bem, tirando o fato do Moto G não ter receptor interno de TV, alguns apps exclusivos são ligados ao framework do sistema, ou seja, se o framework do novo sistema não for editado, o app não vai funcionar. Em outros casos, você conseguiria pegar o framework e o app em questão e com horas de trabalho e uma leitura de smali code, você conseguiria portar.

Informações extras:
1. À partir do Lollipop, as libs dos apps deixaram de ficar dentro da pasta lib do sistema e agora ficam do lado do apk

'/system/app/<Pasta com nome do app>'/<Apk com o mesmo nome da pasta>/lib'

2. Existem apps que não tem nenhuma lib dentro dele, mas que podem necessitar de outros arquivos, o processo de encontrar esses arquivos necessários é o mesmo.

3. Apps podem ter várias libs, eu simplesmente dei sorte de portar um app que só tinha 1 lib.

4. Pode acontecer de um app de uma versão superior funcionar em uma versão anterior do Android. (tipo portar um app do 4.4 para o 4.0).

Post original:Android HyperUser

*Cópia permitida apenas citando a fonte

Dúvidas nos comentários

5 comentários:

  1. Queria saber se esse processo funciona com music player do Samsung galaxy s4 mini tenho ele em apk! Gostaria de saber como faço pra instalar em outros dispositivos?

    ResponderExcluir
  2. Não sei informar, não conheço esse player exatamente.

    Recomendo que faça o procedimento citado acima e informe o resultado aqui nos comentários.

    abs,

    ResponderExcluir
  3. Estou muito grato por você ter compartilhado esse tutorial tão compreensível e pratico, estou procurando algo assim a alguns dias.

    ResponderExcluir
    Respostas
    1. Por nada.

      Se tiver pedidos de tutorial, pode mandar no meu 'contato'. Se quiser escrever algum post relacionado, pode usar o mesmo menu.

      Abs.

      Excluir

Todos os comentários são monitorados. Comentários ofensivos serão removidos e os respectivos usuários banidos.