昨天google官方发布了Android 4.1 Jelly Bean的源码,本人第一时间将源码托了下来(托了一个通宵),今天又花了一早上时间编译ROM并刷到自己的Galaxy Nexus中,虽说Android 4.1已经用了一个多星期了,但是作为Android开发者和爱好者,体验源码下载、编译、刷机的整个过程还是很有意义的,然而在编译和刷机过程中也遇到了一些问题,晚上抽了点时间将整个过程总结一下,同时也希望能帮助到想通过自己编译刷机的朋友,废话不多说了~~切入正题。

1、编译环境搭建,本人使用的是ubuntu 12.04,下面所有过程都基于该平台。具体可参考:http://source.android.com/source/initializing.html

2、下载Android 4.1源码,参考:http://source.android.com/source/downloading.html,源码下载过程中经常会遇到下载失败的情况,非常浪费时间,所以编写一个失败重传的脚本可以减少很多不必要的麻烦。将下面的shell脚本保存为download.sh文件放到源代码目录中,执行./download.sh开始下载(替代文档中最后一步repo sync,其余步骤必须按照文档中介绍的一步一步来)

#!/bin/bash
echo "======start repo sync======"
repo sync
while [ $? == 1 ]; do
echo "======sync failed, re-sync again======"
sleep 3
repo sync
done

3、接下来准备开始编译rom,可参考http://source.android.com/source/building.html,首先输入source ./build/envsetup.sh,然后输入lunch full_maguro-user(不同平台参数不一样,具体参考文档说明),接下来执行make -j4编译rom(根据机器CPU的核心数量来设定参数),下来就是漫长的等待过程了(笔者机器性能不给力,整个编译过程大概花费了3个半小时)。如果make -j4的执行过程中一开始提示jdk版本不对,那么按照下面步骤来解决:

  • 从Oracle官方下载jdk1.6.0_33.bin http://www.oracle.com/technetwork/java/javase/downloads/jdk6-downloads-1637591.html
  • 执行sudo chmod a+x /home/jamie/jdk/jdk1.6.0_33.bin(注意这里的目录和你机器上的目录是不一样的)
  • sudo ./home/jamie/jdk/jdk1.6.0_33.bin
  • sudo gedit /etc/profile,尾部添加

#set java environment
                    export JAVA_HOME=/home/jamie/jdk1.6.0_33
                    export JRE_HOME=/home/jamie/jdk1.6.0_31/jre
                    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
                    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

  • 执行source /etc/profile
  • sudo update-alternatives --install /usr/bin/java java /home/jamie/jdk1.6.0_33/bin/java 300
  • sudo update-alternatives --install /usr/bin/javac javac /home/jamie/jdk1.6.0_33/bin/javac 300
  • sudo update-alternatives --config java选择所需要的jdk版本

4、编译完成后会在android_souce/out/target/product/maguro/中生成一大堆img文件,这就是编译生成的刷机rom了

5、按照google官方文档的步骤接下来就是刷机了,然而结果很悲剧,由于官方文档针对的是模拟器,而笔者编译的是Galaxy Nexus,出现刷完直接黑屏无法启动的情况,突然想到昨天网上看到google发布了Android 4.1的二进制文件,而这些文件正好是蓝牙、wifi、显卡等驱动,google将这些驱动单独提供下载,并未集成到源码中,所以我们需要将其编译进rom中,步骤如下:

  • 打开https://developers.google.com/android/nexus/drivers,下载Galaxy Nexus对应的4个文件并解压到源代码的目录,解压出来的4个文件是4个shell脚本,分别为extract-broadcom-maguro.sh,extract-imgtec-maguro.sh,extract-invensense-maguro.sh,extract-samsung-maguro.sh
  • 分别执行这4个脚本,执行期间会要求输入“I ACCEPT”
  • 重新执行make -j4进行编译,这次编译过程时间很短

6、完成上面的驱动集成后,输入 cd  /home/jamie/android_source/out/host/linux-x86/bin(该目录下有fastboot文件), 然后输入sudo ./fastboot flashall -w开始刷机,一般情况下这一步会出现以下错误提示:neither -p product specified nor ANDROID_PRODUCT_OUT set,原因是没有设置rom的位置,解决方法要么使用-p参数,后面跟着rom的位置,或者配置环境变量ANDROID_PRODUCT_OUT,过程如下:

  • 输入sudo gedit /etc/profile,在尾部添加export ANDROID_PRODUCT_OUT=/home/jamie/android_source/out/target/product/maguro,保存并退出
  • 然后输入source /etc/profile使刚设置的环境变量立即生效。

7、最后等待刷机完成,完成后手机会自动重启,大功告成!!最后附上成果图

Android 4.1 (Jelly Bean) 源码编译过程总结相关推荐

  1. 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )

    文章目录 一.在 Android Studio 中创建 Native C++ 工程 二.C/C++ 源码编译过程 三.Makefile 工具 四.CMake 引入 该系列博客的应用场景是 Androi ...

  2. 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )

    文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...

  3. xilinx linux内核,Xilinx-Zynq Linux内核源码编译过程

    本文内容依据http://www.wiki.xilinx.com网址编写,编译所用操作系统为ubuntu 14 1.交叉编译环境的安装配置 2.uboot的编译 1)下载uboot源代码 下载uboo ...

  4. LNMP架构详解(2)——Mysql、PHP、Nginx源码编译过程

    前言 本文将介绍LNMP架构中Mysql.PHP.Nginx的源码编译过程:这时有人不仅会问:在我们使用的Linux系统中,可以从yum源中获得mysql.php,为什么要进行如此漫长复杂的过程进行编 ...

  5. Cesium源码编译过程

    Cesium源码编译过程 文章目录 Cesium源码编译过程 1. 操作环境 2. 主要步骤 3. 参考链接 4. 源码扩展 1. 操作环境 NodeJS V12.12.0 Git 注:不需要全局安装 ...

  6. ubuntu10.04下audacious2.4源码编译过程(解决2.3cue的bug)

    本文最新版本:ubuntu10.04下audacious2.5源码编译过程 编译最新的2.4是为了解决ubuntu源中安装的audacious播放cue时有bug,会一直重复第一首歌 听ape的时候很 ...

  7. android源码编译过程

    1.下载好android源码包. 2.装好vm,ubuntu(如果能在实体机装linux更好). 3.安装所需要的deb包 在终端执行如下命令: sudo apt-get install flex b ...

  8. 【AMD】FSR技术的源码编译过程

    一.问题描述 AMD的FSR技术是一种超分辨率游戏图像增强技术,在Github代码托管网站上以GPUopen的身份提供了开源代码和示例程序.示例程序提供Vulkan版本和DX12版本的可执行文件,仅支 ...

  9. 简诉android源代码编译过程,Android源码编译过程及原理(二)

    在未来等风也等你 本节主要记录的内容anroid 编译系统的结构 编译中枢中main.mk的基本解析 除非特别说明本节中的目录都是基于android的源码目录 1. android 编译系统的结构 a ...

最新文章

  1. ORACLE SQL笛卡尔集
  2. 华为平板wps语音朗读_华为隐藏的这五大功能,个个都很实用,如果你不知道,钱就白花了...
  3. 全球域名解析商域名增量Top10:万网增量及涨幅皆第三
  4. P3723 [AH2017/HNOI2017]礼物 FFT + 式子化简
  5. C++ const常量和指针
  6. 删除对象键值_JavaScript的解构技巧:排除对象属性、避免命名冲突、交换……...
  7. mysql 改变 执行计划_诡异的MySql执行计划的更改
  8. VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程
  9. Hadoop的集群搭建windows基于VMware虚拟机超详细教程(一主二从)
  10. ffmpeg(六)视频缩放及像素格式转换
  11. web安全:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧
  12. Fips模式下应用连接Oracle SSL
  13. VHDL中的行为描述、数据流(RTL)描述和结构描述
  14. java http range_断点续传 HTTP range requests
  15. 混合高斯模型(GMM)推导及实现
  16. BUUCTF NewStarCTF 公开赛赛道Week3 Writeup
  17. 2018年小米 Mi air i7-7500u黑苹果efi引导文件
  18. centos破解root密码
  19. 计算机大赛响亮口号,登山比赛团队名称和团队口号
  20. 清华大学计算机科学王昊,日照最好的三所高中,新鲜出炉!

热门文章

  1. 昨天的我壁咚了公司的小鲜肉,他淡然的推开我走了,我该何去何从~
  2. OSChina 周三乱弹 ——好好的程序员不做,非得去卖内衣
  3. 【菜鸡读论文】Research on Micro-Expression Spotting Method Based on Optical Flow Features
  4. 华为虚拟服务器系统,华为虚拟主机管理系统
  5. 拒绝搜狗 - 流氓软件怎么不罚款? | 搜人引擎
  6. 实战 | 用 Python 轻松制作好看的心型照片墙
  7. C++部署onnx模型(C++和Python3混合编程)
  8. 百度关键词模拟发包php程序,百度关键词快排_什么是seo快排发包技术? - 「黑酷SEO」...
  9. Java.SE01.多线程
  10. 电路板(印刷电路板 线路板)上的字母的含义