吾爱浩浩 发表于 2014-5-1 11:26

【经验技巧】任意手机移植ROM 教程,超详细ROM 技术详细...


==========================================$ [) p* ^0 y) V! w" A& P) g7 G* @
相信有过刷机经历的都知道安卓系统的构造% Y3 l' Z- f7 W! {& U9 u
) t4 n. u' E&
这张图就清晰地为我们讲述了安卓的几大组成:' z# }" |' O* P" B3 z
从内核基于linux开始+ N- u) e7 T& i# F$ M

整个系统就运行在一个虚拟机上,这是安卓的一大特征!!

那么我们移植的时候要修改哪一部分?

这就是我们这个帖子的重点了
====================================================================& w! u+ U0 F9

在刷机时,我们大多使用zip格式的升级包进行刷机

那zip格式的升级包是怎么样的一个组成呢?

如图:这是一个zip升级包的完整构造

其中我们要移植所需要修改的就是META-INF里的刷机脚本* G# L4 @6 X3 v& @! j) h9 h2 z# A+ i5 J8 X9 x4 L

对于这个构造,又有必要完整的再解释一次

META-INF: ^& K8 X0 g3 C! X. \( u) c6 |% }

这里面主要是签名文名和刷机时执行的脚本(updater-

script),移植时,我们主要要更改的就是刷机的脚本。
" I1 t8 W4 c5 R: E, e- G. HX% A
system, TI! N6 l7 c8 J7 i1 e5 S+ O

这里面就是android的系统部分) n# B; Z6 K8 s. V/ w2 Z


app

这里存放的是系统的app,每个app都有两个文件,一个*.apk,

一个*.odex,我们在移植时,要将这个文件合并到对应的*.apk

里面去,apk文件其实就是一个zip文件,可以用WinRAR或7zip打

开的,当然,合并odex文件不是把它改名直接放到apk里去这么

简单的,后面具体介绍一下。还有,这个文件夹里面的程序,刷

完以后是不能通过程序管理来卸载的。
, p% g- g6 T+ r# `: \# @
bin

这里面存放的是native程序,不好意思,一下子忘掉中文怎么说

了。简单来说,apk是JAVA程序,而这个是C/C++的程序。

etc

这里面存放的是系统默认的配置文件,GPS的配置也在这里J。

fonts

这个是字体文件夹,一般很少改动, 除非要做美化
7 O* X! a- E1 o2 Z, [
framework0 pW7 G:

这里存放的是android框架,移植MIUI,很多改动在这个文件夹

里,美化ROM的话, 主要改framework-res.apk就可以了。当

然,MIUI本身就有主题机制了,不用这么麻烦去改。这个文件夹

里也会有对应的odex文件。: n* W' a9 z/ |, |

lib/ B3 d' n2 _8 c' b

一些通过的类库,一般是由app/bin里面的程序调用的。
7 y3 l3 jB6 Y, ^9 C/ Q9 g
media^* R9 W; ]; ]& z1 p

媒体文件,要添加系统默认的铃声就在这里了。如果是别的ROM

的话, 壁纸也会放在这里面。

usr

这个文件夹我不知道如何解释,移植时,键盘布局文件就在这里

面& n/ Z( i7 G% ~+ R- L
) V. u: m4 |0 `) R4 D( v5 Y
xbin8 {$ ^?; o9 W. s. z

扩展命令文件夹,一般不动它,有一些ROM可能直接用busybox来

替代了。/ r1 ~0 D; j0 d1 `9 ^

1.build.prop4 }" h- `5 _w0 d

这个文件也类似于一个配置文件,它主是描述了这个ROM的版

本,对应的机型名称,还会有部分的硬件配置,移植的时候我们

也会要修改这个文件。
8 e4 j( m2 ^) Q* ~3 {1 `
2.boot.img. p* i- ]. ?- l
$ c' m" w# S! o6 b9 i" _- I6 W
系统核心,其实就是Linux内核部分,这个img也是可以解开来定

制的,但我没有试过。如果你喜欢新的核心的话,可以将这个文

件替换,不过要兼容才行。


============================================================================================
) e3 Z/ G( y, f
因为不同的机子有不同配置

接下来就以当下最火的小米移植为例子

为大家讲述如何移植小米(以下例子参考隔壁网站,在这里感

谢”潇琪“)
8 s! v?! \7 R2 C* r2 t8 E
1 g2 t4 R0 u- J% r2 }1 x4 _
移植步骤:& W4 Z+ E5 e) G3 w8 {& Q; S, B

下载完ROM以后,用解压工具解压到一个目录,先将odex合并到

apk文件中去,这里要用到工具,有两个工具可以用:

工具名称:xUltimate & [# I1 @8 ^" H

自己百度下$ t8 r. k+ k& R" G' F

合并的方法比较简单,以xUltimate为例,将app里面的所有文件

拷到origi_app里面,将framework里面的所有文件拷到

origi_frame里面,再运行程序,再过几个选项就可以进行转换

了,转换好会放到另一个文件夹里面,把原来的文件删掉,把生

成的放回去就可以了。如果转换过程中失败了,应该是JAVA的版

本低了,升级到最新的JRE试一下。9 v$ f( }- F* F9 t8 j

如果用Droid

Builder合并的话,稍微简单一点,选择ROM的文件夹,点Deodex

就可以进行合并了。
9 Q0 h" u+ s0 M$ n
删除APP2SD相关的文件,这好像成了传统,从n_i_x开始移植

MIUI开始,一直都这样,我也没试过保留这个会怎么样。要删除

的文件是固定的,大家可以用下面这个脚本:
' p8 g7 j1 e' @! d# L" C
del bin\a2sd /s /q
del bin\apps2sd /s /q" ?1 X8 H' x# b& i6 I
del
bin\apps2sd.hlp /s /q
del bin\boota2sd /s /q8 p4 F6 ~: P* x& {1 R7 c
del bin\busybox.a2sd /s . v/ f* o7 s6 F" X) p" s7 T/ b~2 z- g
/q
del bin\chka2sd /s /q
del bin\fixa2sd /s /q
del bin\jita2sd /s
/q2 B, ^' p* _5 u: ]) I& n
del bin\launcha2sd /s /q G6 ht" a1 p+ l3 V
del bin\starta2sd /s /q

del
etc\init.d\04apps2sd /s /q
del xbin\a2sd /s /q
del xbin\apps2sd /s ! ^- b, _& `$ m

大家要注意的是APP2SD和A2SD+是两个概念,大家可以自己去搜

一下,如果大家有兴趣,可以研究一下Incredible的A2SD+和

DATA2SD+,这样可以提高I/O速度。
" Z% h( E7 O* `2 |+ K( g# \
替换Incredible专用的文件,一般我们下载的MIUI
ROM都是Desire或N1的,我们下载了以后,要先把Incredible专

用的文件替换进去:boot.img $ G3 f% a) W, Z& S$ }

这个前面介绍过了。这个可以自己下载CyanogenMod的

Incredible

ROM中提取。也可以到XDA上面下载新的AOSP核心。6 o$ \; W) P( H5 W# u( S( ^8 A
bin/vold

这个文件是解决内部存储(EMMC)的一部分,Incredible的内存

分成了几个分区,前面两个是data和cache,第三个就是EMMC,

早期的vold代码在挂载一个挂载点的时候,是以磁盘为单位的,

而不是以分区为单位,CM最新的代码解决了这个问题,

大家自己编译或从新的ROM里拿就可以了。- cI1 r5 u: d

etc/firmware
0 r1 X; Hx0 D0 U5 d/ q0 p: {' [
这整个文件夹都可以替换掉(注意,是etc下面的firmware)

etc/AdieHWCodecSetting.csv

这个要加进去,音频解码相关

etc/agps_rm * k& L9 n; D. \1 S$ SV

这个可以不用加,空文件,不知道有何用。为何险,可以加一

下。% O& V8 ~+ G5 N4 O$ \7 b

etc/AudioBTID.csv
: U1 a/ k; Q+ I! O3 \6 G5 c- |
音频相关,替换掉( {# V/ u2 m: {7 c. @( l& \, y; m# C- j# l

etc/gps.conf 7 i1 Y4 @/ x0 a8 ^2 S$ P4 p" M
. I2 h2 ^! p$ }( f: l* ?: S
GPS的配置,可以自己去搜一下,了解如何改后,可以自己动手

改一下。

etc/TPA2018.csv

加进去,不知道何用。' H0 p2 k/ N$ G' @, ~

etc/vold.fstab

分区表,必须替换,解决EMMC的另一步, 之后还有一步

lib/hw/lights.inc.so, lib/hw/sensors.inc.so * P( Y, L4 t3 J+ P( o

删掉lights.bravo.so和sensors.bravo.so替换成这两个。

lib/modules/bcm4329.ko

WIFI驱动,替换掉。( Y$ ]" r4 f9 c, P+ o* j& C6 G4 r

lib/liblog.so ( L! B. H6 |. [. R. l1 _4 z

打LOG用的,替换掉,不然,出错了,没法查LOG,不看LOG的同

学可以不用换。

usr/keychars/incrediblec-keypad.kcm.bin 2 \# @3 g& q^3 {' u6 S) z

删掉bravo-keypad.kcm.bin,替换成这个。这是个二进制文件,

虽然我每次都替换了,但我从LOG来分析,这个文件一直没起到

作用,我看了很多Incredible的ROM,也包括官方的,这个文件

一直没变过,真是奇怪。

usr/keylayout/incrediblec-keypad.kl
/ ^1 A1 I! m) I6 C: a. D
删掉bravo-keypad.kl,替换成这个。这个是Incredible的键盘

布局配置。
$ e) W( u- G. O! O
到此为止,简单的工作都做完了。下面要开始修改文件了。; h( j+ h; O* a8 L" r/ K1 k
修改刷机脚本 * ^5 }. n4 KZ# G% ?( @* v. e" b

这个比较简单,一般只要修改前面几行,把条件改一下,再加一

段欢迎词,请对照我提供的文件进行修改。

修改build.prop

请对照我提供的文件进行修改,请注意一下,里面所有ro.cdma

的都是需要的,有一行:1 uy) d; V: A& W8 H7 w4 TN, o

ro.cdma.home.operator.alpha=中国电信

有些编辑器可能会显示成乱码,如果不行,用记事本修改好了。

还有内部存储相关的两条配置也别忘了:) T* X/ V+ T& u% V- n
ro.phone_storage =
1" L* b2 J5 `: ]# X5 ~
ro.additionalmounts=/mnt/emmc0 |. t8 Z% M6 Z' W6 |, W

做完了以上的步骤,Incredible的移植算完成了大部分了,已经

可以做成刷机包试一下了,但还有几个问题没有解决:

内部存储EMMC支持还差一步通知栏上面不会显示中国电信,还会

显示漫游图标图库和音乐播放器不支持内部存储8 y' f- F& C$ f% a, O) N0 K$ P1 O
/ {# |' f' u+ k
这几个问题不能光靠替换文件来完成,需要多做一些事情。我们

要使用几个工具来帮助我们来解决这几个问题。. H) v6 ^. y. `$ L
解决内部存储问题 2 h; D7 m, I) G( m% _5 t# i
) z7 S- s3 W9 c2 t# E* l% Z
大家都知道,MIUI基于早期的CM,MountService这个类不支持

Incredible的内部存储,我们要替换成CM的MountService代码,

因为代码都已经编译了,所以,我们要先进行反编译。要用到

baksmali工具,可以用我附件提供的工具包中的脚本。

先用解压工具打开framework/services.jar,不用解压,直接将

classes.dex拖到工具包的文件夹中再拖动classes.dex到"解包

dex.bat"上面,过一会儿,就会生成一个out文件夹将out文件夹

重命名,随便啥名都可以,比如services.miui用解压工具打开

我之前ROM里面services.jar,也用同样的方法解包dex同样将

out文件夹重命名,比如services.cm打开

services.cm/smali/com/android/server,在这个文件夹里面找

到所有以MountService开头的文件,拷贝并替换services.miui

里面相应的文件完成替换后,将services.miui拖动到"打包

dex.bat"上面,会生成一个out.dex的文件将out.dex重命名成

classes.dex,直接替换framework/services.jar里面的文件就

可以了,不用重新签名这样,MountService的替换就完成了

这个问题比较好解决,用解压工具打开我的ROM里面的

framework/framework-res.apk,找到res/xml/eri.xml文件,替

换掉MIUI里面的就可以了。也不用重新签名。5 k: E/ j4 u6 ^: o

eri.xml文件是经过加密的。原文是:

<?xml version="1.0" encoding="UTF-8"?>
<EriFile
VersionNumber="1357" NumberOfEriEntries="1" u$ r8 ]& V4 A* f
EriFileType="1">+ z) g# F- m- y$ h8 w
<CallPromptId Id="0" CallPromptText="CallPromptId0" + V, K( F2 i: R# Z
/>3 w9 [" k) X3 z! b7 t! \, I9 Z
<CallPromptId Id="1" CallPromptText="CallPromptId1"
/>
<CallPromptId Id="2" CallPromptText="CallPromptId2"
/>
<EriInfo RoamingIndicator="128" IconIndex="1" IconMode="0" ! H- b% U& Z2 T$ L9 A0 B
EriText="中国电信" CallPromptId="0" AlertId="0" , t3 q. O) Q' E/ |
/>- g2 w) N6 z# b& x1 z9 T
</EriFile>

解决图库和音乐对内部存储的支持 % |6 b$ b; q7 V+ R
0 ^" z4 b) M: z" X
跟解决MountService的方法类似,要替换

app/MediaProvider.apk里面的MediaScannerReceiver和

MediaScannerService开头的文件,这个可以用我或者是CM里面

的替换都可以。更简单的方法,直接替换MediaProvider.apk文

件也是可以的。因为最近这个apk好像都没有改动。

8 a) A3 m) c1 ]8 |
$ k8 `! D3 ^! O' c* z
这样,我们的移植就算完成了,接下来就是生成ROM了,我们用

压缩工具将ROM打包成zip格式,注意目录结构,生成的zip根目

录就有MATE-INF和system,别搞错了。将打包好的zip文件拷到

工具包当中,改成update.zip,再双击sign.bat进行签名,签名

后就生成了update_signed.zip了。

移植MIUI基本都是大同小异。8 H& d5 F0 z7 s. t$ M" P. Y; ?

把签名后的ROM拷到卡上刷机吧*


写帖不易,希望大家多多评分


{:301_993:}{:301_993:} {:301_993:} {:301_993:} {:301_993:} {:301_993:} {:301_993:} {:301_993:} {:301_993:}


KingKobra 发表于 2014-5-1 11:59

话说楼主你的图呢?帖子中很多提到“如图所示”,可我就是没看到图~

jojaajj 发表于 2014-5-1 11:29

不是一个基带和内核的,也能相互移植??

bresan 发表于 2015-2-2 12:02

这个值得学习!





神奇的:Mozilla/5.0 (Windows NT 5.1; rv:34.0) Gecko/20100101 Firefox/34.0(zh-CN)
——火狐范-火狐扩展、主题、插件、教程、油猴、UC脚本、样式、番茄资源
——UserScripts 火狐范镜像(只显中文) - FreesSyler.WS 火狐范镜像
——一键加入火狐千人交流群:8724552         

jacz 发表于 2014-5-1 11:29

... 牛贴.   写的非常详细``

瓜子吧3 发表于 2014-5-1 11:45

判断,转贴。学习了。

736110667 发表于 2014-5-1 11:50

转帖技术真垃圾一张图都没有!

神经兮兮 发表于 2014-5-1 11:52

固件不一样 内核不一样 基带不一样 系统不一样    大家刷成砖头 让楼主赔

star0angel 发表于 2014-5-1 12:00

额 手机内存太小 刷机没意义

xhz0916888 发表于 2014-5-1 12:02

我怎么看不到图片呢         

zuanqi7 发表于 2014-5-1 12:29

页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【经验技巧】任意手机移植ROM 教程,超详细ROM 技术详细...