Pages

Subscribe:

Ads 468x60px

domingo, 6 de maio de 2012

Install Android on iPhone



Yes, It’s now possible to DualBoot Android OS on iPhone. Thanks to the work byLinux on the iPhone Project and taranfx, we are now seeing it running with minor glitches.
Download the Image from one of the choices: Download via torrent | Download via SourceForge
Important: Currently it works only with iPhone 2g (original iPhone) but it should soon become pretty easy to port forward to the iPhone 3G. Apparently, The 3GS would take more work. 

Instructions – iDroid: Android on your iPhone 2g
Step 1. Jailbreak your iPhone. 
Step 2. Unzip the files into a location, say desktop. and replace two files (android.img.gz and system.img) in the prebuilt directory using the files from this archive. However, if your installation fails, you should create these 2 files using the process outlined here. [Why? Due to licensing issues, certain files will have to be manually copied]

Step 3. Copy everything from “prebuilt” (i.e. ramdisk.img, system.img, ramdisk.img, userdata.img, cache.img, android.img.gz, and zImage) into “/private/var” on the iPhone using sftp client like Filezilla, or Winscp (windows).
Step 4. Installing OpeniBoot. 
Note: This step requires you to have a running Linux. If you happen to be a Windows users, you can use Ubuntu Live CD and boot with it (or use it in Virtualbox). Also, make sure you have “libusb-1.0-0″ installed. If not, get it from Synaptics package manager. (libusb is installed by default on regular installations, not on LIVE CDs)

Install Android on iPhone
1. Put your iPhone into recovery Mode ( Turn the device completely off and disconnect it from cable/dock. Hold down the home button. While holding down the home button connect to a computer with a cable or dock. Keep holding down the home button until you see a connect-to-iTunes screen. You are now in recovery mode)
2. Navigate to the directory where you unzipped the tar.gz file and then to “utils” directory. i.e. “iDroid > utils”
3. Copy “loadibec“, “openiboot.img3″ and “oibc” to your home folder. (You can know your home directory using command “cd ~“) and “openiboot.img3” to “utils” directoy of the unzipped files
4. Open Terminal and run “sudo ./loadibec openiboot.img3“. Doing this will show up openiBoot menu on your iPhone.
5. Press the Lock button to select the openiboot console, then press the Home button.
6. Run ”sudo ./oibc“. Terminal should now show the same lines of text that’s displayed on your phone’s screen.
7. Type “install“. Once done, type “reboot” when you see message “Refreshed Image List” (look at the screenshot below)
8. The phone would boot back into openiboot. Select Console with Power button and then hold the Home button for more than two seconds to start booting Android.
Running iPhone OS Again
1. Reboot your iPhone and openiBoot menu would appear again.
2. Press the Lock (Power) button to highlight the Console option.
3. Press and hold the Home button for 2 to 3 seconds. This will boot Android. 

As emocionantes aventuras de um sys admin linux na procura pelo uptime perfeito!


android_t1

Continuando com meus posts sobre programação Android, mesmo desanimado pelo fato de não conseguir colocar minha(s) app(s) no Android Market.
Mas já que comecei, e o assunto é interessante, melhor continuar. Neste post, dando uma olhada por alto em como o Android OS é organizado e como ele gerencia a memória.

Arquitetura e Memória

O Android OS tem uma arquitetura em camadas (stacks). Os níveis mais baixos dessas camadas são por sua vez expostos para os níveis mais altos através de interfaces até a camada mais alta, onde se programa em Java.
A imagem abaixo (cortesia do google) demonstra uma visão aumentada de como estas camadas são organizadas:
Arquitetura do Android OS
Arquitetura do Android OS
Como se pode ver, o nível mais baixo do Android é o Kernel. Atualmente (versão 1.5 “cupcake”) o kernel utilizado é o Linux 2.6.27. No kernel estão também os drivers e controles básicos de hardware. A segunda camada é onde ficam as bibliotecas (libraries) e o próprio runtime do Android, incluindo aí a Dalvik Virtual Machine, encarregada de efetivamente executar o código das aplicações. A terceira camada consiste já das capacidades expostas aos desenvolvedores  para suas aplicações (gerenciador de janelas, sistema de notificação e etc). Finalmente a última camada é composta pelas aplicações propriamente ditas.
A camada de kernel é responsável também pelo controle mais fino da memória. Cada aplicação no Android roda em um processo separado, com sua própria VM, PID (número de processo) e usuário. Isso garante que caso uma aplicação dê problema, ela possa ser isolada e removida da memória sem comprometer o resto do sistema.
A Dalvik VM é a virtual machine que roda código java, mas com várias alterações para fazer isso usando menos ciclos de CPU (portanto gastando menos energia) e com otimizações de espaço/tamanho de dados. A Dalvik usa bytecode diferente da JVM tradicional e as aplicações usam um formato diferente do tradicional JAR (.jar), chamado .dex, também otimizado para menor uso de espaço.
Uma das diferenças da Dalvik é como ela mapeia a memória. Isso é feito usando um mapa memória-disco que permite que aplicações sejam rapidamente removidas da memória e depois restauradas. O G1 da T-Mobile limita cada aplicação a 16M de heap, e ainda estou tentando descobrir exatamente quanto de RAM ele tem. Algumas fontes dizem 192M, outras 64M. O fato é que a maioria das aplicações é bem menor que 16M. Quando o sistema começa a ter problemas de falta de memória o OS vai fechar aplicações que não estejam sendo exibidas, e estas aplicações podem ser retomadas depois com seus estados intactos (desde que bem programadas).
No próximo post eu vou falar um pouco sobre esses cuidados com as informações e o ciclo de vida das aplicações.