Unofficial builds for Google Pixel devices

New builds published:

  • PIxel 4a and higher: v7.1
  • Pixel 3a and lower: v6.11 (sadly, LineageOS does not provide A16 / LOS 23 updates for these devices)

Major Announcement for users of @rik’s Unofficial iodéOS Pixel builds:

Due to changes on the LineageOS for microG server that hosts my unofficial iodéOS Pixel builds, and also due to us now implementing OTA updates for these builds, a new signing key has been used to make builds starting in January 2026.

This means if you attempt to install an update using “Updater App > 3 dots > Local update” it will fail, due to the mismatch between the build signature of the pre-Jan-2026 build and the new build. In order to update without losing data you will need to boot into Recovery and install the new build via adb sideload. While installing, you will get a warning message that the “Build signature does not match”. Accepting this warning will then proceed to install the new build and you will be all set with the new build signature and with the OTA update configuration.

Future builds will now come “OTA” directly from the Updater App without the need to manually download them and apply as “Local Updates”. Enjoy!

4 Likes

Hello Rik,

thank you for your support. Now I know what I need to do.
I am already familiar with Seedvault from my move from calyx to iode.

1 Like

Yes, sorry you have to do that, but I think you can appreciate that while we make the unoffiicial builds with the same source code it is a different build with different build keys and signatures, so it is essentially like installing a “new” ROM to move between these. Good luck!

I have the same key pair for both avb and ota signing (so the parameter for --key-avb and --key-ota is the same, though the passphrase to decrypt the private key still needs to be typed twice, but may be omitted if the private key is not encrypted), and use the following script to make lockable personal ota packages:

#!/bin/sh
exec "$HOME/git/avbroot/target/release/avbroot" ota patch \
     --key-avb "$1" --key-ota "$1" --cert-ota "$2" \
     --rootless --clear-vbmeta-flags -i "$3" -o "$4"

“$3” is the ota package to be resigned, “$4” is the path to save the resigned output.

You can use the current build process to produce non-lockable ota packages, and then use avbroot and the same key pair(s) to turn them into lockable ota packages by resigning.

1 Like

I can look at this a bit down the road, but I notice that my devices (Pixel 3a XL) are not supported, only the 4 series and higher: Supported devices · Issue #299 · chenxiaolong/avbroot · GitHub

So I could make a blind build but I would be a bit uneasy distributing that. If you are willing to test on your device, knowing that a useless paperweight is a real possibility then I could pass it to you (when I get it made)?

This is not true, as I have a resigned lineagos running on a pixel 2, and even aura (razer phone 2), which is once supported by divestos with relocking.

Pixel 3a XL might be special someway, but according to #299 and #274, only resigning stock google ota packages would be problematic, so resigning iodeos builds should be okay.

#299 is misleading someway, as it mixed up device support and specific (google stock) ota package format support.

1 Like

Thank you for the great efforts you put into building these.

Are you using Seedvault as a plan B? Rik seems to think it will update without losing data.

Thanks @rik. Here are the detailed steps I used to successfully update my Pixel 4a5g unofficial build from Iode 6.7 to Iode 7.1 without losing data:

  1. Back up phone, just in case.

  2. Connect phone to computer via USB

  3. Open a terminal

  4. Confirm authorized ADB connection with adb devices

  5. Download the IodeOS…zip file for the 7.1 unofficial Rik build onto computer

  6. Boot Pixel into recovery mode from computer terminal using adb reboot recovery. This re-confirms adb connection and provides a clear path to Recovery Mode.

  7. Sideload the IodeOS…zip file.

    1. On the device, select “Apply Update”, then “Apply from ADB”.

    2. On the host machine, sideload the package using: adb -d sideload /path/to/zip

    3. Wait for Pixel to show the “Signature failed” error. Choose “Yes” to continue to load anyway.

    4. Wait for Pixel to show “To install additional packages, you need to reboot recovery first. Do you want to reboot to recovery now?” Select NO.

    5. Select “Reboot System now” from recovery main menu.

    6. Check IodeOS system update information on the Pixel to confirm that the update was successfull.

2 Likes

Thanks for the info. Yes, I use Seedvault as a backup; a backup can never hurt.
There are two different cases here.

  1. The case you describe: unofficially iodeOS from v6.7 to v7.1 via adb sideload without losing data.

  2. The case I mean: unofficially iodeOS v7.1 to official v7.1. Rik tested this and ended up in a boot loop.

2 Likes

I tried the same and did a factrory reset via recovery, but the unofficial 7.1. did not install because of key verification failure. I didnt get a bootloop then, but just landed in the old 6.9. official ROM.
What did I miss?

You need to “proceed anyway” when you are warned about the key verification failure, this is due to now using a different build key as described above. Thanks to @HandyTravis above a few posts for writing up the details to move to 7.1.

I would have done so (as usual…), but the question didnt come up!

OK I didn’t fully appreciate that you were trying to go from an Official down to an Unofficial build. I don’t know of many that want to go that direction, but hey thanks for considering my Unofficial build preferrable :slight_smile:

But yes I think this can re-confirm that going both directions between Unofficial and Official builds just won’t work without a full clean re-install.

I know how to sideload the .zip, my problem is that I wasnt asked if I want to confirm the signature failure.
I dont care much about unofficial or official, but the official build 7.1 isnt available yet.
At least not here: sunfish · master · ota / release · GitLab

Edit:
The recovey errors are the following:
error: recovery: failed to verify whole-file signature
Update package verification took 63,5 s (result 1)
error: recovery: signature verification failed
errors: recovery: error: 21

The Lineage 23 (Android 16) builds for sunfish arrived just at year end (after the v6.10 official builds were published). I would suspect that iodé v7.x official builds will be coming.

But if you want to migrate from official to unofficial I think you need to do a full factory reset and re-install (including re-flashing the boot image just to make it all consistent).

Sorry this post got held in our queue. But put simply, no devices were abandoned, instead official builds were never made for them, likely do to the lower availability of them in Europe, and due to storage limitations.

Note, by the way, that 2 of the 3 ROMs you list above dropped official support for Pixels older than that the 6 series, so all the devices you use as examples are not supported by them.

Sorry for being ignorant but could you point me to an instruction of a full factory reset as you mean it?

Essentially you need to do a clean installation. In the table at the top, follow the link in the first column to open the LineageOS installation instructions for your device. You then use the files provided as part of my custom builds instead of the Lineage provided files.

(For sunfish this means flashing dtbo.img and boot.img, then boot into Recovery and sideload the .zip)

But if you are on the “Official” ROM right now you just may want to stay on it, as I note it may be soon that iodé 7.x builds are available for sunfish:I didn’t quite understand if you are wanting to change to the Unofficial ROM in order to have adb root for full backups or what is the motivation to move away from the Official builds?

Thank you Rik.
I guess your suggestion to be paitient is spot on, I do not need to change to the unofficial build, I was just so excited that there is Android 16 available and wanted to run it. And on the way I tried to learn and understand some things. And I probably did, but as so often more question arise :innocent:

1 Like