这篇文章将从Android源码编译开始,一步步定制自己的Android ROM。使用到的设备为Nexus 5,Android源码版本为4.4.4_r2,编译环境为kali2.0 64位。

1.Android源码编译

android源码下载这里不再介绍,具体可以看google的官方文档。

1.1准备编译环境

编译android源码需要sun/oracle的jdk(kali2.0自带的为openJDK),3.8版本的make,还要安装的依赖库如下:

1.2下载Nexus5硬件驱动

从git上同步的源码是不包含真机的硬件驱动的,所以就算是google的亲儿子,也需要另外下载硬件驱动(不下载的话只能在模拟器中跑)。在 https://developers.google.com/android/nexus/drivers上根据手机型号选对应的驱动包,下载三个驱动包,解压到源码根目录,然后运行三个脚本,会生成vendor目录,即硬件驱动目录。

1.3编译配置

在源码目录下执行:

加载基本配置,然后执行:

根据要刷的手机版本选择即可,Hammerhead是Nexus 5的代号,所以这里选择带有Hammerhead的选项。接下来用make编译:

-jN,其中N根据自己主机的cpu核数来指定,这里为4核。

接下来就是漫长的编译,编译完之后会在源码目录下生成out文件夹,存放编译之后生成的镜像等内容。

2.刷Recovery

2.1解锁bootloader

命令行下通过:

进入bootloader,或者关机之后按电源键+音量减进入bootloader(不同手机型号可能不同)。在fastboot模式下解锁bootloader:

解锁完开机的时候在Google字母下面会有一把开启的锁。注意:手机必须解锁bootloader才能刷第三方的recovery、刷各种rom刷机包

2.2刷第三方recovery

自带的recovery功能有限,所以要刷第三方recovery,这里刷的是ClockworkMod Recovery,下载recovery镜像,用adb push将recovery上传至手机的sdcard目录,然后执行:

重启之后再次进入recovery会发现界面不同了。

3.制作刷机包

3.1刷机包文件准备

完成以上步骤之后就可以开始制作自己的刷机包了。一般的刷机包包含一些几个文件:

  • boot.img文件  : 这是编译内核源代码生成的内核映像
  • META-INF目录 :这个目录是手工创建的,主要用来存放一个升级脚本update-script(这个脚本的内容与system目录中包含的文件有很大关联)以及签名。
  • system目录 : 编译android的平台源代码生成的

在out/target/product/hammerhead目录下生成了很多文件,与制作刷机包有关的有:

  • boot.img
  • system目录

将这两项拷贝至另外一个文件夹,到网上下载其他适配Nexus5 Android 4.4.4的ROM,将其中的META-INF目录拷贝过来,删除该目录下除了update-binary和updater-script两个文件以外的其他文件,并保持目录结构不变。

3.2修改脚本

updater-script脚本的作为大致如下:

  • 以读写模式挂载/system
  • 复制新的/system目录
  • 修改各文件权限
  • 卸载/system

所以需要根据自己的/system目录来修改该脚本(脚本命令可以参考:bbs.hiapk.com/thread-3302232-1-1.html

3.3打包重签名

将boot.img,META-INF目录,/system目录压缩成zip,然后用android签名工具给这个zip签名。签名之后的zip包即是最终的ROM刷机包了。

4.刷机

进入recovery,选择wipe data/factory reset,确定之后再选择wipe cache partition,然后将刷机包用adb push上传至/sdcard目录,接下来选择install zip,选择相应的刷机包即可,重启之后即完成刷机。

第一次刷的时候会提示刷机错误 symlink:some symlinks failed (Status 7),解决方法如下:

需要重新格式化下,进入recovery后

  1. 选择【wipedata/factory reset】→【YES】
  2. 选择【wipe cachepartition】→【YES】
  3. 选择【advanced】→【wipe Dalvik Cache】→【YES】→返回
  4. 选择【munts and storage】→【format /system】→【YES】→返回
  5. 选择【munts and storage】→【format /cache】→【YES】→返回
  6. 选择【munts and storage】→【format /data】→【YES】→返回
  7. 将刷机包push至sdcard
  8. 选择【installzip from sdcard】→【choose zipfrom sdcard】→【xxxxxx.zip】→【YES】
  9. 等待刷完后,按返回,选择【rebootsystem now】,手机开始自动重启

5.总结

至此,完成了从源码编译到刷机的整个流程,刷机的本质其实就是重装一个linux系统,/system文件夹下的内容就是这个linux根目录下的文件。如果需要root,可以直接在/system/app中添加一个Superuser.apk,在xbin目录下添加su文件,然后在updater-script文件中添加权限修改,将su的setuid位置位。总之,从源码开始制作rom是一件比较繁琐的事,但是制作完之后会有很大的成就感,而且在成功制作完一个rom之后,可以对android系统有一个更为直观的认识。

 

 

 

*

+
跳转到评论