Don’t begin without having a reliable way to reflash the firmware, bricking the Jelly 2 can accidentally happen in a lot of ways (more on that later). It’s better to setup the flashing environment now than when your device is bootlooping itself out of existence.
You’ll need to sign in to your Google account and request access to this Google Drive: https://drive.google.com/drive/folders/0By1nhWOmuw2KdDhTUlFOZHpXQjg?resourcekey=0-KHJPIYVPw2iHL—cceWyaw&usp=sharing
After Unihertz grants your request, you’ll be able to download the desired firmware.
More info: https://www.reddit.com/r/unihertz/comments/r2dz0a/unihertz_official_firmwares_ota_updates_drivers/
Download version 5.2xxx or lower from here: https://spflashtools.com/
Versions 6.xxxx use a different flashing format and can’t read the scatter file.
After you download SP Flash Tool for Linux, you should unzip it and chmod +x flash_tool
, if that doesn’t work then just chmod +x -R ./*
inside the directory.
Also, make sure to add yourself to the uucp
group:
sudo usermod -a -G uucp <your user name>
To start SP Flash Tool, run ./flash_tool
from inside the directory.
Make sure you have all the firmware images unzipped and ready somewhere in a directory, then run the SP Flash Tool.
After selecting the firmware, wait for the Jelly 2 to reboot, or reboot it manually and click on “Download”.
You should now see a progress bar at the bottom of the screen.
Before you start flashing any system image using fastboot, you should first disable verified boot, otherwise you’ll end up in a bootloop, and you’ll need to reflash the device using the stock firmware.
To modify the system you’ll need to flash system images, you can only flash such images from the bootloader, and to boot to the bootloader you’ll need to:
At the bottom of the screen you should see:
=> FASTBOOT mode...
Now, find and install the fastboot tools, as we’ll use them in the next step.
To flash anything, you’ll first need to unlock the bootloader using the following command:
fastboot flashing unlock
This will factory reset your device!
To disable verified boot you’ll need the stock firmware, in which you’ll find vbmeta.img
, vbmeta_vendor.img
, and vbmeta_system.img
.
After you get hold of those images, you’ll be able to flash them using:
fastboot flash --disable-verification --disable-verity vbmeta vbmeta.img
fastboot flash --disable-verification --disable-verity vbmeta_vendor vbmeta_vendor.img
fastboot flash --disable-verification --disable-verity vbmeta_system vbmeta_system.img
If you forget to disable verified boot, you will end up bootlooping when flashing any image. In my case, I didn’t disable AVB and flashed TWRP, this lead to a bootloop in which I could not boot to the recovery, which meant I couldn’t boot to the bootloader.
The best rooting solution as of right now is Magisk.
You would usually install Magisk by flashing a ZIP from TWRP, but on the Jelly 2 the fastest way of dealing with Magisk, if you haven’t flashed TWRP, would be to install the Magisk app and patch the boot image: https://topjohnwu.github.io/Magisk/install.html#patching-images
Then flash the patched image using:
fastboot flash boot /path/to/magisk_patched_[random_strings].img
That’s it.
Magisk has removed the built-in MagiskHide capability, so nowadays you have to install modules such as:
In addition to installing these, I needed to manually enable Zygisk and add the apps to the deny list.
What’s a GSI? Answer: https://developer.android.com/topic/generic-system-image/
When picking a GSI choose the architecture as arm64
and the partition scheme as A/B
.
That work:
That don’t work:
Tested Android version: Android 13.0
Before flashing any GSI, boot to fastbootd mode (NOT the bootloader).
You may do so in three ways:
adb reboot fastboot
fastboot reboot fastboot
To flash a GSI all you need to do is issue the following commands:
fastboot delete-logical-partition product # You'll only need to issue this once and never again
fastboot erase system # otherwise fastboot may report a false positive when flashing
fastboot flash system <path to GSI.img> # this will take some time, don't unplug
I am not sure how I personally managed to disable software navigation, but I’ll try and explain everything I did prior to successfully disabling it.
Edit: disabling the navigation can also be done using Subtratum Lite and installing nonavbar.apk.
For more info see: https://xdaforums.com/t/how-to-remove-nav-bar-in-android-11.4190469/
Mount the GSI image and add the following line to all the build.prop
files:
qemu.hw.mainkeys=1
Unmount the GSI and issue the following command (optional):
e2fsck -p <path to GSI.img>
After that flash the GSI:
fastboot erase system
fastboot flash system <path to GSI.img>
Go to Settings > System > Gestures > System navigation > Select 3-button navigation
Install Magisk and install this Magisk module: https://github.com/Magisk-Modules-Alt-Repo/HideNavBar
During the installation choose things like hide pill, disable back gesture, and so on.
In my opinion, TWRP is not needed for anything and you can instead use Flashify, or Smart Flasher, or any other flashing method. Unless you absolutely need to flash some recovery ZIP from the recovery, flashing TWRP is a waste of time.
In any case, TWRP can be downloaded from: https://github.com/Meetoul/twrp_device_Unihertz_Jelly2_TEE/releases
To install TWRP you’ll need to:
fastboot flash recovery <path to recovery.img>