5

While downloading Android apps, sometimes I have seen apps for armeabi-v7a and x86 architecture.

I read some references for armeabi-v7a and x86 architecture. However, at the end, I couldn't finalize which mobile processors and architectures belong to armeabi-v7a and which belong to x86.

As per my knowledge, mobile processors commonly used in Android devices are Snapdragon (by Qualcomm), MediaTek, Exynos (by Samsung) and Kirin (by Huawei). Almost all brands explain specifications of a smartphone and almost all specifications say mobile processor is 64-bit or not. Should I conclude that 64-bit of mobile processors (Snapdragon, MediaTek, Exynos or Kirin) belong to ARM architecture?

EDIT:
To understand which SoC supports armeabi-v7a Android apk and which SoC supports x86 Android apk, I have gone through the specifications of MediaTek Helio X30 and Snapdragon 855. The specification of Helio X30 says, it supports dual-core ARM Cortex-A73 and quad-core ARM Cortex-A53 but ARM is not mentioned anywhere in the specification of Snapdragon 855. So should I conclude that Helio X30 will support armeabi-v7a Android apps and Snapdragon 855 will not support armeabi-v7a apps?

Please clarify my confusions.

6

Here are my incomplete summarized notes on the subject, but enough to answer your question.

INSTRUCTION SET:

Processors are made of semiconductor dies, usually electronic-grade mono-crystalline silicon. They don't know English or any other human language, they understand only 0 and 1. So the designer of processor tells us in what sequence of zero's and one's we can instruct that specific processor. This numerical language of instructions is standardized as Machine Language and the set of machine instructions is called Instruction Set. A processor can act upon only specific type(s) of instruction set.
Instruction sets can be 8/16/32/64-bit (defines how many instructions a processor can process at a time), last 2 being the common one these days.

LOW LEVEL LANGUAGES:

But writing program code (instructions) directly in machine language (the executable file) is near to impossible because it will take years to write and debug a reasonably larger program (that we can write in a few hours these days). So to put programmers at ease, Assembly Language was developed, still a processor-specific language but relatively easy to understand. Code written in Assembly Language is converted into machine code by Assembler - a program written in Machine language. Both of these are called Low Level languages.

HIGH LEVEL LANGUAGES:

To further reduce human effort in communicating with hardware, high level languages were developed which are not bound to a specific instruction set (denoting a specific architecture). These are identical to human languages, hence easy to write, understand, debug and apply to multiple architectures. Code written in high level language is converted into low level language by Compiler - a program written in low level language. One of the most commonly used high level languages is C. But sometimes code is not pre-compiled to machine code, instead directly executed (or compiled during execution) by Interpreter. Java is one of such "write once, run anywhere" (WORA) languages which is compiled to byte-code and then interpreted by Virtual Machine - again a compiled program.

APPLICATION BINARY INTERFACE (ABI):

Since an architecture-independent program (code) can be converted to architecture-dependent code for any processor, it's the duty of compiler to take care of all the requirements of a specific architecture. That's what Application Binary Interface (ABI) defines. In simple terms, an ABI represents one or more specific architectures. Further details on Embedded ABIs require an insight into stages of Assembling and Compiling; object code, Executable and Linkable Format (ELF), static (archiving) and dynamic linking of libraries etc.

Now coming to your question:

WHAT ARE x86 AND ARM?

x86 is a family of instruction sets, mainly developed and manufactured by Intel and AMD. ARM is another family, designed by a single entity ARM Holdings and being licensed to many embedded solution manufacturers including Qualcomm, Mediatek, Samsung and Huawei. Snapdragon, Exynos and Kirin are their brand names. They are not processor manufacturers but they have licenses to include ARM processors with their own System on Chip (SoC) circuits.

WHAT IS SoC?

A System on Chip (SoC) is a small circuit that includes processors along with other components such as GPU, RAM, Flash/eMMC (equivalent of HDD or SSD), WiFi and bluetooth module, USB connectivity, UART (serial ports), JTAG (a very lower level serial communication protocol), GPS, modems (for cellular connectivity) and possibly others.

ARM ABIs:

Though the major part of Android apps is written in Java, one can program in native languages like C and C++, which needs to be compiled. Android provides its own Native Development Kit (NDK) including (libraries, header files and) a compiler that can compile code for multiple ABIs including armeabi-v7a (armhf in Linux community) and x86.

Android (Java) app itself isn't specific to an architecture. During app build process Android SDK converts Java source to bytecode (.class files) and then compiles it to Dalvik EXecutable (.dex) file which is packed with .apk files. This Dalvik bytecode is interpreted and run in a separate instance of Dalvik Virtual Machine/ART for every app by a process named Zygote. Or it can be permanently compiled to native machine code (.odex or .oat) according to the architecture of the device during installation of app (or later). But if the apk (zip) file additionally contains ELF binaries/libraries, those are architecture-specific. Developers usually include native libraries for multiple architectures in their apps.

Native applications/programs/binaries/executable/libraries built with compiler suites targeting ARM Embedded ABI v7a (armeabi-v7a) can be run on Application profile of 7th version of ARM processors (Armv7-A).
Code compiled with toolchains provided by other vendors, targeting same architecture (though with different ABI names) should also run on Android devices.

32-BIT VS. 64-BIT:

ARM processor can be 32-bit or 64-bit. It depends on SoC manufacturers what they want to build with their embedded system e.g. Snapdragon can be 32-bit or 64-bit. 32-bit ARM processors were improved for performance and new capabilities were added from version 2 to version 7. 64-bit support was introduced in ARMv8.

To find out if a device is 32-bit or 64-bit, you need to check the specifications of its SoC and then of its processor. For instance SoC in Redmi Note 4 is Qualcomm Snapdragon 625 (MSM 8953), which contains processor Cortex-A53. It's evident from technical specifications of Cortex-53 that it's based on ARMv8 architecture, which can process 2 types of Instruction Sets: aarch64 (which Android's arm64-v8a ABI uses) and aarch32 (which Android's armeabi-v7a ABI uses i.e. backward compatible with ARMv7).

So it can run binaries/libraries compiled for both of these ABIs, but not for x86 or armeabi (called armel in Linux community; which targeted architecture ARMv5/v6, and was removed in NDK r17).


RELATED: Could a 64-bit hardware device run a 32-bit Android version?

1

The number of hardware devices that use x86 was never very high. Some years ago Intel had some x86 processors (Intel Atom) that were used in some Android tablets (e.g. Samsung Galaxy Tab 10.3).

However those tablets never reached a high volume on the market. And I am not sure if there is any x86 Smartphone or tablet on the market that still uses an x86 CPU.

However there is one very common use case where you encounter an "x86 Android device": The Android Emulator.

As the PC running the emulator typically uses a x86 CPU emulators that run an x86 image (instead of an ARMv7 or ARMv8/ARM64 based image) can make use of the CPU integrated virtualization techniques which result in a much higher speed.

  • Thank you for explaining in detail. I would like to take an example. If I am right, be it a processor or a SoC, the term x86 is co-related with Intel and AMD. I would like to take an example. – TekQ Feb 25 at 19:24
  • I have gone through the link apkmirror.com/apk/mozilla/firefox/firefox-65-0-1-release for downloading Firefox android apk. I have seen two variants there; Firefox android apk for armeabi-v7a architecture and Firefox android apk for x86 architecture. My confusion started from there. – TekQ Feb 25 at 19:25
  • SoC of well-known android devices are Snapdragon, MediaTek, Exynos, Kirin etc. Therefore, I believe, I need to download android apk for ARM. Am I right? – TekQ Feb 25 at 19:25
  • @user741975 At the moment if you choose armeabi-v7a it will run with a chance larger than 99%. If you have a current mid-class or high-end device also arm64-v8a may be an option. Anyway you can just download it and try to install it. If the architecture is wrong installation will just fail. – Robert Feb 25 at 19:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.