编译在 N1(G5, Passion) 上运行的姜饼(GingerBread,Android 2.3)代码

(转载请注明出处: [http://blog.csdn.net/xieyan0811

](http://blog.csdn.net/xieyan0811))

1. 修改效果

  1. 在 32 位系统上正常编译通过,N1 上能运行,带 root 权限

  2. 带 N1 原始的四色 X 开机动画,默认语言为简体中文

  3. 带 google market,文件管理器,百度中文手写输入法,金山词霸等常用软件

  4. 打电话,收发短信,WIFI,移动网络,热点上网正常(APN 已设)

  5. 音频,视频,照像,摄像,Gps,Sensor 使用正常

  6. 目前未测到不正常的功能

2. 下载 android 2.2 或 2.3 的 sdk
刷机使用的 fastboot 和 adb 都需要从 sdk 中获得

3. 对 N1 的处理

  1. Bootloader 解锁
  1. 关机后,按 Power+ 音量减开机,按音量键选 fastboot,然后按 Power 进入

  2. 在 PC 端运行解锁命令如下(fastboot 命令可从 SDK/tools 目录得到)

  3. _ # fastboot oem unlock _

  4. 通过音量和 Power 键选 Yes,重新启动,此时看到屏幕下面有一个解决锁标志

  1. 注意:解锁后手机里的用户数据全被清除了,所以解锁之前需要先备份

4. 刷带 nandroid 的 recovery
recovery 用于系统升级,通常情况下即使刷坏了,也不影响手机正常使用。它只对 boot, system, userdata

三个分区做备份,有些版本的 recovery 带 nandroid 功能,它用于备份和恢复当前手机系统

  1. 普通使用
  1. 关机后,按 Power+ 音量减开机,按音量键选 recovery,然后按 Power 进入,此时看到叹号和小绿人

  2. 按音量加减 +Power 进入菜单,此模式可以使用 update.zip

升级,但不能备份当前系统,强烈建议升级前备份原系统,因为原生的一般都比后烧的稳定

  1. 按 Power+ 音量减 + 滚轮重启
  1. 替换带 nandroid 的 recovery,以备份原有系统
  1. 下载 recovery-RA-nexus-v1.7.0.img(见下面指定的地址)

  2. 关机后,按 Power+ 音量减开机,按音量键选 fastboot,然后按 Power 进入

  3. / 在 PC 端运行烧写命令如下

1
$ fastboot flash recovery recovery-RA-nexts-v1.7.0.img
  1. 在手机端菜单中选择进入 bootloader

  2. 在 bootloader 中选 recovery,就可看到 recovery 的新选项,用轨迹球可以操作

  3. 备份数据和恢复选项
    更新的 recovery 除正常备份外还可以备份 google 帐号数据,备份 app2sd

中扩展的数据,和恢复到选定的版本(早期版本只支持恢复到最后备份的版本)

  1. 注意
    用以上方法烧写 recovery 分区,系统重启后 recovery 又会恢复,这是由于开机时被 /data/recovery.img

恢复了,如果不想被刷回,可将下载的 recovery.img 放到 /data/ 下即可(需要 root 权限)

5. 编译 android 2.3(如不想编译请跳过此步,直接下载编好的 img 烧写)

  1. 安装 jdk
    android 之前的版本使用 jdk1.5 编译,而 android 2.3 默认要求使用 jdk1.6
  1. 安装 jdk 1.6
1
$ sudo apt-get install sun-java6-jdk
  1. 在同一台机器上同时编译 android 2.2 和 android 2.3,用以下方法进行切换
1
$ sudo update-java-alternatives -s java-1.5.0-sun
  1. 用 git 下载 2.3 源代码
    配置 linux 环境,安装 git 及 repo 请参见相关文档

  2. 解决只能在 64 位系统编译的问题
    android 2.3 默认只能在 64 位系统中编译,为了不重装系统可以用以下方法在 32 系统上编译

  1. 修改 main.mk
1
2
3
$ vi build/core/main.mk
将 75 行左右判断 64 位的部分注释掉,或修改如下:
ifneq (i686,$(findstring i686,$(build_arch)))
  1. 修改 clearsilver 中的编译选项,将下面四个文件中的 -m64 改为 -m32
1
2
3
4
external/clearsilver/cgi/Android.mk,  
external/clearsilver/java-jni/Android.mk,
external/clearsilver/util/Android.mk,
external/clearsilver/cs/Android.mk
  1. 编译前的准备工作
  1. 连接手机和电脑

  2. 将手机中的没有源码的库补丁到源码中(我的 N1 系统为 android 2.2)

1
2
$ cd device/htc/passion/  
$ ./extract-files.sh 此处需要的 adb 命令从 SDK 中获取 _
  1. 修改源码
  1. 解决照像摄像问题(android 2.3 支持了多摄像头之后接口改变),修改
    frameworks/base/services/camera/libcameraservice/CameraService.cpp
    frameworks/base/media/libstagefright/omx/OMXNodeInstance.cpp
    frameworks/base/media/libstagefright/OMXCodec.cpp
    frameworks/base/media/libstagefright/CameraSource.cpp

  2. 解决进应用闪白问题,修改
    frameworks/base/libs/ui/GraphicBuffer.cpp

  1. 编译
1
2
3
4
$ . build/envsetup.sh  
$ lunch 3 # 此处选择硬件平台为 _ _ N1(Passion)
$ choosecombo 1 1 full_passion 3 # 3 为指定编译工程模式,即带 root 权限 _
$ make –j6

6. 下载 img

  1. 此版本为个人测试使用,在本人上周网购的自带 android 2.2 的港版 N1 上正常使用,不能保证所有 N1

都使用正常,烧机后果自负,建议大家自行编译。再次提醒:请在烧写前先用 recovery nandroid 备份当前系统。以下为下载地址: [http://iask.sina.com.cn/u/ish?retcode=0

](http://iask.sina.com.cn/u/ish?retcode=0)
(含 md5, system, userdata, boot, recovery)

  1. 下载后可通过 fastboot 烧写,方法如下
1
2
3
$ fastboot flash system system.img  
$ fastboot flash boot boot.img
$ fastboot flash userdata userdata.img

7. 参考

  1. Android 2.3 使用的 google market 可从此处下载
    [http://blog.csdn.net/silenceburn/archive/2010/12/24/6096822.aspx

](http://blog.csdn.net/silenceburn/archive/2010/12/24/6096822.aspx)

  1. 设置 apn 的方法
    [http://mobile.yesky.com/447/9288447.shtml

](http://mobile.yesky.com/447/9288447.shtml)

  1. Recovery 的使用请参考
    [http://anriqing.blogbus.com/logs/77459519.html

](http://anriqing.blogbus.com/logs/77459519.html)