由于项目原因,需要刷手机,手机是Nexus 4,上头给我发了项目的文档和刷机系统的镜像文件。
之前我基本上没用过安卓手机,更没刷过机,又加上我比较粗心的性格,刷了N天才刷好,耽误了几天的工作。就在刚才终于刷成功了,兴奋之情难以言表。期间遇到了各种问题,走了很多弯路,现在想想,有时候的做法和想法真是可笑,不过期间也感悟到一些道理。这里总结一下,也许你能用到。
Linux系统下刷机:
安装adb和fastboot
第一步:在linux终端输入lsusb命令查询USB总线上的设备,比如我这里查询结果如下:
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 15a2:0c02 Freescale Semiconductor, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
15a2即设备的设备ID号。
如果不明显,可以通过插拔数据线,找出手机的设备号。
第二步:下载最新的android SDK并解压到某目录,下载地址。
在这里下载的文件貌似不全,下载后检查一下有没有tools和platform-tools这两个文件夹,如果没有,那再搜索一下百度网盘,
我当时在百度网盘下载的。另外,32位和64位的版本貌似也会影响刷机,最好下载符合的。截至目前最新的SDK为android-sdk_r12-linux_x86.tgz
解压出来的名称为android-sdk-linux_x86
进入下面目录:
cd android-sdk-linux_x86/tools/
然后在终端执行:./android update adb
第三步:修改~/.android/adb_usb.ini文件,注意,这时为root模式下的路径,在普通权限下,
是不存在该目录的。
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x15a2
第四步:创建一个新的udev规则的文件,在/etc/udev/rules.d路径下,新建名为imx-android.rules的文件,编辑内容如下:
SUBSYSTEM=="usb", SYSFS{idVendor}=="15a2", MODE="0666"
第五步:在/etc/bash.bashrc中声明adb的路径:
export PATH=........
然后
source /etc/bash.bashrc
如果不是常用的话,可以直接在终端中输入export PATH=$PATH:/...........
但是下次打开终端的时候还需要引入目录。
第六步:重启ADB
adb kill-server
adb start-server
第七步:使用adb devices命令查找设备:
root@lqm:/opt/program/mx53_smd/out/host/linux-x86/bin# adb devices
List of devices attached
0123456789ABCDEF device
至此,adb安装成功。
在终端中输入 fastboot devices可以查看fastboot安装是否成功。
进入fastboot模式下
在终端中输入adb fastboot bootloader
或者通过手机上按键的组合进入fastboot模式,比如Nexus 5可以通过按音量减键+锁屏键进入。
有的帖子写的需要在root权限下进入fastboot模式,否则刷机时会出现waiting for device.
刷镜像.img文件
进入保存镜像文件的目录下,
设置“ANDROID_PRODUCT_OUT”环境变量,该变量指定编译产生的镜像文件在PC机上的存放路径。
env ANDROID_PRODUCT_OUT=`pwd` fastboot flashall -w
pwd表示当前目录
windows下刷机:
安装adb
下载相应sdk,把platform-tools路径加到环境变量中。
也可以下载刷机精灵,提供了刷机需要的环境。
进入fastboot模式
同上
刷镜像.img文件
之前的env ANDROID_PRODUCT_OUT=`pwd`要改为 set ANDROID_PRODUCT_OUT=。。。。。
假设镜像文件的存储路径为D:/product/,设置ANDROID_PRODUCT_OUT环境变量的命令为:set ANDROID_PRODUCT_OUT= D:/product/
常见问题及参考博客
waiting for device解决方案:
1.fastboot驱动版本不匹配或没安装fastboot驱动
2.刷机需要在root权限下,在fastboot命令前加sudo或者切换到root权限
adb版本不同,64计算机上下载的是32位,在ubuntu系统下安装 ia32-libs 方法
error: could not load android-info.txt
感悟
1、下错了文件十分耽误时间
之前下载的sdk,第一次下载的缺少platform-tools文件夹,我以为tool目录就是platform-tools目录,耽误了我一天的时间。后来下载的是32位的,也会在刷机时出错。
2、动手前查清楚相关知识
比如之前的env ANDROID_PRODUCT_OUT=`pwd`,我在windows下set ANDROID_PRODUCT_OUT=`pwd`,出现error: could not load android-info.txt,我上网查了很多方法,后来才发现pwd的意义,改正后就刷机成功了。因为这个问题,我走了很多弯路,如果事先查明白这行命令的目的,就不会耽误这么久的时间。
3、不要迷信权威
有时候问一些大牛,也许他们专研的方向不是这方面,即使专研这方面,可能也会出错。之前就是太迷信大牛的话,走了牛角尖。