IcingTomato's Archive A Very Simple Knowledge Archive

Google Pixel XL 折腾记

我在18年的时候,攒了好久的一笔钱,买了 Pixel XL,换掉了可怜的 iPhone5s,然后就开始了我的折腾之路。

前言

手机摔个稀碎,没法拍图了

Pixel/Pixel XL V版解锁教程

  • 退出谷歌账号,取消屏幕密码,删除指纹

  • 把设备恢复出厂设置

  • 跳过设置向导所有东西,不要连接wifi

  • 进入开发者选项开启USB调试,并授权电脑访问

  • 电脑使用adb命令

adb shell pm uninstall --user 0 com.android.phone 
adb reboot
  • 比较关键的一步,国内很多人卡在这里,主要是要让手机可以访问谷歌并且消除wifi上的X号,我的方法是先使用adb命令(或者科学上网法)
adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204 

然后开关飞行模式,再开启外网,再连接wifi,就可以消除信号x了

  • 设置锁屏密码为图形,再通过桌面的google程序登录谷歌账号

  • 这时候再回去开发者选项就会看到OEM解锁可以开了

  • 打开OEM解锁重启进入BootLoader

电源+音量+ 或

adb reboot bootloader
  • 使用adb命令
fastboot oem unlock

fastboot flashing unlock
  • 然后手机会进入一个界面,音量键选择YES(将会清除所有数据)

  • 清除完了之后手机会跳回到BootLoader界面,可以看到底下已经是UNLOCK状态了

  • 然后重启手机,再进入开发者选项,就会看到OEM解锁那里已经是解锁状态了

如何进入Bootloader界面?

  • 方法一:手机关机,等待3秒钟,按住音量下1秒,不要松开,然后按住电源键,等待手机振动,手机进入bootloader界面。

  • 方法二:手机关机,等待3秒钟,按住音量下1秒,链接电源线,等待手机振动,手机进入bootloader界面。

  • 方法三:手机开机状态下,打开usb调试,在cmd窗口中手动输入

adb reboot bootloader

线刷包刷机教程

  • 谷歌Pixel镜像下载对应的线刷包

  • 然后把所有的文件放到同一个文件夹内

  • 手机进入Bootloader界面,链接电脑

  • 这时候可以确认驱动是不是安装好了,打开设备管理器

  • 双击刚才那个文件夹下的 flash-all.bat,开始刷机(刷机会清除所有数据哦)

  • 刷机过程中手机会重启多次,请静静等待结束

为什么要解锁 Bootloader?

解锁 Bootloader 是打开玩机之门的钥匙。只有在 Bootloader 解锁的前提下,我们接下来的步骤才得以顺利进行:安装 TWRP、获取 Root 权限……最后,通过一些需要 Root 权限的特殊手段,打开位置历史记录功能,获得近乎完整的 Android 体验。

让我们直奔正题吧:

(注意:解锁 Bootloader 重置设备数据,请注意备份)

首先,我们需要安装必(ni)备(dong)的工具并成功接入互联网。

前往「设置-关于手机-版本号」,猛击版本号 7 次开启「开发者选项」。

在开发者选项中开启「OEM 解锁」。若该选项显示为灰色,请检查你的网络连接是否正(ke)常(xue)USB 调试。

在 Pixel 设备中,开启 OEM 解锁需要连网

通过数据线将手机连接至电脑,以管理员身份运行命令提示符(CMD),输入 adb shell 并回车。

此时,手机端会弹出 USB 调试申请,点击「允许」。

回到命令提示符窗口,键入

adb reboot bootloader 

并回车,手机会立即重启至 Bootloader 模式。

在 Bootloader 解锁界面中,使用音量键 +/- 来控制光标,选择「Yes」并按下电源键来进行 Bootloader 解锁。

稍等片刻之后,你的设备会自动重启,开机时屏幕下方出现一把打开的小锁,那 Bootloader 就解锁成功啦。

刷入第三方 Recovery —— TWRP

如果说 Bootloader 是玩机大门上的那把锁,那么 TWRP 就是你打开玩机之门后的领路人。

所以在解锁 Bootloader 之后,紧接着要做的事情就是刷入第三方 Recovery —— TWRP。由于 Pixel 与 Nexus 的系统分区方式不同,刷入 TWRP 的方式也略为复杂一些:

首先,前往 TWRP 官网下载最新版 TWRP 压缩包(.zip)和临时 TWRP 镜像文件(.img)。

将 .img 文件留在电脑上,同时将 .zip 文件拷贝至内置储存。

重启手机至 Fastboot 模式(参考上面的方法或关机后长按「电源」和「音量 -」),在电脑以管理员身份运行命令提示符。

在命令提示符窗口中输入 cd 你的 .img 文件路径 来进行定向(比如我的 .img 文件放在 E:\Android 下,那就键入 cd E:\Android 并回车),然后输入

fastboot boot xxx.img //xxx 为具体的文件名

此时手机会重启至临时 TWRP。

在临时 TWRP 中,选择「Install」,找到我们事先放在内置储存中的压缩包文件,点击刷入。

至此,我们就已经用第三方 TWRP 替换了系统自带的 Recovery,接下来的 Root 操作也得以进行:

前往 SuperSU 官网下载最新版 SuperSU 压缩包。

将压缩包拷贝至手机内置储存。

重启手机至 TWRP(关机后长按「电源」和「音量+」),找到 SuperSU 压缩包并刷入。

完成后重启手机,首次启动过程会自动中断并再次自动重启,不用担心。开机后,手机便已获得 Root 权限,SuperSU 权限管理应用也已经安装至系统当中。

做好这些工作之后,我们就可以进一步使用 LocationReportEnabler 等需要 Root 权限的应用来开启位置记录报告功能,最终获得完整的 Android 生态体验了。

如何进行系统更新

非 Root 用户很难对系统文件进行修改,但在进行系统更新时则较为轻松,在保证网络条件畅(ke)通(xue)的前提下,只需前往「设置-关于-系统更新」,便可自动检查、下载并升级至最新版本的 Android 操作系统。

但对 Root 用户而言,手动刷入工厂镜像进行系统更新的方法则更为稳妥。

首先,我们需要前往 Google 的 Nexus/Pixel 工厂镜像网站找到并下载最新版本的 Android 系统镜像,然后解压。

完整工厂镜像文件压缩包包含了这些内容

如果你是拿到手机想要优先进行系统升级的用户,将手机重启至 Fastboot 模式并连接电脑后,直接运行 flash-all.bat 即可全自动升级至最新版本;如果你想保留升级前的系统数据,则需要在运行 flash-all.bat 前对其进行一些处理。

使用文本文档、Notepad++ 等工具打开 flash-all.bat,找到

fastboot -w update image-marlin-xxxxxx.zip

字段,将其改为

fastboot update image-marlin-nof27b.zip //即去掉 -w

然后保存,即可利用修改后的 flash-all.bat 文件在保留数据的前提下进行系统更新。

另外,在运行 flash-all.bat 进行更新的过程中,很有可能会出现报错。报错文本类似于

archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'

当出现这样的字段时,千万不要终止操作。耐心等待耐心等待耐心等待!只要最后出现

finished. total time: 128.109s 
Press any key to exit...

即是升级成功,手机也会自动重启进入新系统。

另外,在这个过程中所出现的错误往往和 platform-tools(包含 ADB、fastboot 等)版本过旧有关。所以遇到其他形式的报错也不用惊慌,前往 Google 官方网站 下载安装最新版本的 platform-tools 后,再次执行以上操作步骤即可。

Google 从年初开始提供独立的 platform-tools 下载

与非 root 系统自动更新相比,手动刷入完整版工厂镜像尽管要麻烦不少,但也更加灵活。

举个例子,我的 Pixel XL 到手时的系统版本是 Android 7.1.1,但安全更新补丁停留在去年 10 月。如果采用非 root 系统自动更新的方法,那我总计需要更新五次才能更新至最新的 3 月安全更新补丁。

手动 Fastboot 刷入工厂镜像则简单许多,只要我们刷入的是完整版工厂镜像,就可以无视版本跨度,一次性升级至最新版本。

原生安卓WiFi信号去叹号去叉教程5.0-Android P

Captive Portal是安卓5引入的一种检测网络是否正常连接的机制,制作的非常有创意,通过HTTP返回的状态码是否是204来判断是否成功,如果访问得到了200带网页数据,那你就可能处在一个需要登录验证才能上网的环境里,比如说校园网,再比如说一些酒店提供的客户才能免费使用的WiFi(其实是通过DNS劫持实现的),如果连接超时(根本就连接不上)就在WiFi图标和信号图标上加一个标志,安卓5和6是叹号,安卓7改成一个叉了。只不过默认访问的是谷歌自家的验证服务器,然而由于你懂的原因,就算你连接上了网络也连不上这个服务器… 嗯…那其实还是没有连接上网络嘛… 噫….

谷歌设计了一个开关来控制是否启用这个特性,同时也提供了一个变量来控制待验证的服务器地址,国内的修改版ROM通常都改成了高通中国的地址,还有一些ROM设计了代码在重启的时候恢复这个设置,不知道是出于什么目的。

没更新7.0的时候,一直用小狐狸的叹号杀手,很不错的应用,可惜当时他已经很久不更新了,当时安卓N不能用,后来自己做了个小工具,想了想就干脆上架酷安吧,也能帮助大家,这样有了CaptiveMgr工具,这分明就是个没有名字的名字嘛…根本就是foo, bar一样…好像也没什么好叫的了?现在代码还比较乱,要是哪天有空把这堆代码整理出来就开源了算了,毕竟纯粹体力活。

具体的原理不在这里写了,这里主要写如何去掉叹号或者叉标志。

如果有root权限直接用我这个工具算了,比较方便,毕竟用命令也就是检测一下系统然后代替执行命令而已嘛。

(PS: 如果使用SS/SSR可以通过NAT模式让系统直接连接,其内部是通过iptables实现的)

如果没有root权限就得按下面操作了,做好配置以后重启WiFi和数据流量(打开再关闭飞行模式即可)就可以看到效果了。

以下需要ADB调试,配置不赘述

  • 5.0 - 6.x教程

5和6还不支持HTTPS,直接修改即可

检测开关相关:

先处理开关状态,这个变量删除就是默认开启的,删除操作随意执行,反正没影响,删除状态下获取这个变量会返回null。

注意:如果关闭,则无法判断当前网络是否需要登录,无法自动弹出登录页面

adb shell settings delete global captive_portal_server //删除
adb shell settings put global captive_portal_server 0 //禁用
adb shell settings get global captive_portal_server  //查询状态

服务器地址相关:

adb shell settings delete global captive_portal_server  //删除地址就可以恢复默认的谷歌服务器
adb shell settings put global captive_portal_server captive.v2ex.co  //设置一个可用地址(高通/V2EX都推荐)
adb shell settings get global captive_portal_server  //查询当前地址
  • 7.0 - 7.1教程

这两个版本相比5和6没有大的更改,只是默认连接服务器的时候使用HTTPS,但是提供了一个开关用以指定是否使用HTTPS

检测开关相关:同5.0 - 6.x

HTTPS开关相关:

adb shell settings delete global captive_portal_use_https  //删除(直接删除则默认使用HTTPS)
adb shell settings put global captive_portal_use_https 0  //禁用HTTPS(写1启用 写0禁用)
adb shell settings get global captive_portal_use_https  //查询HTTPS开关状态

服务器地址相关:(如果启用了HTTPS需要先确定地址是否支持HTTPS)同5.0 - 6.x

  • 7.1.1教程

这个版本把HTTPS和HTTP两个地址分开保存,并通过7.0加入的HTTPS开关来控制使用哪一个地址。

检测开关相关:同5.0 - 6.x

HTTPS开关相关:同7.0 - 7.1

服务器地址相关:

adb shell settings delete global captive_portal_https_url  //删除(删除默认用HTTPS)
adb shell settings delete global captive_portal_http_url

分别修改两个地址

adb shell settings put global captive_portal_http_url http://captive.v2ex.co/generate_204
adb shell settings put global captive_portal_https_url https://captive.v2ex.co/generate_204
  • 7.1.2教程

此版本服务器地址判断逻辑相比7.1.1没有更改,但是检测的开关却变了。

检测开关:

#删除变量:(删除以后默认启用)
adb shell settings delete global captive_portal_mode
#关闭检测:
adb shell settings put global captive_portal_mode 0
#查看当前状态:
adb shell settings get global captive_portal_mode

服务器地址相关(同7.1.1):

#删除(删除默认用HTTPS)
adb shell settings delete global captive_portal_https_url
adb shell settings delete global captive_portal_http_url  
#分别修改两个地址
adb shell settings put global captive_portal_http_url http://captive.v2ex.co/generate_204
adb shell settings put global captive_portal_https_url https://captive.v2ex.co/generate_204
  • 8.0.0和8.1.0和9.0(Android P)同上7.1.2,未做修改

隐藏导航栏和状态栏

#全屏沉浸:
adb shell settings put global policy_control immersive.full=*

#沉浸状态栏:
adb shell settings put global policy_control immersive.status=*

#沉浸导航栏:
adb shell settings put global policy_control immersive.navigation=*

#单独控制某一个app不沉浸,比如以下代码设定google实时界面不沉浸,其他程序沉浸:
adb shell settings put global policy_control immersive.full=apps,-com.google.android.googlequicksearchbox

#恢复到正常方式:
adb shell settings put global policy_control null

adb 查看android手机中应用的包名和安装位置

#查看是否连接手机
adb devices

#进入指定的device的shell
adb shell
#或者
adb -s ********* shell

#adb 查看所有安装的包
adb shell pm list packages

#根据某个关键字查找包
pm list packages | grep tencent

#查看包安装位置
pm list packages -f

#同样可以进行筛选
pm list packages -f | grep tencent

#将apk拉到pc中
adb pull /data/app/com.tencent.tbs-1/base.apk ~/Downloads

黑阈

adb -d shell sh /data/data/me.piebridge.brevent/brevent.sh

Google Pixel 电信破解

仅适用于一代,无需双清,无需QPST,摆脱繁琐的刷机

在Android Pie下测试通过,重启后不丢失

开发者模式中开启 OEM 解锁后,重启手机进入 bootloader 模式,在电脑端运行 fastboot oem unlock

注:此过程会清除手机数据,请及时备份。

下载modem.img

刷入modem.img

fastboot flash modem_a modem.img
fastboot flash modem_b modem.img

理论上不支持移动和联通,如更换请重刷官方底包

  • 注意(如果有路由器级别kexue可以忽略)

你需要2018年3月或之前的系统。原因是这样的: 有一个叫frp的分区,它的全称是——Factory Reset Protection。 开机设置读取frp,得知是否首次开机。清除frp,伪装成首次开机。 不幸的是,4月的官方镜像里的开机设置没有这种操作。开机设置才不管frp呢,必须联网。 所以在恢复出厂设置前一定要看看你的安全补丁日期是哪个月的!!如果是4月的需要先刷回3月。

2021年2月21日补记

忘记是哪一次刷机的时候PixelPixel XL的包搞混了,在Pixel上刷了XL的包,结果还能用?就是屏幕的最小宽度(可以在设置 -> 系统 -> 开发者选项 -> 绘图 下面更改)变了好像?