ROM定制中的“设置”定制方法
查看( 415 ) /
评论( 4 )
定制“设置”功能挺复杂,以前定制ROM时在大量查阅高手们编写的教程,感觉异常复杂,可现在定制“设置”功能才发现原来定制ROM很简单,定制“设置”更为复杂。我没学过C++,2年前学的数据库早就忘了,上Visual Basic课通常都在睡觉或玩手机的,于是便只靠自己琢磨,通过大量参考、对比了好一段时间才了解了“设置”的粗略结构。定制“设置”时只要按部就班、胆大心细便不会出错。
W_&p/@M4\0(一)分类及对应关系。灵机网(hnB-f2@f*a7c
好了,先了解一下“设置”及其对应文件的分类,这样方便我们找出对应关系并作相应的修改。灵机网0S&i1k6ZE"@
“设置”分为选择页、选择项、执行页、执行项以及最终目标文件(即注册表及相关键值)。它们的定义是:只有选择项没有执行项的页面即为选择页;只有执行项没有选择项的页面即为执行页;只起引导页面作用,不能更改系统设置的项即为选择项;能够更改系统设置,不能引导页面的项即为执行项。这里的名称只是我为了方便称呼起的,不是官方标准术语。以图来了解直观点:灵机网 z m8TdS9E
灵机网$@/JB[b'Q O"`L
在“设置”中,每一个选择页对应一个cpl.xml文件,每一个选择项对应cpl.xml文件中的一段代码,呈一一对应的关系。为了方便,我再将cpl.xml文件分成连接文件、连接代码、目标文件、目标代码以及最终执行文件(即mxip_cold_OEMDRIVERS_100.provxml文件及相应代码段),均与“设置”的分类按顺序一一对应。上图:灵机网u$r+r'w@QR
iOW)p%t7L9Rvej0
,|%B,eHc;v@@:M1W0这是和上面那张截图是对应的,概括起来:进入“设置”后选择页对应的是“rootgsm.cpl.xml”连接文件,页面中的“4 主屏幕”选择项对应“rootgsm.cpl.xml”文件中的第4段连接代码:“<cpl-link href="home.cpl.xml" res="30018"/>”,选择“主屏幕”选项,进入执行页,便对应“home.cpl.xml”目标文件,执行项对应目标代码段,同理,接下来最终目标文件中的注册表键值便对应“mxip_cold_OEMDRIVERS_100.provxml”文件中的最终执行代码段了。于是可得出cpl.xml文件“设置”中的第一个作用:为选择项提供连接,指明连接文件或目标文件。
GT;x0c&eA7Z0cpl.xml文件的大概结构如下图:灵机网,}#]xH;q2W
"? S)Z4l8g@(p0那怎么知道哪个选择项对应哪一段代码呢,这就简单了,例如“主屏幕”在选择页中排第4,那么就是对应连接文件中顺序数下来第4段代码。这种方法方便快速,对于一般的修改已经是足够了(但是它不尽准确,有些特别的连接文件并不如此控制选择项的排列顺序)。于是可以得出cpl.xml文件在“设置”中的第二个作用便是对选择项的顺序进行排列。灵机网uI-k7R}0Gb
在对应关系中,系统有2项关系是强制对应的,一是“设置”的初始选择页必须对应“rootgsm.cpl.xml”文件,二是最终目标应用必须对应“mxip_cold_OEMDRIVERS_100.provxml”文件,强制对应的意思不是说不能更改文件里面的内容,而是文件名称不能更改,即为静态对应。除此两个文件外的所有cpl.xml文件都可以改名,则其他的选择项都是动态对应,只要连接代码中指向的连接文件存在并有效就行了。举个例子,我们知道了“主屏幕”选择项对应的是rootgsm.cpl.xml中的<cpl-link href="home.cpl.xml" res="30018"/>是不是,它的意思就是当你选定了“主屏幕”选项之后系统就会打开home.cpl.xml文件,那我把<cpl-link href="home.cpl.xml" res="30018"/>代码改成<cpl-link href="home123.cpl.xml" res="30018"/>,再将 “home.cpl.xml”文件改名为“home123.cpl.xml”就可以了,于是连接项目发生了变化,重新指定了连接文件为“home123.cpl.xml”,但是手机上会发生什么变化呢,没有变化!效果是一样的。
:J w z*d%r[6{0(二)删除项。
B `bxm?2X0了解了一一对应关系,我们便可以对“设置”进行修改了,从最简单的删除开始。灵机网&yz*m ek#d
1. 删除选择项。
"{*Vo]CB@0例如你觉得“STK服务”这个选择项太鸡肋,自己根本不用STK功能或不需要选择它的关闭和开启,应该删掉。那么就先找出它的路径:“设置-电话-STK服务”(系统不同则路径不同),灵机网8M^8ZLsDYQ&p
灵机网'F\6L$Yn
然后再找以上路径对应的连接文件:“rootgsm.cpl.xml-telephonygsm.cpl.xml”(系统不同则对应的连接文件不同),
xlTb${[9h0
e7_G7SR:~{n0哈哈,找到了,只要将上图中框框里面的段码段删除,即将
Ac-K0j{U{0<cpl-link href="stk_service.cpl.xml">灵机网U7R&_{/A
<title lang="0x0804">STK 服务</title>
A\9S[2V0</cpl-link>
2cs:Y,E)rS(u0删掉就完事了,这样“设置-电话”中便不会有“STK服务”这个选择项了。因为没有了“STK服务”选择项,那么其对应的连接文件即stk_service.cpl.xml文件也不需要了,在mxip_cold_OEMDRIVERS_100.provxml文件中有关“STK服务”的最终执行代码段也不需要了,都可以找出来并删除掉。当然你也可以不删除,完全不影响操作,只是多了个无效文件及一些无效代码段,有悖ROM定制的精简原则而已。灵机网 o {"o6Qw}
2. 删除执行项。
i7|ateTB;n%L0例如删除“启用动态窗口”这个执行项。操作步骤和上面一样,找出路径;“设置-主屏幕-启用动态窗口” (系统不同则路径不同),灵机网K#Vvh,cb
/Y[e%mc0按部就班,再找以上路径对应的连接文件:“rootgsm.cpl.xml-home.cpl.xml”,“启用动态窗口”在执行页中顺序为从上到下排在第6,那么它在home.cpl.xml目标文件中就对应从上到下第6段目标代码。或者,你看到代码中哪段含有“Animate”字符的,那就是它了。灵机网j?c:lQ%?;[
灵机网.~I:?8E]-x9jm;B
同样将上图中框框里面的段码段删除,即将
4Y7r4k,eFb A0 <characteristic type="HKLM\System\GWE">
Z+Q&R R.V#iJ0Py0 <parm-query name="Animate"/>
Kl*_*p$L/{!C6d0 </characteristic>
*Q9f;~ \QG'S1op0删掉就完事了。这样就把“启用动态窗口”这个执行项删除了,后面接着是删除在mxip_cold_OEMDRIVERS_100.provxml文件中有关“启用动态窗口”的最终执行代码段,这个就删不删由你了。
/qybU1W&Yy0删除教程完了。
cj~@%S-BFj0至于删除选择页和执行页,其实在删除选择项中不就等同于把选择页或执行页删除了吗。例如当你删除了“STK服务”选择项,不就是等同于把此选择项引导下的页删掉了嘛,选项都没有了,难道还能进入去设置吗?
h FQ:Q)d h+fp8`W0(三)添加页和项灵机网{9r:m?f;M i%^ k H
理论上是先添加项后添加页,因为无论是选择页还是执行页都必须由某个项值来引导。至于想添加多少层页最终才到执行项则是由你决定。每层页都要有一个独立的cpl.xml连接文件来对应,当然分层越多,需要创建的cpl.xml文件也就越多,对应关系越长越复杂。灵机网/o:K2@8b\.Ib1qi;j x
例如,在手机中修改“色彩方案”只需要进入一层页(系统不同则页数不同):灵机网NZp"P6^p~m
Tm*F&R U1~!l%J0修改“闹钟时间”则需要进入两层页(系统不同则页数不同):灵机网O;Y,?1QWv
灵机网4z'bUh1r,]H-qx
而修改解锁屏幕时钟开关就需要进入三层页了(系统不同则页数不同):
XxT/[0L I0
'E~+Z+|u0回正题,添加项和页首先要知道需要改变的最终目标项,即注册表项及其键值,然后考虑此项是另开一层新页还是增加到已有的页中,如另开新页的话则还需考虑引导它的选择项需要增加到哪层页中。
/c8f1G*jK"c$b6p5J0还是从简单的开始:灵机网l s0bU$]|
1. 不开新页的添加。灵机网 g;zs8k?!e*]4w
例如,只增加“USB联机充电”执行项,不开新页,直接添加到“电源管理”执行页。灵机网$Mip|6f ]
灵机网p%v*?n-q
那么,先找出控制USB联机充电的注册表项,这里为:
|'t z1T'w/~T$U O{0[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\usbfndrv]灵机网'i }2xo2Bs#Y:}
"EnableUsbCharging"=dword:00000000灵机网I1ZT7Z*Fc
灵机网*W Gn/@X x4y*B
然后,找到“电源管理”执行页所对应的目标文件进行修改添加,这里为“power.cpl.xml”(系统不同则目标文件不同),增加如下目标代码段:灵机网}v6s;YM^C.qy_
<characteristic type="HKLM\Drivers\BuiltIn\usbfndrv">
:?:hK0jU ]:e0 <parm-query name="EnableUsbCharging"/>
wh/VaB0 </characteristic>灵机网R%pjpa?s
这里需要注意的是,所增加的代码段在文件中的顺序决定着执行项在页中的排列顺序,如把代码段增加在所有代码段中最后,那么执行项就会出现在页中的最低端。
{ ])b)KM&M2M;T5Ptu0灵机网] MTY YYw+P#D9Rv ?)Q
最后需要修改的便是最终执行文件了,只有它才能直接修改注册表,以达到改变系统设置的目的。打开mxip_cold_OEMDRIVERS_100.provxml文件,在文件中增加如下代码段:灵机网8Ll0LSrF`I$}u?"k
<!--====================== Animate ====================-->
^vrZw |WXV~D0 <characteristic type="Metabase">
Pm2R)O4~ Z,j\C0 <characteristic type="Registry\HKLM\System\GWE\Animate">灵机网dC1E$ZZhg
<parm name="datatype" value="boolean"/>灵机网 @a`W8[
<parm name="maxvalue" value="1" />灵机网~sew vl'U*|
<parm name="minvalue" value="0" />
%b.c^Mu|0 <parm name="rw-access" value="3" />
0Q f6W dP"ERl)|7b0 <parm name="access-role" value="190" />
k(?f[rH!{_uT6Ag0 <characteristic type="label">
3L*kjO+Q:~ b0 <parm name="0804" value="启用动态窗口"/>灵机网vjK]bD
</characteristic>
2LbF_.`-c:ax"n R0 </characteristic>
koo(Hv z?k v]0 </characteristic>灵机网p5e EM sZX
如图:灵机网;j$k}ps:hg&s6oP
R&QZA-NO'K&iP2`K8z0至于增加代码应该遵循的格式在下面会仔细讲到。灵机网S`"O!wYmS PY4t
至此,“USB联机充电”执行项已成功地添加到了“电源管理”执行页中。灵机网 urH6i/Ik^&P
2. 另开新页的添加。灵机网sq8}-vRYP&Zi[7{
例如:我要添加两个个性的执行项“纵/横导航条厚度”,并单独为它们创建一个新的执行页,此页由“导航条厚度”选择项引导,此项所在页又由新的选择项“增强功能”来引导,再并列到“设置”选择页中。如图:灵机网 b0KU9q L B a
灵机网I5i_xP)T7}
那么,先找出控制导航条厚度的相关注册表项以备用,这里为:灵机网,?P f5feMB:aV*u]
[HKEY_LOCAL_MACHINE\System\GWE]
k l zNp7Se8e0"cyHScr"=dword:00000004(横向)灵机网e^ Ei2K+{
"cxVScr"=dword:00000004(纵向)
7R3yJH)S {m_0
W_&p/@M4\0(一)分类及对应关系。灵机网(hnB-f2@f*a7c
好了,先了解一下“设置”及其对应文件的分类,这样方便我们找出对应关系并作相应的修改。灵机网0S&i1k6ZE"@
“设置”分为选择页、选择项、执行页、执行项以及最终目标文件(即注册表及相关键值)。它们的定义是:只有选择项没有执行项的页面即为选择页;只有执行项没有选择项的页面即为执行页;只起引导页面作用,不能更改系统设置的项即为选择项;能够更改系统设置,不能引导页面的项即为执行项。这里的名称只是我为了方便称呼起的,不是官方标准术语。以图来了解直观点:灵机网 z m8TdS9E
灵机网$@/JB[b'Q O"`L
在“设置”中,每一个选择页对应一个cpl.xml文件,每一个选择项对应cpl.xml文件中的一段代码,呈一一对应的关系。为了方便,我再将cpl.xml文件分成连接文件、连接代码、目标文件、目标代码以及最终执行文件(即mxip_cold_OEMDRIVERS_100.provxml文件及相应代码段),均与“设置”的分类按顺序一一对应。上图:灵机网u$r+r'w@QR
iOW)p%t7L9Rvej0
,|%B,eHc;v@@:M1W0这是和上面那张截图是对应的,概括起来:进入“设置”后选择页对应的是“rootgsm.cpl.xml”连接文件,页面中的“4 主屏幕”选择项对应“rootgsm.cpl.xml”文件中的第4段连接代码:“<cpl-link href="home.cpl.xml" res="30018"/>”,选择“主屏幕”选项,进入执行页,便对应“home.cpl.xml”目标文件,执行项对应目标代码段,同理,接下来最终目标文件中的注册表键值便对应“mxip_cold_OEMDRIVERS_100.provxml”文件中的最终执行代码段了。于是可得出cpl.xml文件“设置”中的第一个作用:为选择项提供连接,指明连接文件或目标文件。
GT;x0c&eA7Z0cpl.xml文件的大概结构如下图:灵机网,}#]xH;q2W
"? S)Z4l8g@(p0那怎么知道哪个选择项对应哪一段代码呢,这就简单了,例如“主屏幕”在选择页中排第4,那么就是对应连接文件中顺序数下来第4段代码。这种方法方便快速,对于一般的修改已经是足够了(但是它不尽准确,有些特别的连接文件并不如此控制选择项的排列顺序)。于是可以得出cpl.xml文件在“设置”中的第二个作用便是对选择项的顺序进行排列。灵机网uI-k7R}0Gb
在对应关系中,系统有2项关系是强制对应的,一是“设置”的初始选择页必须对应“rootgsm.cpl.xml”文件,二是最终目标应用必须对应“mxip_cold_OEMDRIVERS_100.provxml”文件,强制对应的意思不是说不能更改文件里面的内容,而是文件名称不能更改,即为静态对应。除此两个文件外的所有cpl.xml文件都可以改名,则其他的选择项都是动态对应,只要连接代码中指向的连接文件存在并有效就行了。举个例子,我们知道了“主屏幕”选择项对应的是rootgsm.cpl.xml中的<cpl-link href="home.cpl.xml" res="30018"/>是不是,它的意思就是当你选定了“主屏幕”选项之后系统就会打开home.cpl.xml文件,那我把<cpl-link href="home.cpl.xml" res="30018"/>代码改成<cpl-link href="home123.cpl.xml" res="30018"/>,再将 “home.cpl.xml”文件改名为“home123.cpl.xml”就可以了,于是连接项目发生了变化,重新指定了连接文件为“home123.cpl.xml”,但是手机上会发生什么变化呢,没有变化!效果是一样的。
:J w z*d%r[6{0(二)删除项。
B `bxm?2X0了解了一一对应关系,我们便可以对“设置”进行修改了,从最简单的删除开始。灵机网&yz*m ek#d
1. 删除选择项。
"{*Vo]CB@0例如你觉得“STK服务”这个选择项太鸡肋,自己根本不用STK功能或不需要选择它的关闭和开启,应该删掉。那么就先找出它的路径:“设置-电话-STK服务”(系统不同则路径不同),灵机网8M^8ZLsDYQ&p
灵机网'F\6L$Yn
然后再找以上路径对应的连接文件:“rootgsm.cpl.xml-telephonygsm.cpl.xml”(系统不同则对应的连接文件不同),
xlTb${[9h0
e7_G7SR:~{n0哈哈,找到了,只要将上图中框框里面的段码段删除,即将
Ac-K0j{U{0<cpl-link href="stk_service.cpl.xml">灵机网U7R&_{/A
<title lang="0x0804">STK 服务</title>
A\9S[2V0</cpl-link>
2cs:Y,E)rS(u0删掉就完事了,这样“设置-电话”中便不会有“STK服务”这个选择项了。因为没有了“STK服务”选择项,那么其对应的连接文件即stk_service.cpl.xml文件也不需要了,在mxip_cold_OEMDRIVERS_100.provxml文件中有关“STK服务”的最终执行代码段也不需要了,都可以找出来并删除掉。当然你也可以不删除,完全不影响操作,只是多了个无效文件及一些无效代码段,有悖ROM定制的精简原则而已。灵机网 o {"o6Qw}
2. 删除执行项。
i7|ateTB;n%L0例如删除“启用动态窗口”这个执行项。操作步骤和上面一样,找出路径;“设置-主屏幕-启用动态窗口” (系统不同则路径不同),灵机网K#Vvh,cb
/Y[e%mc0按部就班,再找以上路径对应的连接文件:“rootgsm.cpl.xml-home.cpl.xml”,“启用动态窗口”在执行页中顺序为从上到下排在第6,那么它在home.cpl.xml目标文件中就对应从上到下第6段目标代码。或者,你看到代码中哪段含有“Animate”字符的,那就是它了。灵机网j?c:lQ%?;[
灵机网.~I:?8E]-x9jm;B
同样将上图中框框里面的段码段删除,即将
4Y7r4k,eFb A0 <characteristic type="HKLM\System\GWE">
Z+Q&R R.V#iJ0Py0 <parm-query name="Animate"/>
Kl*_*p$L/{!C6d0 </characteristic>
*Q9f;~ \QG'S1op0删掉就完事了。这样就把“启用动态窗口”这个执行项删除了,后面接着是删除在mxip_cold_OEMDRIVERS_100.provxml文件中有关“启用动态窗口”的最终执行代码段,这个就删不删由你了。
/qybU1W&Yy0删除教程完了。
cj~@%S-BFj0至于删除选择页和执行页,其实在删除选择项中不就等同于把选择页或执行页删除了吗。例如当你删除了“STK服务”选择项,不就是等同于把此选择项引导下的页删掉了嘛,选项都没有了,难道还能进入去设置吗?
h FQ:Q)d h+fp8`W0(三)添加页和项灵机网{9r:m?f;M i%^ k H
理论上是先添加项后添加页,因为无论是选择页还是执行页都必须由某个项值来引导。至于想添加多少层页最终才到执行项则是由你决定。每层页都要有一个独立的cpl.xml连接文件来对应,当然分层越多,需要创建的cpl.xml文件也就越多,对应关系越长越复杂。灵机网/o:K2@8b\.Ib1qi;j x
例如,在手机中修改“色彩方案”只需要进入一层页(系统不同则页数不同):灵机网NZp"P6^p~m
Tm*F&R U1~!l%J0修改“闹钟时间”则需要进入两层页(系统不同则页数不同):灵机网O;Y,?1QWv
灵机网4z'bUh1r,]H-qx
而修改解锁屏幕时钟开关就需要进入三层页了(系统不同则页数不同):
XxT/[0L I0
'E~+Z+|u0回正题,添加项和页首先要知道需要改变的最终目标项,即注册表项及其键值,然后考虑此项是另开一层新页还是增加到已有的页中,如另开新页的话则还需考虑引导它的选择项需要增加到哪层页中。
/c8f1G*jK"c$b6p5J0还是从简单的开始:灵机网l s0bU$]|
1. 不开新页的添加。灵机网 g;zs8k?!e*]4w
例如,只增加“USB联机充电”执行项,不开新页,直接添加到“电源管理”执行页。灵机网$Mip|6f ]
灵机网p%v*?n-q
那么,先找出控制USB联机充电的注册表项,这里为:
|'t z1T'w/~T$U O{0[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\usbfndrv]灵机网'i }2xo2Bs#Y:}
"EnableUsbCharging"=dword:00000000灵机网I1ZT7Z*Fc
灵机网*W Gn/@X x4y*B
然后,找到“电源管理”执行页所对应的目标文件进行修改添加,这里为“power.cpl.xml”(系统不同则目标文件不同),增加如下目标代码段:灵机网}v6s;YM^C.qy_
<characteristic type="HKLM\Drivers\BuiltIn\usbfndrv">
:?:hK0jU ]:e0 <parm-query name="EnableUsbCharging"/>
wh/VaB0 </characteristic>灵机网R%pjpa?s
这里需要注意的是,所增加的代码段在文件中的顺序决定着执行项在页中的排列顺序,如把代码段增加在所有代码段中最后,那么执行项就会出现在页中的最低端。
{ ])b)KM&M2M;T5Ptu0灵机网] MTY YYw+P#D9Rv ?)Q
最后需要修改的便是最终执行文件了,只有它才能直接修改注册表,以达到改变系统设置的目的。打开mxip_cold_OEMDRIVERS_100.provxml文件,在文件中增加如下代码段:灵机网8Ll0LSrF`I$}u?"k
<!--====================== Animate ====================-->
^vrZw |WXV~D0 <characteristic type="Metabase">
Pm2R)O4~ Z,j\C0 <characteristic type="Registry\HKLM\System\GWE\Animate">灵机网dC1E$ZZhg
<parm name="datatype" value="boolean"/>灵机网 @a`W8[
<parm name="maxvalue" value="1" />灵机网~sew vl'U*|
<parm name="minvalue" value="0" />
%b.c^Mu|0 <parm name="rw-access" value="3" />
0Q f6W dP"ERl)|7b0 <parm name="access-role" value="190" />
k(?f[rH!{_uT6Ag0 <characteristic type="label">
3L*kjO+Q:~ b0 <parm name="0804" value="启用动态窗口"/>灵机网vjK]bD
</characteristic>
2LbF_.`-c:ax"n R0 </characteristic>
koo(Hv z?k v]0 </characteristic>灵机网p5e EM sZX
如图:灵机网;j$k}ps:hg&s6oP
R&QZA-NO'K&iP2`K8z0至于增加代码应该遵循的格式在下面会仔细讲到。灵机网S`"O!wYmS PY4t
至此,“USB联机充电”执行项已成功地添加到了“电源管理”执行页中。灵机网 urH6i/Ik^&P
2. 另开新页的添加。灵机网sq8}-vRYP&Zi[7{
例如:我要添加两个个性的执行项“纵/横导航条厚度”,并单独为它们创建一个新的执行页,此页由“导航条厚度”选择项引导,此项所在页又由新的选择项“增强功能”来引导,再并列到“设置”选择页中。如图:灵机网 b0KU9q L B a
灵机网I5i_xP)T7}
那么,先找出控制导航条厚度的相关注册表项以备用,这里为:灵机网,?P f5feMB:aV*u]
[HKEY_LOCAL_MACHINE\System\GWE]
k l zNp7Se8e0"cyHScr"=dword:00000004(横向)灵机网e^ Ei2K+{
"cxVScr"=dword:00000004(纵向)
7R3yJH)S {m_0