GSI

This page contains links and documentation to PeterGSI, a Generic System Image (GSI) build that I use on all of my personal, unlockable Android devices. Although it is mainly intended for my personal use, I figured that it could be useful in general, and thus I decided to share my builds publicly.

What is a GSI?

GSI stands for Generic System Image. In a nutshell, with Android devices launched after Android 9, the entire system has been split into “system” and “vendor” partitions. The “vendor” partition contains vendor-specific code, mainly HALs. These HALs communicate with the “system” partition through a set of stablized interfaces. This allows a different system partition image to replace the stock one with no modification to vendor, while still working (mostly) as expected, even if the system image contains a newer version of Android than the original.

Can I use a GSI?

If your Android device is launched after Android version N (where N >= 9), you should expect to be able to at least boot a GSI of version at least N + 3, or, starting with chipsets released with Android 15, possibly N + 7. Any later version might be a hit or miss, depending on whether Google has decided to keep the HAL interfaces supported in that version. Third-party GSIs (such as this one) can also choose to revert some changes that remove compatibility with older interfaces, in which case you may be able to boot a GSI of an even higher version.

Your device manufacturer may also choose to upgrade the vendor partition at some point in the device's lifecycle, say, to version M, in which case you should be able to boot version M + 3. Note that this is different from an OS version upgrade — manufacturers often update the system image without updating the vendor partition, the same way as how a GSI can boot on an older vendor partition. Find out the version of your vendor partition by:

adb shell getprop ro.vndk.version

or (for devices launched after Android 15):

adb shell getprop ro.vendor.api_level

Why PeterGSI?

AOSP does publish official GSI builds, but these GSI builds are intended for compliance testing and development purposes. Usually your phone should be able to boot one of these GSIs, but it does not mean that all functionalities which matter for daily use are present. Most often, you might be seeing issues with in-call audio, bluetooth, etc, which are not what the tests are concerned with but are a non-starter for daily driving. The stock apps (phone, messaging, etc.) on AOSP are also largely unmaintained and less than useful.

This GSI is what I ended up with for daily driving my devices (see below for a list). Please note that this build is not based on TrebleDroid directly, and does not include fixes and hacks for all devices. This is intentional — this build is intended to be as close to AOSP as possible, and only includes fixes that I know are necessary for all the devices I have tested on. All device-specific hacks in this GSI are implemented using a C++ framework rather than a shell script, which hopefully makes it easier to manage in the future.

What this also means is that this GSI might be (currently) missing some features you might care about. One example is VoLTE support, because I am a jmp.chat user and do not rely on VoLTE from my carrier. This does not mean it will not work at all, just that someone else who can test and debug is needed to get it working. See below for a detailed explanation.

If you want to make this GSI work on your device OR for your use-case, contributions are welcome! Join our chat below to discuss your changes, or send a pull request on the source code repositories.

Contact

Join us on Matrix at #peter-gsi:neo.angry.im

Warning

By flashing GSIs, you are taking the risk of customizing your device outside of what your warranty likely covers. Remember that there is NO GUARANTEE that any of the features will work on this GSI. Your device might not even be able to boot. I am NOT RESPONSIBLE for any potential damage that might result from YOU attempting to customize YOUR device.

Download

Shared folders:

Android 17: https://share.typeblog.net/share/KvBXSEXP

Android 16 (archival): https://share.typeblog.net/share/NzaLT1XF

Android 15 (archival): https://share.typeblog.net/share/Ac2cLUJX

Android 14 (archival): https://share.typeblog.net/share/rhUs8MOA

All updates will be uploaded to the same shared folder. You can expect semi-monthly updates corresponding to Google's security patch releases.

Source code: https://gitea.angry.im/PeterGSI

Source code for OpenEUICC is available at https://gitea.angry.im/PeterCxy/OpenEUICC, and the prebuilt dependencies to use in AOSP is located at https://gitea.angry.im/PeterCxy/android_prebuilts_openeuicc-deps.

Installation

First download and extract the .img file, and the rest is the same as any other GSI:

After flashing, remember to wipe all data from recovery before rebooting.

What Works

If your device is truly Treble-compliant (released after Android 9), then all features covered by CTS and VTS should work as expected. This includes booting (of course), audio, telephony, camera, WLAN, bluetooth, etc. However, some features are never expected to work on vanilla GSIs:

Modifications

The following incomplete list of modifications on top of AOSP has been made:

The full list of patches can be viewed here.

Preinstalled Apps

Peter's AOSP GSI strives to be as much FOSS as possible. A set of FOSS apps are included by default:

In addition, the following FOSS apps made by me are included because they have to be system apps:

Tips and Tricks

Tested Devices

I regularly use the following devices:

This GSI will most likely work on these devices (except features that are never expected to work, of course).

FAQs