[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. Recomendo o ES File Explorer (Grátis) ou Solid Explorer (Pago). Nesse tutorial usei o ES File Explorer.
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

LogCat Extreme <- Clique no nome para baixar (Play Store)

Se quiser fazer esse procedimento pelo computador, o ADB tem a função nativa de logcat
Porém, recomendo que faça por esse aplicativo

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.

Copie o apk que deseja instalar do celular antigo para o celular novo.

Abra o apk e tente instalar.
Ao concluir, aperte concluído e abra o logcat.

Com ele aberto, vá em Per-App Logcat e procure o app que acabou de instalar
Ao encontrar e clicar no app e minimize o Logcat

Abra o app que deseja portar.

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

*Ao abrir o app com o Logcat minimizado, o mesmo pegará todos os dados de execução e te mostrará onde está o erro.


Aqui estão todos os processos gerados pelo app de TV, Você verá os erros listados com a letra  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 SuperUser - Seja um super usuário Android

*Cópia permitida apenas citando a fonte

Dúvidas nos comentários