这问题实在太大了,就标题提出的问题泛泛而谈吧。总的来说,ROM 移植通常首先要看设备硬件的相似度;其次是计划要移植哪些部分;最后就是要有一颗机不变砖誓不休的决心。
不建议移植的几种情况:不同厂商
不同主板
隔代设备
与以上相反的情况皆可一试,可以通过掷骰子估计成功率。针对题主的具体问题,我想说大概没有人会移植 Nexus 系列的手机系统,因为系统就是 AOSP + Gapps 嘛,前者源代码是公开的,直接编译就行,要什么移植...
既然要移植,也就意味着你不想从源代码编译,你手头只有移植源的 ROM 文件以及移植目标的内核源代码(MIUI 及寨厂设备除外)。ROM
一般由内核与系统镜像组成。移植内核需要花费大量的时间,并且不是懂 Java 就能搞定的,必须精通 C
并了解内核驱动的实现。所以如无必要,请直接采用官方内核。我所知道的社区内核移植,通常是将 OEM
发布的硬件驱动移植到新版本的内核中去。如果有现成的相同或相近设备的内核源代码,你会有种买彩票中奖的感觉。移植的重点在于内核基址的修改,CPU
频率的调整,主板资源的配置(内存池、显示设备、摄像头、传感器、闪灯等)以及各附属硬件的驱动等。内核的基础部分(文件系统,android
相关驱动等)都是通用的,不需要太多修改。如果你想挑战自我且不畏失败,那就给自己一次挑战内核的机会。:P
内核镜像除了内核本身外还有 init 的启动文件,即 ramdisk(boot.img 中)。如果要移植,那这个包中的文件你必须仔细阅读并修改。否则在 adb 启动之前你很难知道系统卡屏错误出自哪里。
好了,如果你直接使用官方或第三方内核,系统镜像移植中需要注意的是与硬件相关的部分。这部分一般包括
HAL(camera/sensor/light/hwcomposer/power 等)与私有驱动库(vendor 与 EGL 中的所有私有驱动及 OMX
驱动库),它们与内核是配套使用的。另外就是应用程序所依赖的 frameworks 中修改。这部分需要对反编译 jar/apk
程序有所了解,通常会有教程之类(比较烦琐)。你不必客气,如狼似虎地学习吧,少年!具体修改因 ROM 而异。最后再确认下 root 权限,/system/build.prop
小修小补,再换个开机动画调个铃声加个个性签名之类,不在话下。
综上,希望你能如愿以偿地卡在开机第一屏。Lol