/e/OS-U GSI (A14) UNOFFICIAL

RemdinNote8T_e-2.8-a14-GSI_20250221_by_@Colors

:white_check_mark: e-2.8-a14-20250221-UNOFFICIAL-GSI-arm64_vN.img.xz :dizzy: signed keys :dizzy: by @Colors

AGM PAD P1 [ 4G LTE ] - Waterproof & Drop Proof Tablet - IP68 Waterproof, IP69K
SoC: MediaTek Helio G99 - MT6789
Stock Android 13 Android 13 Recovery

:white_check_mark: e-2.8-a14-20250221-UNOFFICIAL-GSI-arm64_vN.img.xz :dizzy: signed keys :dizzy: by @Colors
:white_check_mark: 4G LTE / SMS
:white_check_mark: WLAN / Wi-Fi 802.11 a/b/g/n/ac
:white_check_mark: Cameras + QR code scanning
:white_check_mark: Bluetooth 5.2
:white_check_mark: microSDXC (dedicated slot)
:white_check_mark: wired 18W charging USB Type-C 2.0 OTG

T Tablet 5G (Hubbs)

SoC: MediaTek Dimensity 700 - MT6833
Stock Android 13 + Recovery
Stock Android 14 + Recovery

:white_check_mark: e-2.8-a14-20250227-UNOFFICIAL-arm64_bvN :dizzy: signed keys :dizzy: by @Colors

Thank you, Xxpsilon! The A14 works but consumes the battery very quickly even on stand-by. Instead, the A13 works on my tablet flawlessly.

@Colors
I’m a fan of A12, A13, just as I was of A10 before.

Battery consumption: what accounts for the additional consumption of A14 compared to A13?

Nothing is installed except the Android system. Only the usual settings: adaptive brightness, extra dim, usb debugging. I will reset and observe what happens without any changes.

Now that you’ve drawn my attention to the issue of A14 energy consumption, I’ve remembered that my Samsung Galaxy Tab A7 10.4 2020 (LTE) SM-T505 (gta4l) with e-2.8-a14-20250221470208-community-gta4l has consumed an enormous amount of energy in standby mode over the last few hours. I will keep a close eye on it over the next few hours and note the consumption by the hour.

Even after the reset, without any changes, the high consumption remains.

My SM-T505 (gta4l): 30% consumption after 10 hours without use.
/e/OS-U community, Wi-Fi on, screen in sleep mode.

I can’t say what the cause is. It seems that there are several system processes related to wifi. Android 13, at least for me, runs smoothly. I am waiting for Version 2.9 although I do not believe in a resolution without the help of the EOS team. I promised to write a little howto for gsi and I hope to do it tomorrow. It’s nothing special… I’d be happy for someone to take the initiative.

1 Like

@Colors, I can’t say what the cause is either. But here in the forum many users complain about the increased energy consumption since /e/OS-U 2.7.

Maybe it’s the App Lounge, which often doesn’t work properly, but constantly searches for apps in vain and doesn’t install them when it finds them?


Info: MicroG using a lot of batterypower


Side note: Unihertz Atom_L runs with GSI e-2.8-a14-20250221-UNOFFICIAL-GSI-arm64_vN.img.xz: signed keys :dizzy: by @Colors

App Lounge is a mess. I apologize, but I see it as a negative point, at the moment, regarding the adoption of the eOS system. I can possibly try a version with superuser rights for greater freedom of experimentation. I haven’t done it yet though.

Xiaomi Redmi Note 8 Pro begonia
Mediatek MT6785 Helio G90T
Android 11.0 MiUI V12.5.x

I’ve just turned your e-2.8-a14-20250221-UNOFFICIAL-GSI-arm64_vN.img into a “CUSTOM” GSI without e.apps, e.mail, e.notes, e.drive, e.calendar, e-tasks, e.pdfviewer, e.accountmanager, e.contacts, e.message, e-dialer; instead F-Droid, Aurora and Fossify-Suite. It’s running, but I still need to do some testing.

It’s an idea to consider. Bare-metal Android. That would be fun. Well, not really stripped, but as basic build.

I’m having a lot of problems with App Lounge as well. It hangs or shows a blank screen a lot. I might just use Aurora and F-Droid.

Create a new directory for eOS sources and enter it:

mkdir a14
cd a14
mkdir -p a14/.repo/local_manifests
repo init -u https://gitlab.e.foundation/e/os/releases.git -b refs/tags/v2.8-a14 --git-lfs
git clone https://github.com/MisterZtr/treble_manifest.git .repo/local_manifests  -b 14
repo sync -j 1 --fail-fast --force-sync

Take the patches from here:

In the source directory a14 create a directory named patches with subdirectory named trebledroid:

mkdir -p patches/trebledroid

Copy from AndyCGYan patches the folowing directories in the trebledroid directory:
patches_platform, patches_treble, patches_treble_prerequisite and patches_treble_td.
Remove from patches/trebledroid/patches_treble the treble_app directory.
In the patches directory we put also a script named apply-patches.sh:

#!/bin/bash

set -e

source="$(readlink -f -- $1)"
treble_prerequisite="$source/patches/trebledroid/patches_treble_prerequisite"
treble_td="$source/patches/trebledroid/patches_treble_td"

platform="$source/patches/trebledroid/patches_platform"
treble="$source/patches/trebledroid/patches_treble"

printf "\n ### APPLYING treble_prerequisite PATCHES ###\n";
sleep 3.0;
for path in $(cd $treble_prerequisite; echo *); do
	tree="$(tr _ / <<<$path | sed -e 's;platform/;;g')"
	printf "\n| $path ###\n";
	[ "$tree" == build ] && tree=build/make
    [ "$tree" == frameworks/proto/logging ] && tree=frameworks/proto_logging
    [ "$tree" == vendor/hardware/overlay ] && tree=vendor/hardware_overlay
	pushd $tree

	for patch in $treble_prerequisite/$path/*.patch; do
		# Check if patch is already applied
		if patch -f -p1 --dry-run -R < $patch > /dev/null; then
            printf "### ALREADY APPLIED: $patch \n";
			continue
		fi

		if git apply --check $patch; then
			git am $patch
		elif patch -f -p1 --dry-run < $patch > /dev/null; then
			#This will fail
			git am $patch || true
			patch -f -p1 < $patch
			git add -u
			git am --continue
		else
			printf "### FAILED APPLYING: $patch \n"
		fi
	done

	popd
done

printf "\n ### APPLYING treble_td PATCHES ###\n";
sleep 3.0;
for path in $(cd $treble_td; echo *); do
	tree="$(tr _ / <<<$path | sed -e 's;platform/;;g')"
	printf "\n| $path ###\n";
	[ "$tree" == build ] && tree=build/make
    [ "$tree" == frameworks/proto/logging ] && tree=frameworks/proto_logging
    [ "$tree" == vendor/hardware/overlay ] && tree=vendor/hardware_overlay
	pushd $tree

	for patch in $treble_td/$path/*.patch; do
		# Check if patch is already applied
		if patch -f -p1 --dry-run -R < $patch > /dev/null; then
            printf "### ALREADY APPLIED: $patch \n";
			continue
		fi

		if git apply --check $patch; then
			git am $patch
		elif patch -f -p1 --dry-run < $patch > /dev/null; then
			#This will fail
			git am $patch || true
			patch -f -p1 < $patch
			git add -u
			git am --continue
		else
			printf "### FAILED APPLYING: $patch \n"
		fi
	done

	popd
done

printf "\n ### APPLYING platform PATCHES ###\n";
sleep 3.0;
for path in $(cd $platform; echo *); do
	tree="$(tr _ / <<<$path | sed -e 's;platform/;;g')"
	printf "\n| $path ###\n";
	[ "$tree" == build ] && tree=build/make
    [ "$tree" == frameworks/proto/logging ] && tree=frameworks/proto_logging
    [ "$tree" == vendor/hardware/overlay ] && tree=vendor/hardware_overlay
	pushd $tree

	for patch in $platform/$path/*.patch; do
		# Check if patch is already applied
		if patch -f -p1 --dry-run -R < $patch > /dev/null; then
            printf "### ALREADY APPLIED: $patch \n";
			continue
		fi

		if git apply --check $patch; then
			git am $patch
		elif patch -f -p1 --dry-run < $patch > /dev/null; then
			#This will fail
			git am $patch || true
			patch -f -p1 < $patch
			git add -u
			git am --continue
		else
			printf "### FAILED APPLYING: $patch \n"
		fi
	done

	popd
done

printf "\n ### APPLYING treble PATCHES ###\n";
sleep 3.0;
for path in $(cd $treble; echo *); do
	tree="$(tr _ / <<<$path | sed -e 's;platform/;;g')"
	printf "\n| $path ###\n";
	[ "$tree" == build ] && tree=build/make
    [ "$tree" == frameworks/proto/logging ] && tree=frameworks/proto_logging
    [ "$tree" == vendor/hardware/overlay ] && tree=vendor/hardware_overlay
	pushd $tree

	for patch in $treble/$path/*.patch; do
		# Check if patch is already applied
		if patch -f -p1 --dry-run -R < $patch > /dev/null; then
            printf "### ALREADY APPLIED: $patch \n";
			continue
		fi

		if git apply --check $patch; then
			git am $patch
		elif patch -f -p1 --dry-run < $patch > /dev/null; then
			#This will fail
			git am $patch || true
			patch -f -p1 < $patch
			git add -u
			git am --continue
		else
			printf "### FAILED APPLYING: $patch \n"
		fi
	done

	popd
done

The code is ugly and in general all the process to generate a gsi can be made automate, but i prefer to see every step since for now everything is in an experimental phase. Also my time and energy are very limited so i really want some enthusiast takes over and improves the entire process.

Apply the patches from the source tree:

bash patches/apply-patches.sh . | tee /dev/stderr | grep 'FAILED\|ALREADY\|failed' > error.txt

The patches will be applied and a file error.txt is generated in the source tree.
This will help to see what patches give error or are already adopted by eOS team and to eliminate or improve.

After patching the next step:

cd device/phh/treble
git clean -fdx
bash generate.sh lineage

Create a file treble_arm64_bvN.mk in device/phh/treble directory with the content:

TARGET_GAPPS_ARCH := arm64
include build/make/target/product/aosp_arm64.mk
$(call inherit-product, device/phh/treble/base.mk)


$(call inherit-product, device/phh/treble/lineage.mk)

PRODUCT_NAME := treble_arm64_bvN
PRODUCT_DEVICE := tdgsi_arm64_ab
PRODUCT_BRAND := google
PRODUCT_SYSTEM_BRAND := google
PRODUCT_MODEL := TrebleDroid

# Overwrite the inherited "emulator" characteristics
PRODUCT_CHARACTERISTICS := device

PRODUCT_PACKAGES += 

LINEAGE_BUILDTYPE := VANILLA
LINEAGE_EXTRAVERSION := -EXT4
LINEAGE_BUILD := GSI

Also, you need to add a line in the file AndroidProducts.mk:

$(LOCAL_DIR)/treble_arm64_bvN.mk \

Come out from device/phh/treble back to source tree.
Enter directory vendor/hardware_overlay:

cd vendor/hardware_overlay
git add TrebleApp/app.apk
git commit -m "TrebleApp"

Come back to source tree a14 directory.
Prepare to build:

export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
ccache -M 50G

You can use other formula though.

source build/envsetup.sh
source vendor/lineage/vars/aosp_target_release
lunch treble_arm64_bvN-ap2a-userdebug
WITH_ADB_INSECURE=true make systemimage

That’s it. I will answer as far as I can understand. I’m not a specialist myself.
In fact the whole process is an adaptation of AndyCGYan’s script:

1 Like

I’ve plenty of energy, but that’s not enough. I lack basic building skills. I can only fall back on existing GSI builds.

Xiaomi Redmi Note 8 Pro begonia
Mediatek MT6785 Helio G90T
Android 11.0 MiUI V12.5.8.0

My Redmi Note 8 Pro is now running proper with GSI iodéOS 5.10 (A10). Updates can be done manually directly on the smartphone without a host machine (PC). I’m very happy with this. If necessary, I can also simply switch to another compatible GSI.

How about a version with superuser?

https://sourceforge.net/projects/e-os/files/GSI/e-2.8-a14-20250310-UNOFFICIAL-arm64_bvS.img.xz/download

By uninstalling some applications we can find out what generates that energy consumption. And in addition it would be interesting to find out how much you can reduce eOS to a "basic"level.

If you have energy and enthusiasm, it’s done. You only need a good PC and a linux distribution. To prepare the linux system for Android compilation is not complicated but I do not use Mint or Ubuntu and I have never used. So if you have time and want to “face the Unknown” say yes.

Xiaomi Redmi Note 8 Pro begonia
Mediatek MT6785 Helio G90T
Android 11.0 MiUI V12.5.8.0
Custom Recovery


:heavy_multiplication_x: e-2.8-a14-20250310-UNOFFICIAL-arm64_bvS @Colors.img
:heavy_multiplication_x: e-2.8-a14-20250227-UNOFFICIAL-arm64_bvN @Colors.img
:heavy_multiplication_x: e-2.8-t-20250226-UNOFFICIAL-arm64_bvN @Colors.img

None of your three GSI boots into the system, but first only into the Redmin logo, then reboot into Recovery.


Cross-Check

:ballot_box_with_check: GSI iodéOS 5.10 (A14) 20250219 - working