O título é bastante autoexplicativo: o Android é um sistema operacional de 32 ou 64 bits? Presumo que seja um ou outro e não ambos, pois isso forçaria os binários de 32 e 64 bits a serem hospedados no Google Play. Eu sei que esta é uma pergunta simples, e que outras pessoas têm perguntado, mas na minha vida não consegui encontrar uma resposta na web e certamente não há nenhuma neste SE.
Resposta
No reino dos chipsets ARM, que é o fator comum, toda a pilha do Android, do kernel quase idêntico baseado em Linux, são na verdade, 32 bits, cross-compilado de geralmente um ambiente de host de 32 bits / 64 bits, o ambiente de host é geralmente uma das distribuições do Linux. A distribuição recomendada pelo Google para a construção e compilação cruzada do Android é o Ubuntu .
A biblioteca de tempo de execução do Android (mídia, gráficos, sistema de arquivos, para citar apenas alguns) são também 32 bits, mas à medida que alcançamos a camada do dalvikvm, então o número de bits se torna irrelevante, pois neste ponto, os apks vindos 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 traduz o bytecode direcionado ao conjunto de instruções ARM bruto.
Froyo foi o último Android que permitiu a compilação em um ambiente hospedado de 32 bits no qual foi compilado cruzado visando o chipset ARM.
O Gingerbread foi o primeiro do Android “futuro”, naquela época, cerca de três anos atrás, que introduziu um requisito para usar um ambiente hospedado de 64 bits no qual foi construído . Houve muitos hacks para que o Gingerbread fosse construído em um ambiente hospedado de 32 bits.
ICS e JB, e posteriores agora definitivamente requerem 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, é irrelevante.
Observação lateral: 16 GB de RAM típico / Distribuição Quad core / 64bit Linux, o tempo que leva para construir ICS a partir do zero, leva 30 minutos no máximo, se esta fosse uma distribuição Linux de 32 bits, teria demorado mais, na verdade, pode causar um colapso da CPU porque simplesmente não é suficiente poder de processamento para agitar e gerar código compilado cruzado, que é um processo muito exigente e desgastante!
Prova disso.
Extraia qualquer binário ARM nativo encontrado em /system/bin
ou /system/xbin
, por exemplo, /system/bin/dalvikvm
, este é o binário da VM Dalvik 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 LSB executável de 32 bits, ARM, versão 1 (SYSV), vinculado dinamicamente (usa libs compartilhadas), removido
Observe a referência a ELF de 32 bits e é compilado para ARM e é um executável binário.
Certo, continuando, vamos inspecionar uma biblioteca compartilhada nativa encontrada em /system/lib
, por exemplo, /system/lib/libandroid_runtime.so
, agora emita file libandroid_runtime.so
, a saída esperada seria esta:
libandroid_runtime.so: ELF objeto compartilhado LSB de 32 bits, ARM, versão 1 (SYSV), vinculado dinamicamente, removido
Novamente, observe, seu ELF de 32 bits, compilado para 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 do Gingerbread originalmente tinha um requisito para ser construída em um sistema host de 64 bits, aqui está o grupo de notícias linky referindo-se a como corrigir os scripts para que sejam compilados em um host de 32 bits que possui dois patches, encontrados aqui, para build/core.mk
e build/main.mk
( combinados ) na revisão Gerrit do AOSP.
Como um subsequente resultado, este patch fez o seu caminho para os scripts de construção do ICS nos quais eu tive o privilégio de compilar o ICS em uma plataforma de 32 bits que levou 3 dias para construir ( era uma porta do ICS para o Zte Blade ). Agora, os requisitos estão aumentados, você definitivamente precisa de um host de 64 bits para permitir a compilação cruzada de construção AOSP de ICS para cima: )
Comentários
- Então, você quer dizer que a compilação e a execução de um sistema operacional Android de 32 bits fica mais lento do que em 64 bits? É um requisito geral para todos os sistemas operacionais de 64 bits para Android moderno, como Kitkat ou L ?
- Agora existem dispositivos ARM de 64 bits executando Android de 64 bits.
- Eu ‘ m downvoting porque a maioria da resposta é sobre quais ambientes são usados para compilar o Android, o que é completamente irrelevante para o pergunta.
- @DanHulme Esta resposta foi postada cerca de 4 anos atrás … sim, a paisagem mudou muito desde então. 🙂
- Sim, isso ‘ é verdade, e eu ‘ postarei uma nova resposta sobre o situação hoje, mas o ambiente de compilação sempre foi uma pista falsa.
Resposta
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 para fazer com que o Android também suportasse suas arquiteturas: mas ainda com processadores de 32 bits. Eles conseguiram fazer isso sem (muitos) problemas de compatibilidade, porque a maioria dos aplicativos não são enviados como binários. Escritos em Java, eles são enviados como bytecode , que é uma máquina virtual no telefone compila para a arquitetura do telefone quando o aplicativo é executado. Alguns aplicativos incluem componentes nativos , que são enviados como binários. Isso é feito para tornar alguns tipos de aplicativos mais rápidos (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 que sejam executados em arquiteturas diferentes. Mesmo assim, a maioria dos aplicativos é somente Java, então eles funcionam em qualquer arquitetura.
O que foi dito acima era verdade na época em que esta pergunta (e a maioria das outras respostas) era escrito, mas não mais. Lollipop introduziu suporte para os novos processadores ARM de 64 bits ( ARMv8 ), bem como para processadores Intel e AMD x86_64, o que significa que o Android agora oferece suporte para 32 bits e Processadores de 64 bits. O Nexus 9 foi o primeiro dispositivo Android de 64 bits. Além de dar acesso a novas extensões de 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 última geração e software de criação de fotos / vídeos certamente podem fazer uso disso: levando o Android a ser uma plataforma para jogos com qualidade de console (incluindo jogos de RV) e para a criação de conteúdo. Aplicativos Java não precisa ser atualizado para aproveitar isso, porque a máquina virtual sempre os compila para a arquitetura do telefone, mas os aplicativos com código nativo o farão.
Porque o ARMv8 é compatível com versões anteriores do 32- código de bits (da mesma forma que x86_64 ainda pode executar código x86), mesmo aplicativos que incluem código nativo para processadores de 32 bits ainda podem ser executados em Android de 64 bits. Portanto, um aplicativo só precisa ser compilado para 64 bits se contiver código e deseja aproveitar o limite superior de RAM ou os novos recursos da arquitetura.
Resposta
Todos os chips ARM são atualmente de 32 bits. Por causa disso, o Android atualmente executa todo o código em um ambiente de 32 bits.
Processadores de 64 bits definidos para lançamento em 2014 .
Comentários
- Esse ‘ não é exatamente uma fonte confiável, visto que se tratava de servidores, para citar “ Smartphone está um pouco mais distante ”, disse Forsyth. , ‘ estamos falando sobre ARM no contexto de Android / Smartphones / Tablets.
Resposta
O Android é um sistema operacional de 32 ou 64 bits? Presumo que seja um ou outro e não ambos, pois isso forçaria os binários de 32 e 64 bits a serem hospedados no Google Play.
Nem na verdade. O Android é um sistema operacional baseado em VM da Dalvik, e o Google Play hospeda aplicativos da Dalvik. O próprio Dalvik VM, como o Java VM, é sempre de 32 bits, independentemente da quantidade de bits da máquina física.
Como você suspeitou, os aplicativos que vêm com binários nativos e aplicativos NDK devem ser enviados com binários compilados para todas as arquiteturas destina-se a ser executado. A arquitetura mais comum em que o Android é executado é a ARM de 32 bits; no entanto, também existem dispositivos que funcionam em x86 e MIPS.
Resposta
Estou apenas supondo, mas acho que isso também explica apenas simples. Depende de qual dispositivo você está usando, existem quatro tipos de sistema operacional: 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, assim como o X84_64 é incomum e é usado nos emuladores Android. Eu tenho essas informações de sistema operacional no Open Gapps