声明:网上的中文教程很多但是不完整(无图无真相嘛。。),所以博主完整地翻译了XDA上的一篇文章。

谢绝搬运,谢谢。

博主是这方面初学者,若有什么地方翻译不正确请指正。

原文指出只适用于移植armv6设备的rom到armv7设备上边,不能反过来移植armv7设备的rom到armv6设备上。但是博主的理解是同cpu的可以不用太在意这句话。

准备工作

1、你需要一个底包(以下简称Base Rom,你手机刷了能正常运行的Rom),国内的脑残搬运教程都说要系统版本对应(和将要移植到你手机(设备)上的rom包的系统版本要一样),这个不一定的,当然,你什么都不会的话最好系统版本对应,而且选择纯净CM作为底包移植成功的几率比较大

2、光有底包课不够,还需要一个将要移植到你手机(设备)上的rom包(被移植包,以下简称Port Rom)

3、修改工具。

Winrar, Notepad++(或者你喜欢的文本编辑工具,不要用Windows系统默认记事本)

移植教程

1、先用Winrar将两个Rom包解压。

port_a_rom_simpliest_01

2、删除Base Rom的System文件夹里的appframeworkmedia这几个文件夹。

注意:移植已于Kitkat(4.4)的Rom的时候你还要删除priv-app这个文件夹。

port_a_rom_simpliest_02

3、将Port Rom的System文件夹里的appframeworkmedia这几个文件夹复制到Base Rom中。

port_a_rom_simpliest_03

4、然后在资源管理器中分别打开Base RomPort Rometc文件夹。

port_a_rom_simpliest_04

然后将Port Rometc\permissions中所有文件复制到Base Rom的相应文件夹中。

port_a_rom_simpliest_05

接着就是处理etc/init.d中的文件。将Base Rombanner以外的文件删掉,然后将Port Rom中除banner以外的文件复制过去。

port_a_rom_simpliest_06

5、接着要改造build.prop

打开Base Rom中的build.prop,将以下参数修改成你喜欢的。这个就不截图了。

ro.build.id=
ro.build.display.id=
ro.build.date=
ro.modversion=

接着将以下参数改成和Port Rombuild.prop中的一样

ro.config.ringtone=
ro.config.notification_sound=
ro.config.alarm_alert=

port_a_rom_simpliest_07

如果Port Rombuild.prop的ADDITIONAL BUILD PROPERTIES配置段有类似图中的相关代码(图中高亮),也要复制到Base Rombuild.prop中。

port_a_rom_simpliest_08

6、修改刷机脚本。

Port Rom的刷机脚本(位于META-INF/com/google/android/updater-script)中的设置权限set_perm*的段落复制到Base Rom中替换Base Rom中的相应条目。

port_a_rom_simpliest_09

7、如果Port Romsystem目录中还有其他多出来的目录也要一并拷贝到Base Romsystem目录当中。

8、接着就是打包成卡刷包。线刷包不在本文的讨论范围。

port_a_rom_simpliest_10

对于移植MIUI附言(翻译可能有误)

1、将Port Rom中的telocation.dbyellowpage.db(都位于/system/etc)复制到Base Rom的相应位置。

2、将Port Rom中的content-types.properties(位于/system/lib)复制到Base Rom的相应位置。

3、将Port Rom中的invoke-as(位于/system/xbin)复制到Base Rom的相应位置,同事增加一句赋予权限的命令道刷价脚本:set_perm(0, 0, 06755, "/system/xbin/invoke-as");(针对MIUI4)。

4、将Port Rom中的liblbesec.so(位于/system/lib,有了这个才能正常开启Root)然后在updater-script添加一句设定权限的

set_perm(0, 0, 0755, "/system/lib/liblbesec.so");

5、修改build.prop的相关选项

ro.build.id=MIUI
ro.build.display.id=MIUI
ro.build.version.incremental=2.x.x (version number)

ro.config.ringtone=MI.ogg
ro.config.notification_sound=FadeIn.ogg
ro.config.alarm_alert=GoodMorning.ogg
ro.config.sms_received_sound=FadeIn.ogg
ro.config.sms_delivered_sound=MessageComplete.ogg

对于移植ParanoidAndroid和PAC的附言

1、将Port Rom中的paranoid文件夹(位于/system/etc)复制到Base Rom的相应位置。

2、然后修改刷机脚本,增加一句用于配制权限的命令。

set_perm(1000, 1000, 0644, "/system/etc/paranoid/properties.conf");

针对PA的修改

用Notepad++打开Port Rombuild.prop,将ADDITIONAL BUILD PROPERTIES配置段的相关配置行复制到Base Rombuild.prop的相应位置。

#Depends on Resolution Of your device can be pa_hdpi/pa_mdpi/pa_xhdpi. Change it according to your device.
ro.pa.family=pa_mdpi
#Depend on pa version. Replace x.xx with the version of PA you are porting.
ro.pa.version=x.xx

port_a_rom_simpliest_11

针对PAC Rom的特定修改

和上面一样,相关配置段如下。

#Replace the x.x.x with your PAC Rom version
ro.pac.version=x.x.x
#Customize these lines according to your wish.
ro.pacrom.version=mesona_PAC_jb-alpha-v19.0.0
ro.modversion=mesona_PAC_jb-alpha-v19.0.0
#Depends on Resolution Of your device can be pa_hdpi/pa_mdpi/pa_xhdpi. Change it according to your device.
ro.pa.family=pa_mdpi
#Depend on pa version. Replace x.xx with the version of PA you are porting.
ro.pa.version=x.xx
#Modify this line according to your AOKP version
ro.aokp.version=mesona_jb-Milestone-1
#Modify it according to your base ROM's build.prop
ro.cm.version=xxxxxxxxxxxx

针对HTC手机的特殊修改

1、修复自动搜索网络。

  1. 反汇编framework-res.apk
  2. 打开\framework-res\res\values\books.xml,将<bool name="skip_restoring_worK_selection">true</bool>中的true修改成false

2、修复显示问题

  1. 反汇编framework.jar
  2. 将以下文件替换成原生(不是Base Rom,是官方包)的framework.jar中的相应文件。
    • smali\smali\android\os
    • Environment
    • SystemProperties
    • smali\smali\android\view
    • HardwareCanvas
    • HardwareRenderer$Gl20Renderer
    • HardwareRenderer$GlRenderer
    • HardwareRenderer

处理BOOTLOOP(无限重启?)

将以下文件从Port Rom复制到Base Rom的相应位置

  • libandroid_runtime.so
  • libandroid_servers.so
  • libmedia_jni.so

原文有这么一句话:

IF YOUR BASE ROM HAS ISSUES LIKE CAMERA ISSUE THAN YOUR PORTED ROM TOO WILL HAVE ISSUES.

意思是移植的Rom会继承Base Rom的Bug

如果你需要一键移植,请查看[TOOL] Rom Porter 或者[Tool] ROM Porter

本文由逗妇乳翻译,盗版必究

Rom调试之日志记录(LOGCAT)

有两种记录日志的方法

  • 记录到手机上(例如你手机正在booting,即启动虚拟机的时候)
  • 通过adb(处理bootloop)

记录到手机上

有两种方法将日志记录到手机上

  1. 通过app: aLogcat 或者 Catlog
  2. 通过终端模拟器(参考通过adb记录日志)

关于如何让PC能记录手机的运行日志/HOW TO MAKE PC READY FOR LOGCAT?

For Windows

1、先下载ANDROID SDK(传送通道)直接安装或者解压到你喜欢的目录。

2、同时还要安装配置Java JDK

本教程中假设根目录为C:,ANDROID SDK的主要目录为Android

在资源管理器中打开Android SDK的安装目录,并且双击打开SDK Manager.exe

勾上Android SDK ToolsAndroid SDK Platform-tools

然后将你的手机连接到电脑(必须确保启用了USB调试模式)

接着在资源管理器中打开C:/Android/android-sdk/

对着文件夹platform-tools按下shift+鼠标右键,然后点击在此处打开命令窗口。

port_a_rom_simpliest_14

For Linux

注意:如果你使用的是64位的Linux系统,你则需要下载相关的32位的库文件。

1、开始之前先更新一下系统(以Ubuntu为例

sudo apt-get install ia32-libs

2、然后就是确认是否安装了Android SDK(传送门)和Java JDK

安装Java JDK的命令如下:

sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-jre sun-java6-plugin

OR

$ sudo add-apt-repository ppa:sun-java-community-team/sun-java6
$ sudo apt-get update
$ sudo apt-get install sun-java6-jre sun-java6-bin sun-java6-jdk

或者你可以很简单地装上这两个东西(感谢@Androguide.fr)

sudo add-apt-repository ppa:phablet-team/tools
sudo apt-get install android-tools-adb

3、接着安装fastboot

sudo apt-get install android-tools-fastboot

接下来的指令要看仔细了

4、新建文件夹

cd ~
mkdir android

mkdir –p android/sdk

5、解压下载好的JDK

tar -zxvf ~/Downloads/android-sdk_r21.0.1-linux.tgz

6、然后将SDK的文件件移动到刚才新建的文件夹里边

mv android-sdk-linux ~/android/sdk

7、然后通过以下命令运行android sdk manager

android/sdk/tools/android

本文由逗妇乳翻译,盗版必究

待更新