Google Pixel Phone
This one I bought used because I really miss the root capabilities but would rather not flash my daily driver (the Google Pixel 2 XL at the moment).
Info
Stolen from Google Pixel Wikipedia page:
Google announced the first generation Pixel smartphones, the Pixel and the Pixel XL, on October 4, 2016 during the #MadeByGoogle event. Google emphasized the camera on the two phones, which ranked as the best smartphone camera on DxOMarkMobile with 90 points until HTC released the U11, which also scored 90 points. This is largely due to software optimizations such as HDR+. The Pixel phones also include unlimited cloud storage for pictures on Google Photos and, for devices purchased directly from Google, an unlockable bootloader.
- Display: 5.0″ AMOLED display with 1080×1920 pixel resolution (Pixel); 5.5″ AMOLED display with 1440×2560 pixel resolution (Pixel XL)
- Processor: Qualcomm Snapdragon 821
- Storage: 32 GB or 128 GB
- RAM: 4 GB LPDDR4
- Cameras: 12.3 MP rear camera with f/2.0 lens and IR laser-assisted auto focus; 1.55 μm pixel size. 8 MP front camera with f/2.4 lens
- Battery: 2,770 mAh (Pixel); 3,450 mAh (Pixel XL); both are non-removable and have fast charging
- Materials: Aluminum unibody design with hybrid coating; IP53 water and dust resistance
- Colors: Very Silver, Quite Black or Really Blue (Limited Edition)
- Operating system: Android 7.1 Nougat; upgradable to Android 10
My Phone
- Product/Variant: sailfish-US-PVT
- Original version: 10.0.0 (QP1A.191005.007, Oct 2019)
- Phone said in About Phone -> Build: QP1A.191005.007.A1
- Serial Number: Hey now, that's personal ;-)
Support
Maintenance
- Google Pixel Battery Repair & Replacement Guide (Repairs Universe)
Disclaimer: I haven't done this yet. The battery in the used Pixel I purchased is clearly not performing at its best so I will probably attempt this at some point in the future.
Parts
- The Pixel Phone
I purchased the 128 GB model (used) in January 2020 for $70 (free shipping). Not bad. - Battery (Non-removable Li-Ion 2770 mAh)
- Google Pixel Battery Replacement (Repairs Universe) ( $12 )
Hacking
ROMs
LineageOS via lineageos.org
This appears to be where the official stable versions of ROMs are located.
- Current builds (currently 16.0)
I'm not going to bother with this one.
LineageOS via www.cyanogenmods.org
Downloading
This seems to be where the unstable / beta / pre-release versions are available. I have NO IDEA why these Android ROM guys use forums and ghetto file hosting sites to host their files, it's ridiculously annoying. You'll have to click around waaaay tooooo muuuuch. Geez. Anyway, maybe my shortcuts will help somewhat...
- LineageOS 17, LineageOS 17.1, and Android 10
- Version 17.0 (Due to the clusterfuck of links from page to page on the damn forums, I accidentally downloaded 17.0 first, so here are those links:
- TWRP Download Page for Pixel Phone (sailfish) (Same for LineageOS 17.0 and 17.1)
- The TWRP Image
- MD5SUM hash file (for verifying file integrity)
- SHA256 hash file (for verifying file integrity)
- GPG Signature (for verifying file authenticity)
- LineageOS 17.0 ROM Download Page for Pixel Phone
- ROM File *
- GApps for LineageOS 17.0/17.1
- TWRP Download Page for Pixel Phone (sailfish) (Same for LineageOS 17.0 and 17.1)
- Version 17.1 (currently the latest)
- LineageOS 17.1 Download Page (Has all supported phones) - Don't be fooled by the first list of links, scroll down to the green box where is says "The initial LineageOS 17.1 branch is ready and we have the" ...
- LineageOS 17.1 Download Page for Pixel Phone
- LineageOS 17.1 ROM Download Page for Pixel Phone - without GApps
- lineage-17.1-20200108-UNOFFICIAL-sailfish.zip Without GApps *
- LineageOS 17.1 ROM Download Page for Pixel Phone - with GApps (RECOMMENDED DOWNLOAD)
- lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip With GApps *
- TWRP Download Page for Pixel Phone (sailfish) (Same for LineageOS 17.0 and 17.1)
- LineageOS 17.1 ROM Download Page for Pixel Phone - without GApps
- GApps for LineageOS 17.0/17.1 (In case you installed the ROM without them and want to add GApps later, I suppose)
- Version 17.0 (Due to the clusterfuck of links from page to page on the damn forums, I accidentally downloaded 17.0 first, so here are those links:
* This is the URL I ended up downloading from, but you may want to visit the page link for a better mirror
References
- How to install TWRP recovery
- Pixel unlock bootloader guide – required to install TWRP recovery
- How to Root LineageOS 16/17.0/17.1
- Official Google Factory Images and Flashing Instructions
- Official ADB Downloads
- Cyanogenmod forums for the Google Pixel (sailfish)
Installing
- Skip all the setup options shown at first boot, no google, no wifi, nothing
- Enable developer mode on phone - [https://www.cyanogenmods.org/forums/topic/enable-developer-options-stock-android-cyanogenmod-custom-roms/ How to Enable Developer Options
- Enable USB debugging on phone - How to Enable USB Debugging and OEM Unlock
- Connect via USB to your computer
- Install ADB
- Use adb to list devices:
jeremy@latitude ~ $ adb devices List of devices attached FA6C30301328 device
- Connect to the shell and poke around; here I'm just getting the kernel/cpu info and finding the sdcard directory.
jeremy@latitude ~ $ adb shell sailfish:/ $ uname -a Linux localhost 3.18.137-g72a7a64494e #1 SMP PREEMPT Fri Sep 27 18:40:34 UTC 2019 aarch64 sailfish:/ $ ls -l /sdcard/ total 80 drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Alarms drwxrwx--x 4 root sdcard_rw 4096 2019-09-29 20:29 Android drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 DCIM drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Download drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Movies drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Music drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Notifications drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Pictures drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Podcasts drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Ringtones sailfish:/ $ ^D jeremy@latitude ~ $
- If you haven't already, download the ROM, Gapps, and TWRP package:
jeremy@latitude Pixel_LineageOS $ ls -l total 1434053 -rw-rw-r-- 1 jeremy jeremy 83260609 2020-02-01 05:33:52 BiTGApps-arm-10.0.0-v0.2_signed.zip -rw-rw-r-- 1 jeremy jeremy 80584079 2020-02-01 05:34:09 Gapps-Android10.zip -rw-rw-r-- 1 jeremy jeremy 582804723 2020-02-01 07:14:56 lineage-17.1-20200108-UNOFFICIAL-sailfish.zip -rw-rw-r-- 1 jeremy jeremy 695047854 2020-02-01 07:02:56 lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip -rw-rw-r-- 1 jeremy jeremy 31744000 2020-02-01 05:30:16 twrp-3.3.0-0-sailfish.img -rw-rw-r-- 1 jeremy jeremy 566 2020-02-01 05:30:22 twrp-3.3.0-0-sailfish.img.asc -rw-rw-r-- 1 jeremy jeremy 59 2020-02-01 05:30:28 twrp-3.3.0-0-sailfish.img.md5 -rw-rw-r-- 1 jeremy jeremy 91 2020-02-01 05:30:25 twrp-3.3.0-0-sailfish.img.sha256
- Let's verify that twrp file's GPG signature...
- First, download their public key:
jeremy@latitude Pixel_LineageOS $ wget 'https://dl.twrp.me/public.asc' --2020-02-01 05:51:49-- https://dl.twrp.me/public.asc Resolving dl.twrp.me (dl.twrp.me)... 45.249.91.154 Connecting to dl.twrp.me (dl.twrp.me)|45.249.91.154|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 3075 (3.0K) [application/octet-stream] Saving to: ‘public.asc’ public.asc 100%[=========================>] 3.00K --.-KB/s in 0s 2020-02-01 05:51:49 (146 MB/s) - ‘public.asc’ saved [3075/3075]
- Import the key:
jeremy@latitude Pixel_LineageOS $ gpg --import public.asc gpg: starting migration from earlier GnuPG versions gpg: porting secret keys from '/home/jeremy/.gnupg/secring.gpg' to gpg-agent gpg: key 609E4B027E2AA715: secret key imported gpg: key 4B31AF3001005ED1: secret key imported gpg: key DAB30EDA2AC5502D: secret key imported gpg: key 8154B600280143A2: secret key imported gpg: key 2A169095F4BDC72B: secret key imported gpg: key B0CA7574E4BC2388: secret key imported gpg: key CEBB3C0EE23BF0E2: secret key imported gpg: key 1A2E1085555AFCCD: secret key imported gpg: migration succeeded gpg: key 1D8597D7891A43DF: public key "TeamWin <admin@teamw.in>" imported gpg: Total number processed: 1 gpg: imported: 1
- Verify the signature of the twrp file:
jeremy@latitude Pixel_LineageOS $ gpg --verify twrp-3.3.0-0-sailfish.img.asc gpg: assuming signed data in 'twrp-3.3.0-0-sailfish.img' gpg: Signature made Mon 15 Apr 2019 02:35:22 PM EDT gpg: using RSA key 95707D42307C9D41D09BF7091D8597D7891A43DF gpg: Good signature from "TeamWin <admin@teamw.in>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 9570 7D42 307C 9D41 D09B F709 1D85 97D7 891A 43DF
Hmm, they could do better in putting their public key on a keyserver. Anyway...
- Verify the MD5 hash:
jeremy@latitude Pixel_LineageOS $ md5sum -c twrp-3.3.0-0-sailfish.img.md5 twrp-3.3.0-0-sailfish.img: OK
- Verify the SHA256 hash:
jeremy@latitude Pixel_LineageOS $ sha256sum -c twrp-3.3.0-0-sailfish.img.sha256 twrp-3.3.0-0-sailfish.img: OK
All good. I only wish the ACTUAL ROM (and GApps) were signed. Oh well...
- Copy the ROM over (I'm using the one with GApps) (and verify hash):
jeremy@latitude Pixel_LineageOS $ md5sum lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip 2718bee306fcabdb9b829b5db53a72ff lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip jeremy@latitude Pixel_LineageOS $ md5sum twrp-3.3.0-0-sailfish.img 42ea6dc8d1d938ec8377a38c0a6288f8 twrp-3.3.0-0-sailfish.img jeremy@latitude Pixel_LineageOS $ adb push lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip /sdcard/ lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip: 1 file pushed. 23.2 MB/s (695047854 bytes in 28.567s) jeremy@latitude Pixel_LineageOS $ adb push twrp-3.3.0-0-sailfish.img /sdcard/ twrp-3.3.0-0-sailfish.img: 1 file pushed. 22.2 MB/s (31744000 bytes in 1.364s) jeremy@latitude Pixel_LineageOS $ adb shell sailfish:/ $ ls -l /sdcard/ total 709852 drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Alarms drwxrwx--x 4 root sdcard_rw 4096 2019-09-29 20:29 Android drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 DCIM drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Download drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Movies drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Music drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Notifications drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Pictures drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Podcasts drwxrwx--x 2 root sdcard_rw 4096 2019-09-29 20:29 Ringtones -rw-rw---- 1 root sdcard_rw 695047854 2020-02-01 07:02 lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip -rw-rw---- 1 root sdcard_rw 31744000 2020-02-01 05:30 twrp-3.3.0-0-sailfish.img sailfish:/ $ md5sum /sdcard/lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip 2718bee306fcabdb9b829b5db53a72ff /sdcard/lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip
sailfish:/ $ md5sum /sdcard/twrp-3.3.0-0-sailfish.img 42ea6dc8d1d938ec8377a38c0a6288f8 /sdcard/twrp-3.3.0-0-sailfish.img
TLDR: If you don't want to go through the following like I did, after doing all of the above:
- If the phone is in a factory reset state (any maybe regardless), disable airplane mode and connect it to the internet via Wifi. It does something at this point that allows the "Enable unlocking bootloader" option in the "Developer options" settings.
- If it doesn't show up, reboot again, and you may need to enable developer mode and USB debugging again, but you should now have the "Enable unlcoking bootloader" option. Enable it.
- Then:
fastboot boot twrp-3.3.0-0-sailfish.img
That should reboot (temporarily) into TWRP
- From TWRP, install the TWRP image (Install->"Install Image" then select your twrp img file and click Install
- I rebooted at this point twice (the second time with adb reboot recovery) to make sure the phone came back up into TWRP. Not sure if that is necessary. Let me know.
- From TWRP, install the LineageOS ZIP file of your choice (Install->Install ZIP, choose your lineage-*.zip file and click Install.
- Enable root access from Developer options and you're good to go installing all the good stuff.
... Or you could read the comments on the forums and try (thanks siba!):
fastboot flash boot twrp-3.3.0-0-sailfish.img
All good.
- Reboot to the bootloader:
jeremy@latitude Pixel_LineageOS $ adb reboot bootloader
- Your phone should reboot into the bootloader. As far as I was able to determine with the sparse and disorganized documentation, the Pixel Phone (sailfish) does not require OEM unlocking steps you may see elsewhere. Nevertheless, I tried and got this:
jeremy@latitude Pixel_LineageOS $ fastboot oem unlock ... FAILED (remote: oem unlock is not allowed) finished. total time: 0.050s jeremy@latitude Pixel_LineageOS $ fastboot flashing unlock ... FAILED (remote: oem unlock is not allowed) finished. total time: 0.050s
I assumed that was because this phone didn't need it and moved along...
- I tried booting to the bootloader and flashing TWRP:
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/fastboot flash recovery twrp-3.3.0-0-sailfish.img < waiting for any device >
But this failed to detect the phone when in the bootloader. I tried again in the recovery mode and that didn't work either (had to hold the power button down for a good minute to turn off).
- I didn't do this step (because I just missed it), but its documented on this page.
fastboot flash recovery_ramdisk twrp-3.3.0-0-sailfish.img
So that may have worked, I don't know.
- I then went into the recovery mode and did a factory reset, and then....
- I tried side-loading the LineagaOS:
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/adb sideload lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip Total xfer: 1.00x
Looks fine there, but the phone said:
E:Failed to verify whole-file signature
- I tried side-loading the latest Google OTA Firmware version 10.0.0 (QP1A.191005.007.A3, Dec 2019) [sailfish-ota-qp1a.191005.007.a3-394b5899.zip] after a few (~10) failed attempts with:
jeremy@latitude Pixel_OTA_10.0.0_QP1A.191005.007.A3_Dec_2019 $ ../adb/platform-tools/adb sideload sailfish-ota-qp1a.191005.007.a3-394b5899.zip serving: 'sailfish-ota-qp1a.191005.007.a3-394b5899.zip' (~2%) adb: failed to read command: Success jeremy@latitude Pixel_OTA_10.0.0_QP1A.191005.007.A3_Dec_2019 $ ../adb/platform-tools/adb sideload sailfish-ota-qp1a.191005.007.a3-394b5899.zip adb: sideload connection failed: no devices/emulators found adb: trying pre-KitKat sideload method... adb: pre-KitKat sideload connection failed: no devices/emulators found jeremy@latitude Pixel_OTA_10.0.0_QP1A.191005.007.A3_Dec_2019 $ ../adb/platform-tools/adb sideload sailfish-ota-qp1a.191005.007.a3-394b5899.zip serving: 'sailfish-ota-qp1a.191005.007.a3-394b5899.zip' (~54%) adb: failed to read command: Success
It seemed like the USB cable and/or port on the phone may have been sensitive. Once I positioned the phone so that the cable was lightly pressured backwards (from the phone's front view) AND set it down on a still surface, it finally worked (took a few minutes):
jeremy@latitude Pixel_OTA_10.0.0_QP1A.191005.007.A3_Dec_2019 $ ../adb/platform-tools/adb sideload sailfish-ota-qp1a.191005.007.a3-394b5899.zip Total xfer: 2.00x
That did update the build number from QP1A.191005.007.A1 to QPLA.191005.007.A3 (as seen in About Phone -> Build Number), although under System update it says Android version: 10, Security patch level: October 6, 2019. I expected that to be December 2019, but oh well.
- I then tried all the same methods I did previously to flash the TWRP image and got the same results. Replacing the cable seemed to help connectivity, but that's it.
- I tried also using the lineage-17.1-20200108-UNOFFICIAL-sailfish.zip package.
- Again with the TWRP:
jeremy@latitude Pixel_LineageOS $ fastboot oem unlock ... FAILED (remote: oem unlock is not allowed) finished. total time: 0.050s jeremy@latitude Pixel_LineageOS $ fastboot flashing unlock ... FAILED (remote: oem unlock is not allowed) finished. total time: 0.050s
- But one more thing...
jeremy@latitude Pixel_LineageOS $ fastboot boot twrp-3.3.0-0-sailfish.img downloading 'boot.img'... OKAY [ 0.937s] booting... (bootloader) Command is not supported. (bootloader) Please unlock device to enable this command. FAILED (remote failure) finished. total time: 1.036s
Sooo... that's it for now.
- After reading this forum post: https://forum.xda-developers.com/pixel-xl/help/oem-unlocking-disabled-google-store-t3507209/page2 I finally enabled Wifi and disabled Airplane mode. It looked like the GApps were automatically updating but I had auto updates disabled. Nevertheless, after that the "OEM unlocking" option showed up under the "Developer options" menu. Geez!
- Then oem unlock at bootloader worked:
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/fastboot oem unlock OKAY [ 0.019s] Finished. Total time: 0.019s
- As did the flashing unlock:
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/fastboot flashing unlock (bootloader) Device already : unlocked! OKAY [ 0.045s] Finished. Total time: 0.045s
- But then...
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/fastboot flash recovery twrp-3.3.0-0-sailfish.img Sending 'recovery' (31000 KB) OKAY [ 0.951s] Writing 'recovery' (bootloader) Flashing active slot "_a" FAILED (remote: 'partition [recovery] doesn't exist') fastboot: error: Command failed
- There's a note that "If you have a phone running on an Android version > 8.0 (Oreo or later) then use the below command:" -- This could be it!
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/fastboot flash recovery_ramdisk twrp-3.3.0-0-sailfish.img Sending 'recovery_ramdisk' (31000 KB) OKAY [ 1.001s] Writing 'recovery_ramdisk' (bootloader) Flashing active slot "_a" FAILED (remote: 'partition [recovery_ramdisk] doesn't exist') fastboot: error: Command failed
NOOOOOOOOOO!
- After rebooting the phone again, re-enabling developer mode AND USB debugging (but not "OEM unlocking" -- it was greyed out saying "already unlocked") -- PROGRESS!
- flash recovery and flash recovery_ramdisk still failed, so then I did this (one time boot into recovery?):
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/fastboot boot twrp-3.3.0-0-sailfish.img Sending 'boot.img' (31000 KB) OKAY [ 0.969s] Booting OKAY [ 0.910s] Finished. Total time: 1.913s
TWRP came up! But I couldn't do anything. I had to reboot again to adb push the ZIP files and TWRP image:
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/adb push twrp-3.3.0-0-sailfish.img /sdcard/ twrp-3.3.0-0-sailfish.img: 1 file pushed. 27.0 MB/s (31744000 bytes in 1.120s) jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/adb push lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip /sdcard/ lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip: 1 file pushed. 28.8 MB/s (695047854 bytes in 23.051s) jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/adb push lineage-17.1-20200108-UNOFFICIAL-sailfish.zip /sdcard/ lineage-17.1-20200108-UNOFFICIAL-sailfish.zip: 1 file pushed. 28.8 MB/s (582804723 bytes in 19.290s) jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/adb push BiTGApps-arm-10.0.0-v0.2_signed.zip /sdcard/ BiTGApps-arm-10.0.0-v0.2_signed.zip: 1 file pushed. 28.1 MB/s (83260609 bytes in 2.823s)
Then another:
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/adb reboot bootloader
And another:
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/fastboot boot twrp-3.3.0-0-sailfish.img Sending 'boot.img' (31000 KB) OKAY [ 0.969s] Booting OKAY [ 0.910s] Finished. Total time: 1.861s
TWRP came up...
- I clicked "Install" which came up with the files in /sdcard, including the ones I uploaded
- I chose "Install Image," selected the twrp-3.3.0-0-sailfish.img file, chose the "Install Recovery Ramdisk" option, and swiped to confirm and got:
[IMAGE FLASH COMPLETED]
Alrighty then, let's try a reboot into Android (Click Reboot) and then attempt to reboot to the recovery...
jeremy@latitude Pixel_LineageOS $ ../adb/platform-tools/adb reboot recovery
AWWWW YEEEEAH! TWRP came up :-D
- Now to FINALLY install LineageOS: Choose Install, Image, lineage-17.1-withMTG-20200108-UNOFFICIAL-sailfish.zip, ...
Ok, the install seemed to work, but had two errors:
Failed to mount: '/system' (Invalid argument) Failed to mount: '/vendor' (Invalid argument) AAAARRRRRGG!
Anyway, I Wiped the Dalvik cache and then rebooted . . . AWWWW YEEEEAH! LineageOS came up!!!
- Now just enable root access from Developer options, start installing the fun rooty apps and take a break while they install!