ESSE GUIA NÃO DEVE SER EXECUTADO POR INICIANTES!!!
NÃO GARANTO QUE FUNCIONE, PORÉM RECOMENDO QUE VOCÊS TENHA UMA ROM ORIGINAL DE SEU APARELHO CASO DÊ UM BOOT LOOP INFINITO!!!!!!!
ESTAREI CRIANDO UM VÍDEO EXPLICANDO TUDO LOGO LOGO!!!!!!!!!!

Bem pessoal, iniciando os tópicos para ajudar o pessoal a conhecer melhor o Android e poder nesse caso, portar ROMs de outros aparelhos. O conceito básico servirá pra qualquer ROM, claro que, cada aparelho tem suas particularidades e que devem ser investigadas e resolvidas com muita pesquisa e testes.

Não é nossa intenção esgotar o assunto, ou ser um guia único, e sim o apanhado de diversas informações disponíveis na internet reunidas aqui para facilitar o entendimento.

 

Ou seja, esse material NÃO foi criado por mim, mas um apanhado de material disponível na Internet (principalmente do site XDA Developers) e traduzido e adaptado por mim.

LEIA COM ATENÇÃO!!!!
*
* Não garantimos que seu port será funcional. Não somos responsáveispor aparelhos brickados, Cartões SD mortos, ou dispositivos quebrados.
* VOCÊ é responsável pelas suas alterações, e caso você nos acuse do fracasso ou problemas do prodecimento, infelizmente não haverá resposta.
*
*/

Note também que neste material não está incluso a compilação da ROM, ou seja, nós partimos do principio que você já sabe como compilar ou que já possui uma ROM pronta para ser usada como base.

Antes que você inicie a portar uma ROM, certifique-se de solicitar permissão do criador da ROM!

O que você precisa:
WinRAR/7zip
Notepad++ (Quando estiver desenvolvendo sempre use ele)
Android SDK (Para Logcatting & DDMS)
Conhecimentos Básicos sobre o Android
Se estiver usando Linux/Unix/BSD use suas ferramentas favoritas de Arquivamento e Editor de Textos.

Notas:
Estaremos nos referindo ao seguinte:
BASE = A ROM GB/ICS/JB Stock que foi feita para o seu dispositivo.
PORTADA = A ROM que você está tentando portar.
BASE e PORTADA devem ter a mesma CPU CPU. ex. ARMv7, ARMv6, ARMv5

Você deve ter as seguintes configurações no Notepad++:

Ignore o procedimento caso o arquivo ou o diretório não estiver presente!
* BASE & PORTADA devem ter a mesma versão do Android.
* Se você estiver portando uma ROM Custom GB, então use como base uma ROM GB, o mesmo vale para o ICS e para o JB.
* Certifique-se que tanto a ROM BASE como a PORTADA estão deodexadas (É muito dificil portar ROMs odexed).
* A ROM Final estará dentro do diretório da ROM PORTADA. (Cuidado para não se confundir!)

Dentro do diretório da PORTADA:
* Remova o kernel:
boot.img | zImage | kernel.sin | etc…

* Remova o seguinte dentro de /system:
cameradata
tts
usr
vendor
firmware
modules
wifi

* Agora você tem 2 opções:
Remover os diretórios bin & xbin & lib, mas manter o libandroid_runtime.so dentro de /system/lib
* Mantenha os diretórios bin & xbin & lib

Explicação:
Se a PORTADA não possui tweaks ou addons nesses diretórios.
Se a PORTADA possuir tweaks e addons.
Remova todos os diretórios dentro de /system/etc exceto:
init.d
permissions
license

Remova o seguinte dentro do diretório META-INF:
CERT.RSA
CERT.SF
MANIFEST.MF

Remova: META-INF/com/google/android/update-binary

Dentro da BASE:

Mova o kernel para a PORTADA:
boot.img | zImage | kernel.sin | etc…

Remova o arquivo libandroid_runtime.so de /system/lib

Mova o seguinte dentro do /system para a PORTADA:
(Se perguntado, escolha Sim para Copiar e Sobreescrever os arquivos)
cameradata
bin
lib
tts
usr
vendor
firmware
modules
wifi
xbin

Mova tudo dentro de /system/etc para a Portada em /system/etc
(Se perguntado, escolha Sim para Copiar e Sobreescrever os arquivos)

Move: META-INF/com/google/android/update-binary
To: PORTED’s META-INF/com/google/android/

Para ROMs ICS e mais novas:
Mova o seguinte para dentro de /system/media para o mesmo diretório da PORTADA:
LMprec_508.emd
PFFprec_600.emd

build.prop
Dentro da PORTADA:
Abra o arquivo /system/build.prop
Copie e Substitua pelo seguintes:
ro.modversion
ro.cm.version
ro.config.ringtone
ro.config.notification_sound
ro.config.alarm_alert
ro.config.sms_received_sound
ro.config.sms_delivered_sound
persist.sys.themeId
persist.sys.themePackageName
e qualquer coisa similar a isso para o build.prop da ROM BASE

Para a MIUI:
Add & Make sure the following values are like this:
ro.build.id=MIUI
ro.build.display.id=MIUI x.x.x
ro.build.version.incremental=x.x.x
ro.config.ringtone=MI.ogg

Make sure the following is for your Device:
rild.libpath=
rild.libargs=

Inside BASE:
Open /system/build.prop
Highlight from: ro.build.tags=
to: # ADDITIONAL_BUILD_PROPERTIES
Shown in this picture
Copy & Replace that highlighted part to: PORTED’s build.prop’s highlighted part

Copy everything from: # ADDITIONAL_BUILD_PROPERTIES
To: the end of the file
Paste it to PORTED’s build.prop
Shown in this picture

Para dispositivos Sony XPERIA:
The whole build.prop is untidy and filled with tweaks and addons.
To edit an XPERIA build.prop you really just need to use your common sense.
Make sure you follow the above and just decide on your own on what to do

updater-script
Dentro da BASE:
Mova o seguinte para a PORTADA:
(Se If prompted, select YES to copy and Replace all)
META-INF/com/google/android/update-binary
META-INF/com/android/metadata
META-INF/com/android/otacert

Abra o arquivo: META-INF/com/google/android/updater-script
Substitua os seguintes valores para a PORTADA:
mount(“xxxxxx”);
format(“xxxxxx”);
retouch_binary
A instalação do kernel (Algo como: assert(package_extract_file(“boot.img”,)
Tome nota de adicionar os set_perms & set_perm_recursives que a PORTADA adicionou. E então substitua todos os set_perm e set_perm_recursive da BASE para a PORTED. Put back in the noted set_perms & set_perm_recursive you wrote down, to PORTED’s updater-script

Para ICS e mais novos:
Se o updater-script na PORTADA é modificado para ter tweaks e addons, faça o procedimento de set_perms como mostrado acima.
Agora use Now use BASE’s entire META-INF Folder. Copy it to PORTED

Para MIUI v4:
Adicione os seguintes valores para a PORTADA:
set_perm(0, 0, 06755, “/system/xbin/invoke-as”);
set_perm(0, 0, 0755, “/system/lib/liblbesec.so”);

Portando de diferentes fabricantes

Se você estiver portando de um fabricante diferente, como HTC ou Sony, você precisa checar o kernel deles.

Descompacte o kernel da PORTADA
Descompacte o kernel do seu aparelho
Abra o init.rc da PORTADA
Substitua o BOOTCLASSPATH do init.rc da ROM from PORTED’s init.rc to BASE’s init.rc
Compare os dois arquivos e adicione init.rc da PORTADA o que estiver faltando
Packup/Repack seu Kernel

Portando Wallpapers | Wallpapers de Lockscreen | bootanimation

Geralmente você encontrará um wallpaper/bootanimation que não se encaixa em seu dispositivo. Aqui está um tutorial rápido de como portá-los para o seu dispositivo.

* Download & Instale o aplicativo FreeImageConverter e rode-o.
* Para Wallpapers & Lockscreen Wallpapers:
* Clique em ‘Add Folder’ … e adicione o diretório onde os wallpapers estão
* Então clique em ‘Advanced Convert’ …
* Selecione o tamanho exato e configure a qualidade da imagem para 100
* Sete as resoluções ‘Width’ e ‘Height’ resolutions for your device.
Uncheck Add “Converted by http://www.freeimageconverter.com
Select Leave the same file name and leave the Postfix & Prefix empty. Then set your output in a folder.

Para o bootanimation:
* Extraia o /system/media/bootanimation.zip OU /data/local/bootanimation.zip OU /system/customize/resource/bootanimation.zip (E algumas raras ROMs possuem o bootanimation dentro do framework-res)
* Faça os passos acima.
* Mova o novo diretório com as imagens redimensionadas para o seu espaço do bootanimation.
* Edite o arquivo desc.txt para combinar com a resolução de seu dispositivo
* Comprima em zip o conteúdo ( folder_name desc.txt )
* Sete o método de compressão como ‘Store’ (Armazenamento)
* Remova os arquivos do bootanimation extraído
* Certifique-se de que o novo bootanimation.zip está no PORTADA

Logging & DDMS

Isso é muito importante se você é um desenvolvedor no Mundo Android. Essas ferramentas irão ajudar você a debugar o seu dispositivo em busca de erros e quais processos estão rodando.

Android Debug Bridge (ADB)
Tutorial – Como usar um Logcat

Dalvik Debug Monitor Server (DDMS)
Tutorial from Android

Revisão
Make sure you did everything inside PORTED first, then work your way up/down to BASE.
Você substituiu o Kernel?
Is libandroid_runtime.so from PORTED?
Did you edit the updater-script, format & mount values?
Make sure dalvik.vm.heapsize is BASE’s value inside build.prop
Certifique-se que o build.prop is mostly for your Device
If the Port doesn’t boot, try using your own META-INF folder. But backup the previous