2016年初,在Nexus 5发布2年之后,终于拿到了这款原生手机,可以追随Google Android的版本前进的脚步了。
Google服务已经被墙,以下所有操作都需要首先确保已经正确翻墙。
开机以后,因为网络没发就绪(在公司内网需要安装802.1x认证的安全软件),所以跳过了Google注册。网络就绪以后,通过VPN翻墙连接到Goolge注册账号,完成后依然发现在Setting => About phone => System updates
中显示
Your system is up to date.
Last checked for update on 1/1/1970
这个问题的原因是因为Google Services Framework
中的残留数据使得系统认为自己已经检查过最新的软件版本(我怀疑和最初手机没有连接网络使用ntp进行同步时钟有关,或者是对时间判断的bug,因为System updates
检查的时间停留在Unix元年。
处理的方法参考How To Force Your Nexus 4 or Android Device To Update To Jelly Bean 4.2.2,下文图片采用的是该参考文档中图片,实际操作以系统为准。
- 从下拉快捷方式中点击
settings
- 选择
Apps
菜单
- 然后选择
ALL
(需要选择所有程序进程才能找到Google Services Framework
)
- 点击
Clear data
按钮清除数据
- 清理完数据以后,再点击
Force stop
按钮停止Google Service Framework
(这样下次System updates
检查才会启动一个新的进程)
- 返回到
Setting => About phone => System updates
,从新点击一次Check now
按钮,强制再次启动版本更新检查
此时就会看到检查到Android新版本 5.0.1 ,则可以升级到 Android 5.x,再升级到后续的新版本。
有关Nexus 5升级Android 6.0.1评测,看来这款老硬件升级到最新系统还是很流畅的
由于OTA升级方式需要翻墙,网络速度非常缓慢,并且需要先升级到5.0.1,才能再升级到6.x。整个下载过程过于缓慢,几乎无法完成。所以最后还是采用从 Factory Images for Nexus Devices 下载对应 Nexus 5 的镜像来安装。
要实现使用系统镜像来刷新设备,需要使用fastboot
工具,可以从以下两种方式之一来获得:
- 从Android Open Source Project获取完整的开发版本
- 从Android SDK的
platform-tools/
下获取该工具。确保从SDK Manager获取了最新的 Android SDK Platform-tools
参考IntelliJ IDEA 15.0 Help: Prerequisites for Android Development,由于我已经安装和使用了IntelliJ IDEA,所以只需要下载
SDK Tools
从Download Android Studio and SDK Tools下载最新版本的独立的SDK Tools。
我使用的是Mac OS X,所以下载的android-sdk_r24.4.1-macosx.zip
解压缩以后目录是android-sdk-macosx
,将这个目录存放到~/
下(选择自己的HOME目录是为了方便普通用户身份访问)。
在Intellij中创建一个新项目,选择Android
点击Next
,在下一步设置Android SDK Location
时填写前面下载的SDK Tools目录,例如这里/Users/huatai/android-sdk-macosx
在下一步选择Launch SDK Manager
在SDK Manager
中,默认选择安装SDK 6,使用默认安装的软件包就可以开发Android 6的应用软件了,其中也包含了Android SDK Platform-tools
上述安装过程即满足了刷新Android Image需求,同时也是准备Android开发环境的过程
如果使用Mac(如我)在 ~/.bash_profile
配置中添加
if [ -d "<path-to-sdk>/platform-tools" ] ; then
export PATH="<path-to-sdk>/platform-tools:$PATH"
fi
注意:
<path-to-sdk>
要换成实际的SDK目录。对于Window/Linux用户,请参考 Installing adb & fastboot
然后执行. ~/.bash_profile
或退出重新登录使环境生效
此时,执行
adb devices
应该看到连接在USB上的Nexus设备。如果没有看到连接设备,则参考下一步激活USB Debugging
步骤
执行adb devices
时候可能遇到报错error: no devices found
很多在Windows平台刷机的建议都是重新安装驱动(How to fix: Error device not found with ADB.exe)或者尝试升级Windows驱动/将
USB Computer connection
更改成Camera (PTP)
模式(ADB No Devices Found)
尝试重新adb服务
ps aux | grep adb | grep -v grep
可以看到如下adb
服务
huatai 48149 1.3 0.0 2475576 3872 s003 S 12:54AM 1:22.39 adb -P 5037 fork-server server --reply-fd 4
停止服务
adb kill-server
再次启动服务
adb start-server
不过,实际的原因是 需要在Nexus设备先激活开发者模式(developer options
),然后再启用USB debugging
或Android Debug Bridge
(
- 激活开发者模式方式方法如下:
- 在
Settings
中,选择About phone
- 连续点击
Build number
项7
次,此时会有一个提示You are now a developer.
- 返回
Settings
,此时就多了一个Developer options
- 在
- 在
Developer options
点击选择USB debugging
激活Debug模式,此时会提示具有风险(可以直接通过USB安装软件),确认激活
此时,在此使用adb devices
命令检查设备,可以看到
List of devices attached
02211e9ec9623837 device
- 将设备通过USB连接到主机
- 使用以下方式之一将设备启动到
fastboot
模式-
使用
adb tool
在设备启动的状态下执行如下命令adb reboot bootloader
-
使用设备组合键:关闭设备电源,在启动设备时迅速按下相关键。例如,对于Nexus 5设备,启动时同时按下
音量的上下键
和电源键
-
使用adb reboot bootloader
命令之后,Nexus设备会显示一个躺着打开前胸面板的Android机器人,并且提示
FASTBOOT MODE
...
SECURE ROOT - enabled
LOCK STATE - locked
上述界面表示正处于锁定状态,则执行下一步 "通过以下命令将设备的bootloader
解锁"
-
通过以下命令将设备的
bootloader
解锁fastboot oem unlock
解锁bootloader对于开发者和玩家很有用,可以直接访问设备的个人数据定制个人ROM,详细步骤参考How to unlock Nexus 5 bootloader: the first step for modding
这时设备会提示确认屏幕(unlock以后,可以安装定制的操作系统) 注意,确认后设备上的所有数据被清除
使用音量键
将高亮确认键移动到Yes
上,然后按下电源键
确认执行unlock
此时设备屏幕上显示LOCK STATE - unlocked
一行小红字
,表示解锁成功,现在就是解锁状态的FASTBOOT MODE
了。可以开始刷入新系统了。
-
打开一个终端窗口,进入到已经解压缩镜像的目录
-
执行
flash-all
脚本,这个脚本将安装必要的bootloader
,baseband firmware(s)
和操作系统./flash-all.sh
刷机时间约2分钟
-
重启设备
-
设备重启后,处于安全原因,可以重新锁定
bootloader
fastboot oem lock
刷机后启动,在首次启动时,需要连接Google服务进行注册。但是由于在景德镇,Checking connection...
页面会一直卡住无法跳过。参考Can't get past Lollipop Tap & Go setup screen
From Lollipop, Google wants user has a working net connection to boot up.
Prob 1, Your wifi has an active firewall to prevent accessing google servers.
Prob 2, You don't have a sim card or data plan.
解决的方法是:插入一张SIM卡,即使这张SIM卡无法使用(例如,我发现电信的4G卡无法使用,扫描不到2G/3G/4G网络),只要Nexus识别到有SIM卡,就会允许跳过WIFI方式连接Google服务,这样也就避免了最初设备初始化时候尴尬的页面。