• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Is this instruction on lineageosroms wrong?

quddy

Newbie
Jan 2, 2022
21
12
Hi all,

I've been attempting to flash lineageos on my 6T following this guidance: https://lineageosroms.com/fajita/#installation

I got to step 6 on the second section Temporarily booting a custom recovery using fastboot (https://lineageosroms.com/fajita/#temporarily-booting-a-custom-recovery-using-fastboot) and found that on booting in, I just got start screen with options to 'start', 'restart bootloader', 'recovery mode' and 'power off'. I think it should have booted into some sort of UI instead when booting in in recovery mode (volume down + power).

The thing is, having reviewed the tutorial and compared it with others, I think one of the steps in the tutorial may have been wrong. It's step 5 of the Temporarily booting a custom recovery using fastboot section which reads:

"Temporarily flash a recovery on your device by typing:
fastboot flash boot <recovery_filename>.img"

In other tutorials for similar devices this reads:

"Flash recovery onto your device:
fastboot flash recovery <recovery_filename>.img"

Given that it appears the structure of the fastboot flash command is:

fastboot flash <partition> <file>

can anyone confirm whether the instruction ought to have been written with 'recovery' not 'boot', so as to flash the recovery image to the recovery partition, not the boot one?

And supposing that is so, does anyone have any ideas about how I ought to proceed if the recovery image shouldn't have been written to the /boot partition but has been? Any chance I can just write the recovery image to the recovery partition and proceed as per the rest of the guide?

To complicate matters I also ran adb sideload copy-partitions-20200903_1329.zip as specified later in the instructions, which I believe is intended to copy content from slot a to slot b. From the shell error though, I think it failed to run and therefore I imagine has had no impact.

I'm attaching:

  • an image of the line in the guidance
  • an image of the screen I currently see on booting into 'recovery' mode,
  • a text file with the commands run so far.
Many thanks in advance for any help offered.
Screenshot 2022-01-02 at 20.28.31.png
IMG_20220102_142155.jpg


 

Attachments

  • commands_run.txt
    1.1 KB · Views: 143
I'm not familiar with rooting this device specifically but I can tell you that the command in the instructions for temporary install of the custom recovery is incorrect.

The command would be:
fastboot boot filename.img

This basically just loads the recovery image into the memory for a one time use as opposed to fastboot flash recovery filename.img which actually installs the custom recovery to the device and replaces the stock recovery.

The command that you listed in the instructions fastboot flash boot would actually be used to flash a boot.img to the device.
 
  • Like
Reactions: quddy and ironass
Upvote 0
I'm not familiar with rooting this device specifically but I can tell you that the command in the instructions for temporary install of the custom recovery is incorrect.

The command would be:
fastboot boot filename.img

This basically just loads the recovery image into the memory for a one time use as opposed to fastboot flash recovery filename.img which actually installs the custom recovery to the device and replaces the stock recovery.

The command that you listed in the instructions fastboot flash boot would actually be used to flash a boot.img to the device.

Thanks @Brian706 ! I've found that the guide in question was based on a github page and I've sent a message to some of the maintainers (as the page itself doesn't allow non collaborators to create new issues or comment either). Meanwhile, I don't suppose you'd care to venture an opinion as to whether just running fastboot boot filename.img and proceeding with the guide would be likely to work, or whether I've got some extra work to do now that I've run fastboot flash boot filename.img before I can proceed with the guide? Generally I'd just try but as I know hard bricking is possible, it makes sense to stop digging :). That said I'm just canvassing an opinion - I don't expect you to take responsibility of course!
 
Upvote 0
Just a follow up - the maintainers of the official wiki got back to me and have said that the command in question is correct (i.e. it should be fastboot flash boot <recovery_filename>.img).

They also pointed out that https://lineageosroms.com/fajita/ is largely a repost from the official wiki and I they recommend using the official page (wiki.lineageos.org) instead - I definitely prefer to do so. FWIW, I have checked the links and also the sha256 sums of the recovery and ROMs I downloaded via the links on lineageosroms.com with the one's from wiki.lineageos.org - and at least the ones that I checked for fajita were the same - and the instructions they've copied do appear to be faithfully reproduced (currently) - but again, I'd suggest going to the page they've copied from instead.

Regarding my problem, I'm still at an utter loss as to why I'm seeing what I see. Any ideas? I guess I'll try to flash the stock ROM again and start over but I've no reason to suppose I won't see the exact same behaviour as I've no idea whatever where it's gone wrong, or how to reasonably set about diagnosing that.

As I've not done too well with getting the right sources so far anyone care to recommend a good set of instructions to recover the stock ROM from a soft brick?
 
Last edited:
Upvote 0
I will try to take a look at the full instructions today and see if it makes sense to me or if I have any ideas. The tricky thing with rooting on Android is the method isn't always the same for every device. Sometimes a device can have some unique steps that other devices don't.

After a little searching I see that some devices don't have a separate partition for recovery so the command for fastboot flash boot could be correct I'd the recovery is contained in the kernel; however I would think that you would have to flash a boot.img containing the custom recovery in that case.

Like I said I will take a look through the instructions in a bit and see if it makes more sense.
 
  • Like
Reactions: kate and ocnbrze
Upvote 0
I will try to take a look at the full instructions today and see if it makes sense to me or if I have any ideas. The tricky thing with rooting on Android is the method isn't always the same for every device. Sometimes a device can have some unique steps that other devices don't.

After a little searching I see that some devices don't have a separate partition for recovery so the command for fastboot flash boot could be correct I'd the recovery is contained in the kernel; however I would think that you would have to flash a boot.img containing the custom recovery in that case.

Like I said I will take a look through the instructions in a bit and see if it makes more sense.
Many, many thanks @Brian706 , - I really do appreciate that.

BTW since my last post I downloaded the previous recovery - that is the one from the 2021-12-23 just in case I got lucky and it was an issue with the latest. No dice but I can confirm that having run fastboot flash boot <filename>.img, I've got the behaviour back that I initially got after flashing the last time. That is, I get the infamous 'The boot loader is unlocked and software integrity cannot be guaranteed ...etc' when powering on with just the volume key down (as per step 6) - and the 'start' menu in 'fastboot' mode (which I posted an image of in my original post above) when I power on with both volume up and volume down. Don't know if this is relevant. The device is only discoverable to the host (a mac) when in fastboot mode. The 'bootloader is unlocked....etc' message ends with 'PRESS POWER KEY TO PAUSE BOOT' but no amount of waiting results in it booting any further. BTW one little thing I found confusing is where on step 5 it tells you 'fastboot flash boot <recovery_filename>.img' and step 6 begins with 'With the device powered off....' - step 5 didn't power the device off for me, so I assumed they meant that one should power the device off first and power it on again in the way they describe, which I did. However, I don't know, perhaps step 5 didn't run properly and it should have resulted in a power down.

The output of step 5 on the host is:

fastboot flash boot lineage-18.1-20211223-recovery-fajita.img
Sending 'boot_a' (65536 KB) OKAY [ 1.533s]
Writing 'boot_a' OKAY [ 0.318s]
Finished. Total time: 1.955s

Sorry if that's all noise and not significant, just trying to provide any little details I thought might help. Do let me know if there's any other details that you or anyone else on here might find indicative.
 
  • Like
Reactions: ocnbrze
Upvote 0
Okay, so I've read through the instructions a couple of times. A couple of questions:

1.) Are you sure you didn't already install the recovery?
I see in the image you posted that you are on the bootloader screen. If you use the volume keys from there to navigate to "recovery" at the top of the screen (power button to select) does it take you into a custom recovery or the stock recovery?

2.) Did you get any errors when flashing the recovery file?
It sounds like in some cases you may have to manually flash to boot_a. It wouldn't hurt anything to try this anyway. I believe the command would look like: fastboot flash boot_a filename.img
You could also do the same for boot_b

3.) Wow, I just realized that you uploaded a copy of your command prompt text. I missed that yesterday. Thanks! That is helpful in seeing what happened. The instructions are a little unclear on the sideload. I believe even the stock recovery has a sideload option built into it. I wonder if you are supposed to be choosing sideload from the custom recovery?
This right here sounds like an option in the custom recovery to me (unless it's an option in the bootloader while using the volume keys). Where did you find this option to select update and then update from adb?
 
Last edited:
  • Like
Reactions: ocnbrze
Upvote 0
That is, I get the infamous 'The boot loader is unlocked and software integrity cannot be guaranteed ...etc' when powering on with just the volume key down
That is just a standard warning because the bootloader is unlocked. You will probably see that any time you boot the phone up. It's just there to let you know the device has been tampered with.

step 5 didn't power the device off for me, so I assumed they meant that one should power the device off first and power it on again in the way they describe, which I did.
Correct, this command wouldn't shut down the device. When finished running you should still just be in fastboot mode as before. The instructions seem like they were probably copy/pasted and pieced together from the instructions for other devices.
 
  • Like
Reactions: ocnbrze
Upvote 0
Okay, so I've read through the instructions a couple of times. A couple of questions:

1.) Are you sure you didn't already install the recovery?
I see in the image you posted that you are on the bootloader screen. If you use the volume keys from there to navigate to "recovery" at the top of the screen (power button to select) does it take you into a custom recovery or the stock recovery?

2.) Did you get any errors when flashing the recovery file?
It sounds like in some cases you may have to manually flash to boot_a. It wouldn't hurt anything to try this anyway. I believe the command would look like: fastboot flash boot_a filename.img
You could also do the same for boot_b

3.) Wow, I just realized that you uploaded a copy of your command prompt text. I missed that yesterday. Thanks! That is helpful in seeing what happened. The instructions are a little unclear on the sideload. I believe even the stock recovery has a sideload option built into it. I wonder if you are supposed to be choosing sideload from the custom recovery?
This right here sounds like an option in the custom recovery to me (unless it's an option in the bootloader while using the volume keys):

@Brian706 regarding 1) I did download the recovery file and 'flash' it using the command they specify in step 5 (the one I was questioning above). If I select the 'recovery mode' option, it just boots to the integrity screen as shown below:
IMG_20220103_194656.jpg


Would this qualify as a boot loop? Also, I don't know if the recovery mode is a UI and like you I did wonder if the sideloading step could be performed from 'fastboot' mode, but as you say the instructions re side loading feel unclear. The impression I get though is that it ought to be a UI (I'm guessing perhaps like some 'safe modes' with reduced functionality on certain linux OSes) and that I ought to have the option to choose “Apply Update”. The fact that they don't give any indication where makes me think it ought to be fairly obvious, and in any case the options I have are so limited on fastboot that I reckon it can't be hiding there. Re the instructions, they're based on a templates which pull in particular instructions for certain devices but have some common parts, it seems, so that's about right.

Re
2.) Did you get any errors when flashing the recovery file?
No just the output above:
fastboot flash boot lineage-18.1-20211223-recovery-fajita.img
Sending 'boot_a' (65536 KB) OKAY [ 1.533s]
Writing 'boot_a' OKAY [ 0.318s]
Finished. Total time: 1.955s

Not sure if there should have been more output though.

It sounds like in some cases you may have to manually flash to boot_a. It wouldn't hurt anything to try this anyway. I believe the command would look like: fastboot flash boot_a filename.img

Yeah clocked that. But it does seem tohave written to boot_a as per the output just pasted. As for doing it to b, it would appear that is what the next stage sideloading is about..?

Re the stock recovery, I'm guessing that's gone as I just get the same integrity message when choosing recovery, as per above....
 
Upvote 0
@Brian706 BTW I just tried running the manual option - gave the same result I'm afraid:

fastboot flash boot_a lineage-18.1-20211223-recovery-fajita.img
Sending 'boot_a' (65536 KB) OKAY [ 1.533s]
Writing 'boot_a' OKAY [ 0.318s]
Finished. Total time: 1.954s

If you reckon I don't mind trying doing it to slot b - the only thing is - if I could equally run it on slot b, what's the next section about with that particular zip for copying? I guess 'slot b' must be something different then? It would be pretty odd if I could run it on boot_a but need a script to copy to b, so that more or less answers my q... and it's true that it would explain a lot if the phone were configured to boot recovery from boot_b... worth trying it then I guess?
 
Upvote 0
Okay, so when you select recovery and you see that screen, are you always pressing the power button (which stops the phone from booting) or have you sat and waited to see if the recovery boots up after that screen and without pausing the boot sequence?

This doesn't sound like a boot loop to me. A bootloop is generally where the device gets stuck in some part of the booting sequence then restarts and does the whole thing over again (a loop). It sounds like you may just be pausing the boot sequence. You do seem thorough though, so I'd be surprised if you hadn't tried without hitting the power button, but it's worth looking at all options.
 
Upvote 0
Okay, so when you select recovery and you see that screen, are you always pressing the power button (which stops the phone from booting) or have you sat and waited to see if the recovery boots up after that screen and without pausing the boot sequence?

This doesn't sound like a boot loop to me. A bootloop is generally where the device gets stuck in some part of the booting sequence then restarts and does the whole thing over again (a loop). It sounds like you may just be pausing the boot sequence. You do seem thorough though, so I'd be surprised if you hadn't tried without hitting the power button, but it's worth looking at all options.

The plot thickens... before when selecting recovery (after booting into fastboot mode) I had just pushed the power button and let go. Then, as you say, waited for it to boot (I thought it might eventually boot owing to the message but it never did). Just now, I thought I'd try the opposite. I selected recovery mode with the power button but held it down a little while. That seems to have resulted in it rebooting and it loads the 1+ symbol in the middle of the screen but nothing else...

It's been like this at least 3 mins now... perhaps I'll just switch it off again (volume up + power button)
 
Upvote 0
I ran
> fastboot getvar all
and among all the output were these lines:

(bootloader) current-slot:a
(bootloader) has-slot:boot:yes
(bootloader) slot-retry-count:b:0
(bootloader) slot-unbootable:b:no
(bootloader) slot-successful:b:no
(bootloader) slot-retry-count:a:5
(bootloader) slot-unbootable:a:no
(bootloader) slot-successful:a:no
(bootloader) slot-count:2

That makes me think my 'recovery' slot will be slot b. Dunno if that has anything to do with boot_b. I'm a bit concerned about flashing the recovery to boot_b and finding it's now hard bricked... In your opinion is that very likely? I appreciate you're not responsible but what do you reckon?
 
Upvote 0
The plot thickens... before when selecting recovery (after booting into fastboot mode) I had just pushed the power button and let go. Then, as you say, waited for it to boot (I thought it might eventually boot owing to the message but it never did). Just now, I thought I'd try the opposite. I selected recovery mode with the power button but held it down a little while. That seems to have resulted in it rebooting and it loads the 1+ symbol in the middle of the screen but nothing else...

It's been like this at least 3 mins now... perhaps I'll just switch it off again (volume up + power button)
@Brian706 perhaps I should clarify I mean that I used the up/down keys to select recovery mode then just pressed the power key once, which restarted the device and I saw the same screen. When I did the same just now and held down the power key a bit longer it just showed the 1+ icon for several minutes (and 'powered by android' at the bottom), so I reckon when I hold down power it does indeed pause the boot and that is what is shows me.
 
Upvote 0
@Brian706 perhaps I should clarify I mean that I used the up/down keys to select recovery mode then just pressed the power key once, which restarted the device and I saw the same screen. When I did the same just now and held down the power key a bit longer it just showed the 1+ icon for several minutes (and 'powered by android' at the bottom), so I reckon when I hold down power it does indeed pause the boot and that is what is shows me.
Sorry I should say I see the 'integrity' screen, not the fastboot screen when I pressed once to select recovery.
 
Upvote 0
@Brian706 I 'flashed' the recovery image to boot_b. Output as per boot_a but with boot_b. Behaviour exactly the same. Anti-climax :).

Lol this feels pretty ridiculous. Because there is such a vast gap between what goes on in these phones and what your average 'flasher' like myself (and a starter at that) knows, it's seems I'm doing just pretty random trial and error stuff, with the threat of 'hard bricking' hovering :D. There seems to be little to no info about how to really diagnose, on most forums I see 'try these commands' type stuff as opposed to serious diagnostics. And a lot of them seem to be in short hand at that to a novice like me.

When I read the guide on lineageos I thought, these seem pretty straightforward, if I do them exactly, all will probably work. Well I'm pretty sure I did them exactly and here I am :) The only thing I wrote or did that wasn't in the guide was a command that seemed to fail (I included it in the txt file) and I'm pretty sure it was a no-op. It's about the only thing I can think of that I might do differently if I were to follow the guide again.

I guess this is why people use 3rd party software like TWRP. That's probably a better bet right?

Anyway, for now, what do you reckon? Stock ROM time? That'll have to be another day. Something I've noticed about instructions for installing a stock ROM is that they often seem to assume a window environment - I don't suppose you'd recommend one in particular for a mac?

BTW let me say once more how much I appreciate you taking the time to help - it's a real kindness. I know it must be even more puzzling without the phone and getting everything by report too.
 
Upvote 0
I I'm a bit concerned about flashing the recovery to boot_b and finding it's now hard bricked... In your opinion is that very likely? I appreciate you're not responsible but what do you reckon?
In my opinion I do not think it would brick the device. Now I would feel terrible if I was wrong, but considering the zip you are trying to sideload, it almost sounds like it would be accomplishing the same thing. Honestly if it were my device, I would try it.

@Brian706 When I did the same just now and held down the power key a bit longer it just showed the 1+ icon for several minutes (and 'powered by android' at the bottom), so I reckon when I hold down power it does indeed pause the boot and that is what is shows me.
Depending on how long you held the power button, you might have actually restarted the device. Tapping power on the warning screen will pause the boot up until you tap it again. Holding the power button generally simulates a battery pull and is a way to restart the device in cases where you have no other option.

Looking around a bit, I wonder if you are on older firmware and lineage 18.1 isn't compatible... Take a look at this: https://wiki.lineageos.org/devices/fajita/fw_update

I'm starting to run out of ideas though. Without ever having gone through the process myself or having done significant research, I'm starting to get out of my comfort zone. It's possible that updating the firmware and then trying again to install 18.1.

Just based on experience with other devices, it may also be possible to extract the stock boot.img from the OnePlus download and flash it to the boot partitions and maybe figure something out from there. Like I said, getting into a bit of uncomfortable territory now to be giving further advice.
 
Upvote 0
@Brian706 I 'flashed' the recovery image to boot_b. Output as per boot_a but with boot_b. Behaviour exactly the same. Anti-climax :).

Lol this feels pretty ridiculous. Because there is such a vast gap between what goes on in these phones and what your average 'flasher' like myself (and a starter at that) knows, it's seems I'm doing just pretty random trial and error stuff, with the threat of 'hard bricking' hovering :D. There seems to be little to no info about how to really diagnose, on most forums I see 'try these commands' type stuff as opposed to serious diagnostics. And a lot of them seem to be in short hand at that to a novice like me.

When I read the guide on lineageos I thought, these seem pretty straightforward, if I do them exactly, all will probably work. Well I'm pretty sure I did them exactly and here I am :) The only thing I wrote or did that wasn't in the guide was a command that seemed to fail (I included it in the txt file) and I'm pretty sure it was a no-op. It's about the only thing I can think of that I might do differently if I were to follow the guide again.

I guess this is why people use 3rd party software like TWRP. That's probably a better bet right?

Anyway, for now, what do you reckon? Stock ROM time? That'll have to be another day. Something I've noticed about instructions for installing a stock ROM is that they often seem to assume a window environment - I don't suppose you'd recommend one in particular for a mac?

BTW let me say once more how much I appreciate you taking the time to help - it's a real kindness. I know it must be even more puzzling without the phone and getting everything by report too.

I can feel your pain. I still remember the first time I rooted a device back in 2009 or 10. I read through the instructions probably 20 times and felt like I understood it all and followed everything to the letter and still had problems that I had to work out.

TWRP is just another custom recovery and what I generally use on my devices. I do use Pixel devices but I'd imaging the rooting process should be similar even for oneplus.

-Unlock bootloader
-install TWRP
-Make stock backup with TWRP before doing anything
-for stock rom, flash magisk to root it, otherwise flash custom rom via twrp.

If you have the means to flash back to stock, I would suggest starting there and then regrouping.

If you do not, and TWRP is available for your device and current firmware then it may be an option to flash twrp and then install a rom to get up and running.

I'm not sure offhand the mac instructions as I've never owned one. I would imagine that a lot of it is the same but I'd have to look around for more info.

And you are welcome! This used to be a daily thing here, these kinds of questions; back in the good 'ol days. It's rare to get fun ones like this now. The new meta is "what is this heart icon in my partners notifications"
 
  • Like
Reactions: ocnbrze and quddy
Upvote 0
In my opinion I do not think it would brick the device. Now I would feel terrible if I was wrong, but considering the zip you are trying to sideload, it almost sounds like it would be accomplishing the same thing. Honestly if it were my device, I would try it.


Depending on how long you held the power button, you might have actually restarted the device. Tapping power on the warning screen will pause the boot up until you tap it again. Holding the power button generally simulates a battery pull and is a way to restart the device in cases where you have no other option.

Looking around a bit, I wonder if you are on older firmware and lineage 18.1 isn't compatible... Take a look at this: https://wiki.lineageos.org/devices/fajita/fw_update

I'm starting to run out of ideas though. Without ever having gone through the process myself or having done significant research, I'm starting to get out of my comfort zone. It's possible that updating the firmware and then trying again to install 18.1.

Just based on experience with other devices, it may also be possible to extract the stock boot.img from the OnePlus download and flash it to the boot partitions and maybe figure something out from there. Like I said, getting into a bit of uncomfortable territory now to be giving further advice.
Yes, I should have thought of the firmware. I had just unboxed it and set it up with basically minimum details and didn't fancy even connecting it to the net before flashing another ROM, but who knows how long it had been in that box. If I had done, possibly the firmware would have updated and I wouldn't be having these issues. An alternative then, might even be to have tried a much older lineageos to start with, say 17 or even 16 or something. I may try that quickly in case it helps. If not I'll have to eventually flash back the stock ROM and maybe try another route from there. Once again thanks for all your help and support to date!
 
  • Like
Reactions: ocnbrze
Upvote 0
I can feel your pain. I still remember the first time I rooted a device back in 2009 or 10. I read through the instructions probably 20 times and felt like I understood it all and followed everything to the letter and still had problems that I had to work out.

TWRP is just another custom recovery and what I generally use on my devices. I do use Pixel devices but I'd imaging the rooting process should be similar even for oneplus.

-Unlock bootloader
-install TWRP
-Make stock backup with TWRP before doing anything
-for stock rom, flash magisk to root it, otherwise flash custom rom via twrp.

If you have the means to flash back to stock, I would suggest starting there and then regrouping.

If you do not, and TWRP is available for your device and current firmware then it may be an option to flash twrp and then install a rom to get up and running.

I'm not sure offhand the mac instructions as I've never owned one. I would imagine that a lot of it is the same but I'd have to look around for more info.

And you are welcome! This used to be a daily thing here, these kinds of questions; back in the good 'ol days. It's rare to get fun ones like this now. The new meta is "what is this heart icon in my partners notifications"
:D
 
  • Like
Reactions: ocnbrze
Upvote 0
An alternative then, might even be to have tried a much older lineageos to start with, say 17 or even 16 or something. I may try that quickly in case it helps. If not I'll have to eventually flash back the stock ROM and maybe try another route from there. Once again thanks for all your help and support to date!
Yes, I actually meant to suggest this as well. If you can find a previous version of Lineage for your device, that could be an option as well. Without having taken any updates out of the box, this very well could easily just be incompatible firmware. It definitely doesn't seem like you've done anything inherently incorrect as per the instructions. It shows that you took the time to do some research and understanding before diving right in.

Let me know how that goes if you can try an older version or get your firmware updated.
 
Upvote 0
@Brian706 finally got around to picking this up again. Spoiler is that I ended up flashing the stock oxygen ROM again. Not done much testing but so far seems to be behaving fully. I thought I'd let you know as you took so much trouble the other day.

That said, I'm going to regroup and go looking for trouble again as I literally bought the phone to investigate alternatives to stock ROMs. This time I guess I'll try using TWRP as I've seen many people say that often works where the 'official' recovery images fail.

FWIW, I did try to flash twrp from where we left off but I just got some message about FAILED (remote: Failed to load/authenticate boot image: Load Error). Few other people had the issue but there wasn't much info about how to fix, especially for the 6T specifically. I was trying from those instructions rather than the ones on the official TWRP page for the 6T because that official page suggested it couldn't be done with the official TWRP unless TWRP was already on the phone or you had a special cable. I was hoping the unofficial version (by the same maintainer as the official one!) would do it but no luck.

So I found this post about installing the stock ROM by the same, guy (mauronofrio) - seems a sort of android super hero. It worked (though I left a couple of notes toward the bottom of the post as I found some minor roadblocks in using).

Will drop another note if I finally get lineageOS or other working via TWRP recovery and I'll install TWRP before beginning.
 
  • Like
Reactions: Brian706
Upvote 0

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones