Getting Started With Generic System Image (GSI)


A Generic System Image (GSI) is a type of custom ROM, usually in the .img format that can run on all Android phones that support Project Treble. All Android phones launched with Android 8 (Oreo) and above support Project Treble. Those of lower Android versions can be made to support Project Treble may be through an OS upgrade provided by the OEM or through some other official way. If not, they can’t use a GSI.

Without GSI, you will have to use the specific custom ROM (which is usually in the .zip format) of your phone, something which many phones don’t have especially the less popular ones, hence, the GSI is a good approach. GSIs have different variants depending on the architecture, Google apps, etc.

GSI Variants

When you try downloading a GSI, you usually would need to choose from different variants. The first thing is to know which GSI variant your phone needs because flashing the wrong one will render your device, not bootable.

1. Based on architecture: If you are installing a custom ROM made particularly for your device, then you don’t need to worry about this. But if say you want to use a GSI, then you will usually need to choose from the GSI options available. Flashing the wrong one will brick your device. You have to install a GSI based on your device’s architecture which you may get using the Treble Info or Treble Check apps. They will not only give your architecture but the specific GSI variant you need as a whole alongside other useful information. Download and install any of the apps, then launch it to get the GSI variant. The different architectures currently available as of now are:

• Arm64: This is the type of chipset present in 64bit phones. So such phones require a GSI of the type arm64.

• Arm32 (ARM): Phones with a 32bit chipset require this type of GSI. Their GSIs are mostly the VNDKLite type.

• A64 (Arm32-binder64): In this type of chipset, the software is 32bit with a 64bit binder for 64bit capable hardware. Examples of phones running an a64 firmware are Galaxy A6 2018, Tecno Spark 4, etc. They are running a chipset that has support for 64bit but the software installed is 32bit. They need GSIs of the type a64.

2. A/B and A-only GSIs
You also need to know if your device needs an A/B GSI variant or an A-only variant. Almost all phones with arm64 have A/B slots and need an A/B GSI. Some a64 phones (though being A-only) have a system as root and therefore need an A/B GSI instead of A-only. The others need A-only GSIs. Almost all Arm devices will usually take A-only GSIs. Flashing the wrong GSI might brick your device. NB: If your phone needs an A/B GSI it doesn’t mean it has A/B slots (Some single slot phones need A/B because they have a system as root). However, all A/B phones need an A/B GSI. A/B phones have two slots for applying updates. The slot currently hosting the OS is the active one while the other is inactive. During an update, the installation is applied to the inactive slot while the formerly active one becomes inactive. This reduces the risk of a device not being bootable after a failed update. A-only phones have a single slot. As such, there’s no switch between slots during updates and giving them a higher risk of a failed device after an unsuccessful update.

3. VNDKLite and Non-VNDKLite (VNDK) GSI: Treble Info or Treble Check app is capable of listing the one your phone needs. VNDKLite GSI variants have added stuff for phones with lite vendors. By so doing, VNDKLite GSIs take up more space (sometimes even up to or more than twice that of Non-VNDKLite variants). As such, you might face problems flashing them as they might be larger than the system size. In such a case, you will either need to remove some stuff or get extra space from other partitions (which we are going to cover in another article). However, phones that need VNDKLite GSI variants might accept Non-VNDKLite (VNDK) since VNDKLITE contains Non-VNDKLite plus extra additions.

4. Gapps, vanilla, FOSS and MicroG GSIsVanilla is a custom ROM without support for running Google apps and services. Therefore to use Google apps or services, you will need to flash a Gapps (Google Apps) package after flashing the ROM. Gapps variants come with support for Google apps and services. So you don’t need to flash a Gapps package after flashing ROM. FOSS means Free and open-source.  FOSS GSI is one that is both free and open-source where anyone is free to use, copy, study, and change the software in any way, and the source code is openly shared so that people are encouraged to voluntarily improve the design of the software as contrasted to proprietary GSI, where the software is under restrictive copyright licensing and the source code is usually hidden from the users. MicroG provides an alternative way of using Google apps and services but without the official Google frameworks. This gives Google little access to your data.

5. No superuser included (N), superuser included (S) and enhanced dynamic superuser included (Z). No superuser means the ROM is not rooted. With superuser or enhanced dynamic superuser means the ROM has built-in root.

Below are the information for Tecno Spark 4 KC8 revealed by the Treble Info app. Arch = a64, Single Slot (A-only), VNDK (non-lite) version 29.0, System as root = Yes (so use A/B GSI), Dynamic Partitions = No (no need to enter fastbootd i.e normal fastboot mode is needed to flash), Seamless Upgrades = No (because there’s a single slot: A-only), Required Image = a64_a/b_non vndklite.img.xz See the photo below

Tecno KC8 Treble Info

The GSI Formula

With the points explained above, you will most of the times find custom ROMs listed in the format:  arch_xyZ _vdnklite {or non-vndklite} where:

Arch can be arm, a64 or arm64

x can be a or b

y can be v, g, o or f

Z can be N, S or 

— vdnklite means VNDKLite variant while non-vdnklite (sometimes listed as vndk) means Non-VNDKLite variant. If non of these names appear, then the GSI is Non-VNDKLite (VNDK).

— a = A-only 

— b = A/B 

— v = vanilla

— g = Gapps 

— o = Gapps (go variant) 

— f = FOSS (free and open-source apps instead of Gapps)

— N = no superuser

— S = superuser

— Z = dynamic superuser 

Examplearm64_bvN_vndklite means the GSI is for arm64 devices that have double slots (A/B) and Google apps or services are not supported (vanilla) plus the Custom ROM doesn’t have built-in root (N) and it’s for arm64 devices with lite vendors (vndklite). See examples in the photo below

GSI variants samples

Share this article

Recent posts

Google search engine

Popular categories


Please enter your comment!
Please enter your name here

Recent comments