Na esfera dos chipsets ARM, que é o fator comum, toda a pilha do Android, do kernel quase idêntico baseado no Linux, é de fato 32 bits, compilada em cruz a partir de um ambiente host de 32 bits / 64 bits, o ambiente host geralmente é uma das distribuições do Linux. A distribuição recomendada pelo Google para criar e compilar o Android é o Ubuntu .
A biblioteca de tempo de execução do Android (mídia, gráficos, sistema de arquivos, para citar apenas alguns) também tem 32 bits, mas quando alcançamos a camada do dalvikvm, o número de bits se torna irrelevante, como é neste momento, os aplicativos chegando da Google Play Store são bytecode nativo (um "subproduto" do código Java gerado compilado em um bytecode portátil) que tem como alvo o DalvikVM (Máquina Virtual) que, por sua vez, interpreta e converte o bytecode visando o conjunto de instruções bruto do ARM.
O Froyo foi o último Android que habilitou a compilação em um ambiente hospedado de 32 bits no qual foi compilado de forma cruzada visando o chipset ARM.
O pão de gengibre foi o primeiro do "futuro" Android, naquela época, três anos atrás, que introduziu um requisito para usar um ambiente hospedado de 64 bits no qual foi construído. Havia muitos hacks para fazer o Gingerbread ser construído em um ambiente hospedado de 32 bits.
O ICS e o JB, e acima agora, definitivamente exigem um ambiente de 64 bits para acelerar a compilação e reduzir o tempo de execução na construção.
Então, para resumir, o que você vê na Play Store não influencia se 32 bits ou 64 bits são usados e, portanto, irrelevantes.
Nota lateral: A distribuição típica de 16 GB de RAM / quad core / 64 bits do Linux, o tempo necessário para criar o ICS do zero, leva 30 minutos no máximo; se essa fosse uma distribuição Linux de 32 bits, levaria mais tempo, de fato, pode causar um colapso da CPU simplesmente, não há poder de processamento suficiente para produzir e gerar código compilado em cruz, que é um processo muito exigente e exigente!
Prova disso.
Puxe qualquer binário ARM nativo encontrado /system/bin
ou /system/xbin
, por exemplo, /system/bin/dalvikvm
este é o binário Dalvik VM que é responsável pelas camadas superiores de Java e APKs.
Agora, examine o binário emitindo este comando: file dalvikvm
que fornece um resumo do tipo de arquivo, a saída esperada seria esta:
dalvikvm: ELF executável LSB de 32 bits, ARM, versão 1 (SYSV), vinculado dinamicamente (usa bibliotecas compartilhadas), despojado
Observe a referência ao ELF de 32 bits e é compilado de forma cruzada no ARM e é um executável binário.
Certo, seguindo em frente, vamos inspecionar uma biblioteca compartilhada nativa encontrada em /system/lib
, por exemplo /system/lib/libandroid_runtime.so
, agora problema file libandroid_runtime.so
, a saída esperada seria esta:
libandroid_runtime.so: objeto compartilhado do ELF de 32 bits LSB, ARM, versão 1 (SYSV), vinculado dinamicamente, despojado
Novamente, observe, seu ELF de 32 bits, compilado de forma cruzada para o ARM e é uma biblioteca compartilhada.
A chave para a compilação cruzada do host pode ser encontrada na fonte AOSP, ou seja, a compilação Gingerbread originalmente tinha um requisito para ser construída em um sistema host de 64 bits, aqui está o link do grupo de notícias referente a como corrigir os scripts para que ele se baseie Host de 32 bits que possui dois patches, encontrados aqui, para ( build/core.mk
e combinados ) na revisão Gerrit da AOSP.build/main.mk
Como resultado subsequente, esse patch foi direcionado aos scripts de compilação do ICS, nos quais eu tive o privilégio de compilar o ICS em uma plataforma de 32 bits que levou três dias para compilar ( era uma porta do ICS para o Zte Blade ). Agora, os requisitos são ramp up, você não precisa definitivamente de acolhimento de 64 bits para permitir cross-compilação de construção AOSP de ICS para cima :)