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 :)
Originalmente, o Android foi escrito apenas para processadores de 32 bits: e, especificamente, processadores ARM de 32 bits. Mais tarde, a Intel e o MIPS investiram muito em fazer com que o Android também suportasse suas arquiteturas: mas ainda apenas processadores de 32 bits. Eles conseguiram fazer isso sem (muitos) problemas de compatibilidade, porque a maioria dos aplicativos não é enviada como binários. Escritos em Java, eles são enviados como bytecode , que uma máquina virtual no telefone compila com a arquitetura do telefone quando o aplicativo é executado. Alguns aplicativos incluem nativocomponentes, que são enviados como binários. Isso é feito para acelerar alguns tipos de aplicativos (principalmente jogos) ou para permitir que o aplicativo acesse bibliotecas C que não estão disponíveis em Java. Esses aplicativos podem incluir mais de um binário para as partes do código nativo, para permitir a execução em arquiteturas diferentes. Mesmo assim, a maioria dos aplicativos é apenas para Java, portanto, eles funcionam em qualquer arquitetura.
O que foi dito acima era verdade no momento em que essa pergunta (e a maioria das outras respostas) foi escrita, mas não mais. Lollipop introduziu suporte para os novos processadores ARM de 64 bits ( ARMv8), bem como para os processadores x86_64 da Intel e da AMD, o que significa que o Android agora suporta processadores de 32 e 64 bits. O Nexus 9 foi o primeiro dispositivo Android de 64 bits. Além de dar acesso a novas extensões do conjunto de instruções, o suporte a 64 bits significa que os aplicativos podem usar mais de 4 GB de RAM. A maioria dos aplicativos não precisa de muito, mas jogos de ponta e software de criação de foto / vídeo certamente podem fazer uso: empurrar o Android para ser uma plataforma para jogos com qualidade de console (incluindo jogos de realidade virtual) e para criar conteúdo. Os aplicativos Java não precisam ser atualizados para aproveitar isso, porque a máquina virtual sempre os compila com a arquitetura do telefone, mas os aplicativos com código nativo serão necessários.
Como o ARMv8 é compatível com versões anteriores com código de 32 bits (da mesma forma que o x86_64 ainda pode executar o código x86), mesmo os aplicativos que incluem código nativo para processadores de 32 bits ainda podem ser executados no Android de 64 bits. Portanto, um aplicativo só precisa ser compilado para 64 bits se contiver código nativo e quiser aproveitar o limite mais alto de RAM ou os novos recursos da arquitetura.
fonte
Todos os chips ARM atualmente são de 32 bits. Por isso, o Android atualmente executa todo o código em um ambiente de 32 bits.
Processadores de 64 bits definidos para serem lançados em 2014 .
fonte
Nem na verdade. O Android é um sistema operacional baseado em VM do Dalvik e o Google Play hospeda aplicativos Dalvik. A própria Dalvik VM, como Java VM, é sempre de 32 bits, independentemente da experiência da máquina física.
Como você suspeitava, os aplicativos fornecidos com binários nativos e os aplicativos NDK devem ser fornecidos com binários compilados para todas as arquiteturas nas quais se destina a execução. A arquitetura mais comum em que o Android roda é o ARM de 32 bits; no entanto, também existem dispositivos que são executados em x86 e MIPS.
fonte
Estou apenas adivinhando, mas acho que isso também explica tudo de maneira simples. Depende do dispositivo que você está usando, existem quatro tipos de SO, que são ARM, ARM 64, X84 e X84_64. O ARM é a plataforma popular de 32 bits, o ARM 64 também é a plataforma popular, mas de 64 bits, o X84 é a plataforma incomum e usada no Zenfones, o mesmo que o X84_64 é incomum e usado nos emuladores do Android. Eu tenho essas informações no Open Gapps
fonte