Ryan

最简单的安卓Rom移植:正向移植
声明:网上的中文教程很多但是不完整(无图无真相嘛。。),所以博主完整地翻译了XDA上的一篇文章。谢绝搬运,谢谢。博...
扫描右侧二维码阅读全文
10
2014/05

最简单的安卓Rom移植:正向移植

声明:网上的中文教程很多但是不完整(无图无真相嘛。。),所以博主完整地翻译了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

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

待更新

搬瓦工年付$187机房套餐补货了,电信联通优化,512M内存/500G流量/1G带宽,建站稳定,优惠码:BWH1ZBPVK,【点击购买】!
搬瓦工年付$28CN2高速线路,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快,建站稳定,优惠码同上,【点击购买】!
Last modification:March 16th, 2016 at 05:11 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

36 comments

  1. 滑稽蛤

    博文不错。。支持。。有空也学样,自己搞个rom玩玩……

  2. wwng

    挺萌的
    :twisted:

  3. 烂番茄

    不错的哈。很是刁爆!!

  4. 进击的小浩

    路过即是友,打酱油也要来留个评论,嘿嘿,看能不能做到4.4的Rom以4.2做底包

    1. Ryan
      @进击的小浩

      要把驱动拖进IDA修改

  5. 动漫那点事

    都是高手哈

  6. Less

    怎么总感觉会出很多小问题。。。 :-?

    1. Ryan
      @Less

      嗯。。

  7. 微历史

    技术大拿啊

    1. Ryan
      @微历史

      毛线,这是应别人要求翻译的,我也不懂啥

  8. 小清新头像吧

    嘿嘿,关注下了。。

  9. Pete

    那侧向移植是啥 ==

    1. Ryan
      @Pete

      反向,不是侧向,将原机的驱动和核心文件搞到Port包里

  10. 动漫那点事

    博主又好久没更新了吧,赶紧回来更新哈

  11. 看下,没用安卓

  12. 动漫情报

    这些好像看不了,没达到这个知识水平

  13. 南国羽

    已经用到Ubuntu了,还不如直接用源码适配。miui的patchrom,深度的deep都有分支,直接下下来用。只要不怕慢,适配比移植稳定多了。

    1. Ryan
      @南国羽

      你文章怎么挂了?

    2. Ryan
      @南国羽

      移植小白可玩 :mrgreen:

  14. 小菜

    支持个,移植还是不太会,移植包容易出现BUG,还有屏幕分辨率不同移植会很麻烦

    1. Ryan
      @小菜

      有些rom的确会这样,没有相关分辨率的资源

  15. 免费资源部落

    移植的是不是不稳定?

    1. Ryan
      @免费资源部落

      看移植的人的技术

  16. Jason

    怎么突然搞起刷机包了?

    1. Ryan
      @Jason

      只是朋友要求我翻译一下

  17. MaxPower

    路过,支持了。。

  18. Hintay

    其实就是把ROM的framwork下的apk以及一部分jar和app下的全覆盖底包再调试就好了
    armv6和armv7就是低端机和高端机。。。低端的能移植到高端的,高端的不能到低端的。还有不要移植不同分辨率的就好了 :twisted:

  19. 史达林

    yellowpage.db?有点意思 :-P

    1. Ryan
      @史达林

      yellowpage是黄页的意思,请勿想歪(黄页,起源于北美洲,1880年世界上第一本黄页电话号簿在美国问世,至今已有100多年的历史。黄页是国际通用按企业性质和产品类别编排的工商企业电话号码簿,以刊登企业名称、地址、电话号码为主体内容,相当于一个城市或地区的工商企业的户口本,国际惯例用黄色纸张印制,故称黄页。)

      1. 史达林
        @Ryan

        我知道黄页,但是不知道黄页的英文是yellowpage

  20. 陌羽

    第一幅图中“被”写错了。。。我今天才知道万网域名是www.net.cn而不是net.cn :cry: :cry: :cry:

    1. Ryan
      @陌羽

      谢谢提醒,早就知道是www.net.cn了net.cn是cnnic的sld

  21. 动漫那点事

    博主的第一张图....

    1. Ryan
      @动漫那点事

      :arrow: 咋了?

  22. 无纯洁

    (膜拜)(膜拜)(膜拜)

    1. Ryan
      @无纯洁

      (抠鼻)(抠鼻)(抠鼻)