Ao baixar aplicativos para Android, às vezes eu vi aplicativos para armeabi-v7a
e x86
arquitetura.
Eu li algumas referências para armeabi-v7a
e x86
. No entanto, no final, não consegui finalizar quais processadores e arquiteturas móveis pertencem a armeabi-v7a
e quais pertencem a x86
.
Pelo que sei, os processadores móveis comumente usados em dispositivos Android são Snapdragon (da Qualcomm), MediaTek, Exynos (da Samsung) e Kirin (da Huawei). Quase todas as marcas explicam as especificações de um smartphone e quase todas as especificações dizem o processador móvel é de 64 bits ou não. Devo concluir que os processadores móveis de 64 bits (Snapdragon, MediaTek, Exynos ou Kirin) pertencem à arquitetura ARM?
EDITAR:
Para entender qual SoC é compatível com armeabi-v7a
apk Android e qual SoC é compatível com x86
apk do Android, analisei as especificações de MediaTek Helio X30
e Snapdragon 855
. A especificação do Helio X30 diz que ele suporta dual -core ARM Cortex-A73 e quad-core ARM Cortex-A53 mas ARM i não é mencionado em nenhuma parte da especificação do Snapdragon 855. Portanto, devo concluir que o Helio X30 oferecerá suporte a armeabi-v7a
aplicativos Android e o Snapdragon 855 não oferecerá suporte a armeabi-v7a
apps?
Esclareça minhas confusões.
Resposta
Aqui estão minhas notas resumidas incompletas sobre o assunto, mas o suficiente para responder à sua pergunta.
CONJUNTO DE INSTRUÇÕES:
Os processadores são feitos de matrizes semicondutoras, geralmente silício monocristalino de grau eletrônico. Eles não sabem inglês ou qualquer outra língua humana, eles entendem apenas 0
e 1
. Então, o designer do processador nos diz o que sequência de zero “se um” s podemos instruir esse processador específico. Esta linguagem numérica de instruções é padronizada como Machine Language
e o conjunto de instruções de máquina é chamado de Instruction Set
. Um processador pode atuar apenas em tipos específicos de conjunto de instruções.
Os conjuntos de instruções podem ser de 8/16/32/64 bits (define quantas instruções um processador pode processar por vez ), sendo os 2 últimos o comum atualmente.
IDIOMAS DE BAIXO NÍVEL:
Mas escrever o código do programa (instruções) diretamente em linguagem de máquina (o arquivo executável) é quase impossível porque levará anos para escrever e depurar um programa razoavelmente maior (que podemos escrever em algumas horas nos dias de hoje). para deixar os programadores à vontade, Assembly Languag e foi desenvolvida, ainda uma linguagem específica do processador, mas relativamente fácil de entender. O código escrito em linguagem Assembly é convertido em código de máquina por Assembler
– um programa escrito em linguagem de máquina. Ambas são chamadas de linguagens de baixo nível.
IDIOMAS DE ALTO NÍVEL:
Para reduzir ainda mais o esforço humano na comunicação com o hardware, foram desenvolvidas linguagens de alto nível que não estão vinculadas a um conjunto de instruções específico (denotando uma arquitetura específica). Elas são idênticas às linguagens humanas, portanto, fáceis de escrever, entender, depurar e aplicar a várias arquiteturas. O código escrito em linguagem de alto nível é convertido em linguagem de baixo nível por Compiler
– um programa escrito em linguagem de baixo nível. Uma das linguagens de alto nível mais comumente usadas é C. Mas às vezes o código não é pré-compilado para código de máquina, em vez disso executado diretamente (ou compilado durante a execução) por Interpreter
. Java é uma dessas linguagens “escreva uma vez, execute qualquer lugar” (WORA) que é compilada para byte-code
e então interpretada por Virtual Machine
– novamente um programa compilado.
INTERFACE BINÁRIA DO APLICATIVO (ABI):
Uma vez que um programa independente de arquitetura (código) pode ser convertido em código dependente de arquitetura para qualquer processador, é dever do compilador cuidar de todos os requisitos de uma arquitetura específica. Isso é o que Definição da interface binária do aplicativo (ABI). Em termos simples, uma ABI representa uma ou mais arquiteturas específicas. Mais detalhes sobre ABIs incorporados exigem uma visão dos estágios de montagem e compilação; código objeto, formato executável e vinculável (ELF), vinculação estática (arquivamento) e dinâmica de bibliotecas, etc.
Agora vamos à sua pergunta:
O QUE SÃO x86
E ARM
?
x86 é uma família de conjuntos de instruções, principalmente desenvolvida e fabricada pela Intel e AMD. ARM é outra família, projetada por uma única entidade ARM Holdings
e sendo licenciada para muitos fabricantes de soluções integradas, incluindo Qualcomm, Mediatek, Samsung e Huawei. Snapdragon, Exynos e Kirin são suas marcas. Eles não são fabricantes de processadores, mas têm licenças para incluir processadores ARM com seus próprios circuitos System on Chip (SoC).
O QUE É SoC?
Um System on Chip (SoC) é um pequeno circuito que inclui processadores junto com outros componentes como GPU, RAM, Flash / eMMC (equivalente a HDD ou SSD) , Módulo WiFi e bluetooth, conectividade USB, UART (portas seriais), JTAG (um protocolo de comunicação serial de nível muito inferior), GPS, modems (para conectividade celular) e possivelmente outros.
ARM ABIs:
Embora a maior parte dos aplicativos Android seja escrita em Java, pode-se programar em linguagens nativas como C e C ++, que precisa ser compilado. O Android fornece seu próprio kit de desenvolvimento nativo ( NDK ) incluindo (bibliotecas, arquivos de cabeçalho e) um compilador que pode compilar código para vários ABIs, incluindo armeabi-v7a
(armhf
na comunidade Linux) e x86
.
Aplicativo Android (Java) em si não é específico para uma arquitetura. Durante o processo de criação do aplicativo, o Android SDK converte a fonte Java em bytecode (.class
arquivos) e, em seguida, compila em D alvik EX ecutable (.dex
) arquivo que é compactado com arquivos .apk
. Este bytecode Dalvik é interpretado e executado em uma instância separada de Dalvik Virtual Machine
/ ART
para cada aplicativo por um processo chamado Zygote
. Ou pode ser compilado permanentemente para o código de máquina nativo (.odex
ou ) de acordo com a arquitetura do dispositivo durante a instalação do aplicativo (ou posteriormente ). Mas se o arquivo apk (zip) contém adicionalmente binários / bibliotecas ELF, eles são específicos da arquitetura. Os desenvolvedores geralmente incluem bibliotecas nativas para várias arquiteturas em seus aplicativos.
Aplicativos / programas / binários / executáveis / bibliotecas nativos criados com conjuntos de compiladores voltados para ARM Embedded ABI v7a
( armeabi-v7a ) pode ser executado em Application profile of 7th version of ARM processors
( Armv7-A ).
O código compilado com conjuntos de ferramentas fornecidos por outros fornecedores, visando a mesma arquitetura (embora com nomes de ABI diferentes) também deve ser executado em dispositivos Android.
VS de 32 bits. 64-BIT:
O processador ARM pode ser de 32 ou 64 bits. Depende dos fabricantes de SoC o que eles desejam construir com seu sistema embarcado, por exemplo, O Snapdragon pode ser de 32 ou 64 bits. Processadores ARM de 32 bits foram aprimorados para desempenho e novos recursos foram adicionados da versão 2 à versão 7. O suporte a 64 bits foi introduzido no ARMv8.
Para descobrir se um dispositivo é de 32 bits ou 64- bit, você precisa verificar as especificações de seu SoC e, em seguida, de seu processador. Por exemplo, SoC em Redmi Note 4 é Qualcomm Snapdragon 625 (MSM 8953) , que contém processador Cortex-A53
. É evidente a partir das especificações técnicas do Cortex-53 que ele “é baseado na arquitetura ARMv8
, que pode processar 2 tipos de conjuntos de instruções: aarch64
(que Android “s arm64-v8a ABI usa) e aarch32
(que o Android “s armeabi-v7a ABI usa, ou seja, compatível com versões anteriores com ARMv7
).
Portanto, ele pode executar binários / bibliotecas compilados para ambos os ABIs, mas não para x86 ou armeabi
(chamado armel na comunidade Linux; que visava a arquitetura ARMv5/v6
e era removido em NDK r17
).
RELACIONADO: Um dispositivo de hardware de 64 bits pode executar uma versão do Android de 32 bits?
Comentários
Resposta
O número de dispositivos de hardware que usam x86 nunca foi muito alto. Alguns anos atrás, a Intel tinha alguns processadores x86 (Intel Atom) que eram usados em alguns tablets Android (por exemplo, Samsung Galaxy Tab 10.3).
No entanto, esses tablets nunca alcançaram um grande volume no mercado. E não tenho certeza se existe algum smartphone ou tablet x86 no mercado que ainda usa uma CPU x86.
No entanto, há um caso de uso muito comum em que você encontra um “dispositivo Android x86”: o Android Emulador.
Como o PC que executa o emulador normalmente usa emuladores de CPU x86 que executam uma imagem x86 (em vez de uma imagem baseada em ARMv7 ou ARMv8 / ARM64) podem fazer uso das técnicas de virtualização integrada da CPU que resultam uma velocidade muito maior.
Comentários
- Obrigado por explicar em detalhes. Eu gostaria de dar um exemplo. Se eu estiver certo, seja um processador ou um SoC, o termo x86 está correlacionado com Intel e AMD. Gostaria de dar um exemplo.
- Percorri o link apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -liberação para baixar o apk android do Firefox. Eu vi duas variantes lá; Firefox apk android para arquitetura armeabi-v7a e Firefox apk android para arquitetura x86. Minha confusão começou a partir daí.
- SoC de dispositivos Android conhecidos são Snapdragon, MediaTek, Exynos, Kirin etc. Portanto, acredito que preciso baixar o apk android para ARM. Estou certo?
- @ user741975 No momento, se você escolher
armeabi-v7a
, ele será executado com uma chance maior que 99%. Se você tiver um dispositivo atual de classe média ou alta,arm64-v8a
pode ser uma opção. De qualquer forma, você pode apenas fazer o download e tentar instalá-lo. Se a arquitetura estiver errada, a instalação simplesmente falhará.
armeabi
apenas para suporte anterior.