Workshop on Android Rom Creation - FISTA/ISCTE 2014
-
Upload
flavio-moringa -
Category
Technology
-
view
392 -
download
0
description
Transcript of Workshop on Android Rom Creation - FISTA/ISCTE 2014
Rom's AndroidComo criar/modificar uma ROM para Android
Sumário● Caixa Mágica
● Android
– Arquitectura e Arranque
– Root e Recovery
– Rom's
– Testar no emulador
– Alterar APK's
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.).
Android● Base Linux;
● Módulos de hardware;● SDK da Google;● Google experience (Não AOSP);● Um linux que finalmente tem sucesso
no mainstream
Android
● Arquitectura:
Android● O arranque:
http://www.kpbird.com/2012/11/in-depth-android-boot-sequence-process.html
Android
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.
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);
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
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
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/
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
Android● Uma recovery:
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;
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...
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
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
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/
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 .
Android● Têm de ficar com este conjunto de
ficheiros/directorias:
Android● Em System devem ter:
Android● Mas depende da vossa rom. O essencial
são (o /semc pode não existir):
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.
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...
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;
AndroidTanto
lixo...
Android● Em “data/” devem ter (se não existir
criem à mão):
mkdir data/{app,data}
Android● E em “data/app” colocam as aplicações
que podem querem remover, e que precisam de menos privilégios.
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
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
Android● Criem, se não existir, a dir e sub-dirs
“META-INF”:
mkdir META-INF/com/google/android
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
Android● Têm aqui bastante informação sobre a
sintaxe desta linguagem:
http://wiki.cyanogenmod.org/w/Doc:_About_Edify
● Mas querem um exemplo?
Android● Uma versão comum do updater-script:
Android● Uma versão comum do updater-script:
Android● Uma versão comum do updater-script:
Android● Mas eu queria que a ROM aparecesse
com o meu nome no dispositivo...
Onde mudo isso?
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...
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
–
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
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...
Android● Et voilá...
- Se arrancar excelente... – Se não... recomecem... com pequenas
alterações
– Consigo testar sem ser num dispositivo a sério?
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:
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
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.
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
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.
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/
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
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.
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.
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
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
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/
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:
Android● E como extrair:
– Colocar o aapt no path do sistema (está no sdk);
– Descarregar o apktool:
https://code.google.com/p/android-apktool
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/
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...
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...
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