Workshop on Android Rom Creation - FISTA/ISCTE 2014

62
Rom's Android Como criar/modificar uma ROM para Android

description

Workshop on Android ROM creation and modification. No programming, just good old hacking...

Transcript of Workshop on Android Rom Creation - FISTA/ISCTE 2014

Page 1: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Rom's AndroidComo criar/modificar uma ROM para Android

Page 2: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Sumário● Caixa Mágica

● Android

– Arquitectura e Arranque

– Root e Recovery

– Rom's

– Testar no emulador

– Alterar APK's

Page 3: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Caixa Mágica● Criadores da principal distribuição de Linux portuguesa;

● Parcerias com os principais fabricantes de hardware (HP, Intel, JP Inspiring Knowledge, Insys, etc.);

● Envolvida em vários projectos europeus com parceiros de renome internacional (Intel, SAP, etc.);

● Master Afiliate do Linux Professional Institute (LPI);● Projectos com as principais empresas/organizações portuguesas (PT/Sapo,

EDP, AMA, ZON, Ministério da Educação, Ministério da Justiça, etc.).

Page 4: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Base Linux;

● Módulos de hardware;● SDK da Google;● Google experience (Não AOSP);● Um linux que finalmente tem sucesso

no mainstream

Page 5: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android

● Arquitectura:

Page 6: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● O arranque:

http://www.kpbird.com/2012/11/in-depth-android-boot-sequence-process.html

Page 7: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android

Page 8: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Mas preciso de um boot loader especial é?

● Sim e não:

– Precisam de desbloquear o “Bootloader”, porque só através dele conseguem instalar e arrancar para uma “Recovery” e instalar novas ROM's;

– Os boot loaders por omissão não têm essa capacidade, só arrancam para o sistema.

http://www.addictivetips.com/mobile/what-is-bootloader-and-how-to-unlock-bootloader-on-android-phones-complete-guide/

● ATENÇÃO – Desbloquear o “bootloader” faz um reset de fábrica ao dispositivo – Perdem todas as vossas configurações, aplicações, etc.

Page 9: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● E como desbloqueio esse “boot loader”

no meu dispositivo XYZ?

– Nos modelos nexus (Google Phones) é relativamente simples:

● Instalar o Android SDK no PC;● Arrancar o XYZ em modo bootloader

(Arrancar com um combinação de botões pressionada... vejam último link);

Page 10: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Ligar por cabo USB ao PC e se em Windows

esperar que as drivers sejam instaladas;● No terminal executar:

fastboot oem unlock

– E em outros dispositivos?● Uiii... aí normalmente têm de

aproveitar algum bug para

conseguirem ter “root” e só

assim conseguem desbloquear

Page 11: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● O meu conselho é procurarem aqui pelo vosso

dispositivo:

http://forum.xda-developers.com/

http://www.androidpt.com/

http://www.needrom.com/

● As “recoveries” mais conhecidas são:

https://www.clockworkmod.com/

http://teamw.in/project/twrp2

Page 12: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Mais dicas sobre como fazer root:

– http://www.guidingtech.com/24035/root-android-bin4ry-universal/

– http://pplware.sapo.pt/smartphones-tablets/android/4-aplicacoes-para-fazer-root-ao-seu-android/

– http://www.kingoapp.com/android-root.htm● E instalar recoveries:

– http://www.guidingtech.com/24096/install-custom-recovery-rom-android/

– http://forum.xda-developers.com/showthread.php?t=2334554– http://www.addictivetips.com/mobile/how-to-install-a-custom-

recovery-to-an-android-phone-device/

Page 13: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Têm um equipamento

Samsung?

Então usem o “Odin” para instalar roms e recoveries:

http://forum.xda-developers.com/galaxy-s3/themes-apps/27-08-2013-odin-3-09-odin-1-85-versions-t2189539

– Grande problema com o “Odin”: Windows Only

Page 14: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Uma recovery:

Page 15: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Ok... já tenho uma recovery instalada...

E agora?

● 2 Hipóteses:

– Mais simples → Usar como base uma rom existente;

– Mais difícil → Basear na imagem original;

Page 16: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Basear numa rom existente:

– Procurar uma rom existente → XDA

– Formato “zip” → Unzip

– Usar o modo recovery para instalar a ROM

– Testar e ver se nos agrada, e perceber o que queremos alterar...

Page 17: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Basear na imagem original:

– Temos de ter o “zip” da imagem original do equipamento...

● Se temos root a forma mais simples é:1) Fazer um reset total ao equipamento (devem ter essa opção

nas configurações);

2) Reiniciar

3) Instalar a aplicacão “Terminal Emulator” e lançá-la:

https://play.google.com/store/apps/details?id=jackpal.androidterm

Page 18: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android4) Na aplicação executar:

su

tar -c system/* >> sdcard/system.tar

5) E esperamos...

6) Vamos ter no final no nosso cartão de memória um ficheiro chamado “system.tar” que copiamos para o nosso PC

7) E vamos também precisar do kernel, que é o ficheiro:

boot.img

Page 19: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Já temos os ficheiros principais vamos lá a fazer coisas:● Criem uma pasta para desenvolvimento:

mkdir android/{orig,dev}

cd android● Copiem a rom em que se vão basear ou os ficheiros que criaram da vossa rom stock para:

cp XYZ android/orig/

Page 20: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android●Descompactem a rom base para a dir de desenvolvimento:

cd dev

unzip ../orig/rom.zip

●Ou descompactem o system.tar e copiem o boot.img:

cd dev

tar xvf ../orig/system.tar

cp ../boot.img .

Page 21: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Têm de ficar com este conjunto de

ficheiros/directorias:

Page 22: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Em System devem ter:

Page 23: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Mas depende da vossa rom. O essencial

são (o /semc pode não existir):

Page 24: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● O fundamental desta pasta a nível de

costumização é a pasta “app” e o ficheiro build.prop.

– Em “app” colocam as aplicações (apks) que não querem que possam ser desinstaladas, e que querem que tenham permissões extra no sistema.

Page 25: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android– Launchers e outras aplicações essenciais

devem estar aqui;

– Normalmente é daqui que retiram as aplicações extra que o vosso dispositivo trás e que querem remover.

– ATENÇÃO – Remover coisas a mais pode tornar o vosso telemóvel inutilizável...

Page 26: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android– Alterar o vosso launcher por omissão é tão

simples como remover o que não quiserem e colocar aqui o que quiserem.

– Só devem colocar um... o Android detecta e usa-o automaticamente no arranque;

Page 27: Workshop on Android Rom Creation - FISTA/ISCTE 2014

AndroidTanto

lixo...

Page 28: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Em “data/” devem ter (se não existir

criem à mão):

mkdir data/{app,data}

Page 29: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● E em “data/app” colocam as aplicações

que podem querem remover, e que precisam de menos privilégios.

Page 30: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Para extrair o boot.img descarreguem

isto: http://android-serialport-api.googlecode.com/files/android_bootimg_tools.tar.gz

Abram:

tar xzvf android_bootimg_tools.tar.gz

Page 31: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Agora fazem:

./unpackbootimg -i ./boot.img

E ficam com os ficheiros de arranque, em particular o “ramdisk”...

Mais à frente explico como abrir e alterar isto.

● Para reempacotar:

./mkbootimg --kernel boot.img-zImage --ramdisk boot.img-ramdisk.gz -o myboot.img

Page 32: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Criem, se não existir, a dir e sub-dirs

“META-INF”:

mkdir META-INF/com/google/android

Page 33: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Lá dentro deverão ter binário chamado

“update-binary” (Qualquer rom tem este binário, descarreguem uma qualquer para o irem buscar se necessário)

● E um script chamado “updater-script”

– Este script é um ficheiro de texto, que usa uma linguagem tipo shell scripting muito básica (Edify) e que inclui todos os passos a executar na instalação da ROM

Page 34: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Têm aqui bastante informação sobre a

sintaxe desta linguagem:

http://wiki.cyanogenmod.org/w/Doc:_About_Edify

● Mas querem um exemplo?

Page 35: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Uma versão comum do updater-script:

Page 36: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Uma versão comum do updater-script:

Page 37: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Uma versão comum do updater-script:

Page 38: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Mas eu queria que a ROM aparecesse

com o meu nome no dispositivo...

Onde mudo isso?

Page 39: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Na pasta “System” estava lá um ficheiro

chamado “build.prop”...

● Este ficheiro pode ser editado e permite alterar várias configurações de sistema:

– Nome da imagem;

– Força de sinal;

– Densidade...

Page 40: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Vejam aqui algumas coisas que podem

mudar:

http://forum.xda-developers.com/showthread.php?t=1697040

Mas mudar o nome da Rom como é? Ok, é mudar na propriedade:

ro.build.display.id=A Minha ROM

Page 41: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● E com estas dicas vamos lá criar a

rom... que não é mais do que fazer um zip da pasta:

cd dev

zip -r myrom.zip

Page 42: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Copiamos o ficheiro “myrom.zip” para o

cartão de memória do dispositivo;

● Arrancamos para a Recovery e limpamos a cache e a dalvik-cache;

● Formatamos o /system e a /data

● E escolhemos instalar zip de um ficheiro...

Page 43: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Et voilá...

- Se arrancar excelente... – Se não... recomecem... com pequenas

alterações

– Consigo testar sem ser num dispositivo a sério?

Page 44: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Tem a vantagem de ser seguro;

– Tem a desvantagem de não termos recovery, e por isso não conseguimos testar tudo...

– E como fazer:

Page 45: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Para instalar o emulador é necessário fazer o download do SDK de Android a partir de http://developer.android.com/sdk/index.html

– Após isto é necessário extrair o mesmo. Para tal pode-se usar o seguinte comando:

$ cd ~/android_devel

$ mkdir ~/android_devel

$ tar xf android-sdk_rXX.X-linux.tgz

Page 46: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Após isto vamos ficar com uma pasta android-sdk-linux. Vamos então entrar em android-sdk-linux/tools e executar o binário com o nome "android" que se encontra na mesma. Para tal basta fazer:

$ cd ~/android_devel/android-sdk-linux/tools

$ ./android

– No programa que abrimos vamos seleccionar "android SDK Tools", "android SDK Platform-Tools" e as APIs para as quais pretendemos desenvolver. Por fim é só clicar em instalar.

– Depois de o download estar completo podemos sair da aplicação.

Page 47: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Para criarmos o emulador temos de abrir então o Android Virtual Device Manager

$ ./android avd

– Neste podemos então criar uma nova AVD clicando em "New...". Depois configuramos as opções da AVD e confirmamos em "OK".

– Para correr o emulador criado basta seleccionar o mesmo na lista e clicar em "Start...". Também podemos correr o mesmo a partir da shell introduzindo o seguinte comando:

$ ./emulator @NomeDoAVD

Page 48: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Para abrir a imagem da rom do emulador temos que ir a pasta do SDK e entrar dentro das imagem de sistema

$ cd android-sdk-linux/system-images– Nesta directoria encontramos pastas que contêm as imagens para cada API

de Android.

$ cd android-XX/default/armeabi-v7a

● Após entrarmos na directoria da API e arquitectura desejados vamos encontrar alguns ficheiros entre os quais os seguintes.

– ramdisk.img: O boot.img do emulador. Este ficheiro é carregado pelo kernel ao iniciar e contêm alguns ficheiros de configuração necessários para iniciar e montar as restantes partições de sistema.

Page 49: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

● system.img: Este ficheiro contem a partição que vai ser montada em /system. Esta partição tem todos os ficheiros de sistema.

● userdata.img: Este ficheiro contem os dados de utilizador e é montado em /data.

– Nunca devemos alterar estes ficheiros directamente da pasta que contêm as imagens.

– Para tal fazemos primeiro cópias dos mesmos.

$ mkdir ~/android_devel/images

$ cp ramdisk.img system.img userdata.img ~/android_devel/images/

Page 50: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– De modo a descomprimir o ficheiro system.img que esta no formato de uma partição yaffs2 temos fazer o download de dois programas para fazer o unpack e repack da imagem.

$ cd /usr/bin

$ sudo wget http://jiggawatt.org/badc0de/android/mkfs.yaffs2.x86.tar.gz

$ sudo tar xfz mkfs.yaffs2.x86.tar.gz

$ sudo rm mkfs.yaffs2.x86.tar.gz

$ sudo wget http://unyaffs.googlecode.com/files/unyaffs

$ sudo chmod +x unyaffs

Page 51: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Após instaladas criamos e mudamos para uma directoria vazia de modo a descompactarmos a imagem.

$ mkdir -p ~/android_devel/images/open/system

$ cd ~/android_devel/images/open/system

$ unyaffs ~/android_devel/images/system.img

– Ficamos assim com a imagem descomprimida de modo a podermos alterar.

Page 52: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Quando terminadas as alterações a uma rom é necessário comprimir novamente no formato yaffs2. Para tal temos que estar na directoria onde está a raiz do sistema de ficheiros da rom em questão.

– Para comprimir executamos o seguinte comando:

$ mkfs.yaffs2.x86 . ../mysystem.img

– Fica assim pronta a rom para ser utilizada no emulador.

Page 53: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Para abrir a ramdisk.img fazemos:

$ cd ~/android_devel/images/open/ramdisk

$ gunzip -c ../../ramdisk.img | cpio -i

– Para fechar fazemos:

$ find . | cpio -o -H newc | gzip > ../myramdisk.img

Page 54: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Testar no emulador android...

– Para usar uma custom rom no emulador basta fazer o seguinte:

$ cd ~/android_devel/android-sdk-linux/tools/

$ ./emulator @NomeDoAVD -system / ~/android_devel/images/open/mysystem.img -data / ~/android_devel/images/open/myuserdata.img / -ramdisk / ~/android_devel/images/open/myramdisk.img

Page 55: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● E ir buscar aplicações para colocar na

ROM?

– Ou, com root, usam uma aplicação tipo “root explorer” e copiam da vossa pasta “/data/app” aplicações que já instalaram

– Ou usam uns sites engraçados tipo:● http://ifc0nfig.com/apk-downloader● http://apps.evozi.com/apk-downloader/

Page 56: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● E alterar aplicações existentes:

– Geralmente ilegal (vejam a licença)

– Pode ser possível ou não● Se estiver em SMALI (pseudo byte code

dalvik) ou com o código obfuscado pode ser dificil

– Mas podemos sempre extrair:

Page 57: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● E como extrair:

– Colocar o aapt no path do sistema (está no sdk);

– Descarregar o apktool:

https://code.google.com/p/android-apktool

Page 58: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● E como extrair:

– Por exemplo para um pacote chamado framework-res.apk:

java -jar ./helpers/apktool1.5.2/apktool.jar d -f framework-res.apk framework-res/

Page 59: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● E como reempacotar:

java -jar ./helpers/apktool1.5.2/apktool.jar b framework-res/ framework-res.apk

– Fácil não é? Mas atenção o pacote reempacotado vai ficar assinado com chaves de desenvolvimento e deixa de ser actualizável pelo Google Play...

Page 60: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Já que mencionei o framework-res.apk:

– Este pacote contém muitas das peças fundamentais do vosso sistema, e está na pasta “/system/app”

– Lá dentro podem por exemplo procurar pelo ficheiro “default_wallpaper.jpg” que é.... surpresa....

o wallpaper por omissão...

Page 61: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● O que faltou falar:

– Quase tudo (init.rc, partições, temas, )...

– Mas já têm as bases... agora é aprofundar....

– O Fórum XDA Developers é o vosso melhor amigo

Page 62: Workshop on Android Rom Creation - FISTA/ISCTE 2014

Android● Obrigado...

Dúvidas, ideias, críticas:

[email protected]