O slideshow foi denunciado.

Workshop on Android Rom Creation - FISTA/ISCTE 2014

878 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Workshop on Android Rom Creation - FISTA/ISCTE 2014

  1. 1. Rom's Android Como criar/modificar uma ROM para Android
  2. 2. Sumário ● Caixa Mágica ● Android – Arquitectura e Arranque – Root e Recovery – Rom's – Testar no emulador – Alterar APK's
  3. 3. 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.).
  4. 4. Android ● Base Linux; ● Módulos de hardware; ● SDK da Google; ● Google experience (Não AOSP); ● Um linux que finalmente tem sucesso no mainstream
  5. 5. Android ● Arquitectura:
  6. 6. Android ● O arranque: http://www.kpbird.com/2012/11/in-depth -android-boot-sequence-process.html
  7. 7. Android
  8. 8. 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-boot loader-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.
  9. 9. 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);
  10. 10. 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
  11. 11. 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
  12. 12. Android ● Mais dicas sobre como fazer root: – http://www.guidingtech.com/24035/root-android-bin4ry-univer sal/ – http://pplware.sapo.pt/smartphones-tablets/android/4-aplicacoe s-para-fazer-root-ao-seu-android/ – http://www.kingoapp.com/android-root.htm ● E instalar recoveries: – http://www.guidingtech.com/24096/install-custom-recovery-ro m-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/
  13. 13. Android ● Têm um equipamento Samsung? Então usem o “Odin” para instalar roms e recoveries: http://forum.xda-develo pers.com/galaxy-s3/the mes-apps/27-08-2013-o din-3-09-odin-1-85-vers ions-t2189539 – Grande problema com o “Odin”: Windows Only
  14. 14. Android ● Uma recovery:
  15. 15. 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;
  16. 16. 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...
  17. 17. 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
  18. 18. Android 4) 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
  19. 19. 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/
  20. 20. 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 .
  21. 21. Android ● Têm de ficar com este conjunto de ficheiros/directorias:
  22. 22. Android ● Em System devem ter:
  23. 23. Android ● Mas depende da vossa rom. O essencial são (o /semc pode não existir):
  24. 24. 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.
  25. 25. 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...
  26. 26. 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;
  27. 27. Android Tanto lixo...
  28. 28. Android ● Em “data/” devem ter (se não existir criem à mão): mkdir data/{app,data}
  29. 29. Android ● E em “data/app” colocam as aplicações que podem querem remover, e que precisam de menos privilégios.
  30. 30. Android ● Para extrair o boot.img descarreguem isto: http://android-serialport-api.googlecode.com/files/an droid_bootimg_tools.tar.gz Abram: tar xzvf android_bootimg_tools.tar.gz
  31. 31. 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
  32. 32. Android ● Criem, se não existir, a dir e sub-dirs “META-INF”: mkdir META-INF/com/google/android
  33. 33. 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
  34. 34. Android ● Têm aqui bastante informação sobre a sintaxe desta linguagem: http://wiki.cyanogenmod.org/w/Doc:_ About_Edify ● Mas querem um exemplo?
  35. 35. Android ● Uma versão comum do updater-script:
  36. 36. Android ● Uma versão comum do updater-script:
  37. 37. Android ● Uma versão comum do updater-script:
  38. 38. Android ● Mas eu queria que a ROM aparecesse com o meu nome no dispositivo... Onde mudo isso?
  39. 39. 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...
  40. 40. Android ● Vejam aqui algumas coisas que podem mudar: http://forum.xda-developers.com/showthread.p hp?t=1697040 Mas mudar o nome da Rom como é? Ok, é mudar na propriedade: ro.build.display.id=A Minha ROM
  41. 41. 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
  42. 42. 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...
  43. 43. Android ● Et voilá... - Se arrancar excelente... – Se não... recomecem... com pequenas alterações – Consigo testar sem ser num dispositivo a sério?
  44. 44. 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:
  45. 45. 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
  46. 46. 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.
  47. 47. 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
  48. 48. 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.
  49. 49. 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/
  50. 50. 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
  51. 51. 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.
  52. 52. 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.
  53. 53. 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
  54. 54. 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
  55. 55. 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/
  56. 56. 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:
  57. 57. Android ● E como extrair: – Colocar o aapt no path do sistema (está no sdk); – Descarregar o apktool: https://code.google.com/p/android-apktool
  58. 58. 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/
  59. 59. 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...
  60. 60. 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...
  61. 61. 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
  62. 62. Android ● Obrigado... Dúvidas, ideias, críticas: flavio.moringa@caixamagica.pt

×