android源码学习之源码编译并nexus s真机刷机

一、使用原厂镜像对nexus s刷机
1. 下载原厂镜象文件 
https://developers.google.com/android/nexus/images#soju
在打开的页面中选择Factory Images "soju" for Nexus S下面的三个镜象,这里选择4.0.4 (IMM76D),
下载好是soju-imm76d-factory-ca4ae9ee.tgz,解压,并把fastboot.zip包下面的那些工具拷到soju目录下,
adb reboot bootloader // bootloader界面,fastboot界面
sh flash-all.sh或者双击flash-all.bat
2. 解锁并刷入recovery.img
1) 解锁。
要想获得root权限,必须解锁。如果已解锁就不要再运行unlock了。
adb reboot bootloader // 进入bootloader界面。 开机时按住 音量上+电源
fastboot oem unlock //注意这步会删除掉SD卡、ROM中的原有内容,请在之前做好备份
2) 刷入recovery并root 
把ROOT&BusyBox_Patch.zip放入手机sdcard,运行:
adb reboot bootloader // 开机时按住音量上+电源
fastboot flash recovery recovery.img // v4.0.1.4
刷完后不要重启,否则recovery会被恢复到原版。直接由bootloader界面进入recovery,点击install zip from sdcarcd,选择ROOT&BusyBox_Patch.zip,搞完后重启。
获取root失败,需要通过百度一键root工具进行root.

i9300的root:
adb reboot bootloader // 进入bootloader界面
打开运行Odin3v3.06.exe,勾选AutoReboot/F.Reset Time两项,点击PDA按钮,从刷机工具包中选择CF-Root-SGS3-recovery.tar。

adb reboot recovery //进入recovery界面

二、自己编译android源码并刷到nexus s设备中
1. 下载源码(这里我选择android4.0.4_r1.1):
参考: http://source.android.com/source/downloading.html
mkdir android4.0.4_r1.1
cd android4.0.4_r1.1
curl https : //dl-ssl.google.com/dl/googlesource/git-repo/repo > ./repo
chmod a+x repo
打开https://android.googlesource.com/new-password打开,申请结果拷贝到~/.netrc
./repo init  - u https : //android.googlesource.com/platform/manifest -b android4.0.4_r1.1
如果下载失败,则改为以下重试:
./repo init -u https://android.googlesource.com/a/platform/manifest -b  android4.0.4_r1.1

最后./repo sync下载

注:关于版本的选择
从 https://developers.google.com/android/nexus/images 上看,我手上的设备港版i9023只能刷soju,
2.3.6 (GRK39F)
4.0.4 (IMM76D)
4.1.2 (JZO54K)
所以我就选择以上的源码之一进行编译,从 http://source.android.com/source/build-numbers.html中查一下,以上三种源码对应的括号里的代码,这里我选择 IMM76D,找到 android-4.0.4_r1.1

2. 编译源码
1) 在编译之前要设置好vendor目录。打开 http://source.android.com/source/building-devices.html,找到“Obtaining proprietary binaries”,按说明操作:
打开 https://developers.google.com/android/nexus/drivers,搜索 IMM76D,在Binaries for Nexus S ("crespo")目录下找到Nexus S binaries for Android 4.0.4 (IMM76D to IMM76L),这里有五个link链接,下载下来,各自解压放到源码根目录下,依次执行sh extract-xxxx.sh并输入I ACCEPT。最后你会发现源码根目录下增加了vendor目录。
2) 编译
. build/envsetup.sh
lunch (显示所有选项,输入full_crespo-userdebug前面的数字)
make clobber //删除所有配置所编译输出的结果文件。类似于:rm –rf ./out/
make -j16

注:其他make命令
make clean 删除本次配置所编译输出的结果文件。类似于:rm –rf ./out/ <configuration>
make LOCAL_MODULE:编译一个单独得模块(需要有Android.mk文件存在)。
make targets:将输出所有拟可以编译的模块名称列表。

3. 将编好的img文件刷到nexus s手机中:
编译完成后进入out/target/product/crespo目录查看,
将boot.img和system.img拷到fastboot目录下,
adb reboot bootloader
执行:
fastboot -w -p flashall
fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash system system.img
fastboot flash userdata userdata.img
//fastboot flash cache cache.img
//fastboot flash ramdisk ramdisk.img
完了以后重启手机查看手机版本号4.0.3

总结:这样就可以在真机上运行我们自己编译源码的镜象,就不用每次依赖模拟器来学习源码了。

其他falsh命令参考:
fastboot flash recovery recovery.img
fastboot flash userdata userdata.img
fastboot flash ramdisk ramdisk.img
更多fastboot命令参考上文中flash-all.sh
参考:
http://source.android.com/source/building-devices.html


===========================
2015.10.31 
编译android4.1.2_r1 需要java6,ubuntu12.04上安装java6的方法:
1. 在/etc/apt/sources.list 末尾加上如下行:
###for install Java6
deb http://ppa.launchpad.net/ferramroberto/java/ubuntu natty main
2. sudo apt-get update 
  更新索引时候提示:
   W: GPG 错误:http://ppa.launchpad.net natty Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY B725097B3ACC3965
3. 下载安装这个key
   sudo apt-key adv --recv-key --keyserver keyserver.ubuntu.com B725097B3ACC3965
4. sudo apt-get update
5. sudo apt-get install sun-java6-jdk sun-java6-jre sun-java6-plugin ( 你也许还要:sudo apt-get install sun-java6-demo sun-java6-source)
6. 安装完后,系统默任被切换到 java6上来
7. 安装完毕后把 /etc/sources.list 增加的两行注释掉然后sudo apt-get update 以避免升级安装之混乱
8. 如果你的系统之前安装过默认java7,如果你觉得想回来练练。可以这样来回切换java的版本:
     sudo update-java-alternatives -s java-7-oracle
     sudo update-java-alternatives -s java-6-sun
   当然验证java的版本的方法是:  java -version; javac -version 

============================
2015年11月2日 星期一 
刷机
adb reboot bootloader//重启进入fastboot模式
adb reboot recovery // recovery界面

编译
make snod//产生一个新的系统映像system.img
make ramdisk//编译ramdisk
make userdataimage//编译userdata
make systemimage//编译system
make bootimage//编译kernel 

你可能感兴趣的:(android,nexus,刷机,原生代码)