大神教你定制ROM HTC One深度修改技巧

 HTC One应该是目前最受用户欢迎的Android手机之一,强悍的硬件配置再加上无可挑剔的外观让One不火都难。但是One的官方ROM功能限制太多,如果是使用修改后的第三方ROM,可以让One的功能更加强悍,本期我们就邀请了@大款小总和@Jerry_Liu-熙漫两位大神,来给大家讲一些HTC One Sense系统的高阶技巧。


@大款小总

无名团体,HTC分队成员

论坛认证:机锋HTC One区版主

          机锋认证ROM制作达人

Grom组成员 

技术强项:系统框架修改 

微博:http://weibo.com/tommyzw

拥有机型:HTC G10 G12 T328D S710D OneX 801e(One) 802w(联通One)

经典ROM:T328D系列 viperX系列 ViperOne系列

大神技巧:修改HTC Sense框架,让HTC One功能全面升级

    每每提到HTC的Android智能手机,大家首先会想到的一定是其具有代表性的Sense系统。HTC作为全球最早接触Android系统的手机厂商,Sense系统理所当然地得到了Google的官方技术支持,成为目前唯一一个由Google协助开发的第三方Android系统。虽然HTC Sense依然属于Android,但是Sense含有太多独立定制代码,所以它和原生的Android系统相比有很多差别。

    HTC Sense现在已经发展到了5.0版本,它的功能也越来越丰富。从Sense 3.0开始,系统就可以根据内置的代码,自动识别所适配机型的型号,所处的地区和网络制式,同时根据这些信息自动开启不同的功能。比如当Sense检测到国行手机,那它就会自动开启来去电归属地、通话录音、中国气象中心天气源、IP拨号、甚至新浪微博等国行特有的功能。如果Sense检测到自己适配的是海外版机型,那它就会自动开启与其相地区所对应的特色功能。简单的理解就是Sense其实从出厂时就内置了非常多的隐藏功能,目地是可以根据不同的机型和网络制式,自动开启不同的功能,这样利用一套Sense系统就可以适配全球,无需针对不同的地区专门开发系统。

    了解了HTC的Sense系统控制原理,我们就可以对Sense系统做一些本地化处理,这样做的好处就是稳定安全不用修改系统代码,就能使不同版本的HTC One用上本地化功能,同时还不会影响现有的系统,甚至可以用过修改Sense代码,让只支持TD-CDMA网络的移动版HTC One,用上联通WCDMA 3G网络。同理我们还可以在国行的机型上,通过修改代码打开诸如Google服务等只有国际版One才有的功能。

    要修改Sense代码,首先要知道这些代码存放在哪里。首先将从网上获取的ROM包用解压缩软件直接解压,然后在ROM根目录中找到system文件夹。HTC将Sense代码放到了system\framework\ext.jar文件夹里,随着Sense版本的升级,部分功能代码也被放到了system\framework\framework2.jar里;我们分别反编译这两个文件,就可以找到com\htc\htcjavaflag\HtcBuildFlag.smali文件,打开这个文件我们可以看到里面有众多参数的设定,通过修改不同的参数就可以让One实现不同的功能,而反编译操作我们在上期已经做了详细介绍,大家在操作时可以进行参考。修改完成后用上期提到的“厨房”工具将ROM重新打包即可重新刷入手机。


一:通过修改Sense代码重新定义识别机型

    重新定义Sense识别的机型代码,可以让系统开启一些隐藏功能,比如在相机功能中,当Sense识别机型为HTC One时会自动开启ZOE功能,否则这个ZOE功能会自动隐藏。你可以搜索并找到以下代码(比如最新的国际版HTC One代码就为0x67):

.method public static final getHtc_DEVICE_flag()S

.registers 1

const/16 v0, 0x67

return v0

.end method

下面给出一些机型的代码作为参考:

联通版 HTC One :0x20a

移动版HTC One:0x205

电信版HTC One:0x209

OneX : 0x26

OneS: 0xe1

通过定义“const/16 v0,”后的值,就可以重新定义Sense识别机型,开启一些隐藏功能。


二:修改Sense语言标识代码,让国际版One开启国行版本地化功能

    上期@溜达会儿为我们介绍过如何通过反编译系统APK,实现国际版One本地化的具体方法。其实除了反编译系统APK,也可以用过修改Sense代码,让国际版One用上国行版的本地化功能。

    HTC One的语言识别代码比较简单,仅分为国际版和国行版两个版本。我们只要通过反编译,将国际版的Sense语言识别代码改为国行版,即可开启归属地显示、IP拨号、通话录音等国行版特有功能,具体的修改方法也非常简单,只需要将“const/4 v0,”后的值修改即可。

.method public static final getHtc_LANGUAGE_flag()S

    .registers 1

    const/4 v0, 0x0

    return v0

.end method

国际版语言识别码为0x0

国行版语言识别码为0x2。


三:修改Sense项目代码,让定制版HTC One用上不同网络

    HTC One作为一款在全球都非常火热的手机,拥有支持不同网络制式的机型,分为WCDMA版、TD-CDMA版、CDMA/GSM版等,而系统在区分这些版本时,是通过项目代码进行判断的。

    我们可以通过修改项目代码,让手机支持各种网络制式,比如我们可以让移动版HTC One用上联通制式网络,具体方法就是修改“const/16 v0,”后的值来实现。我们可以找到以下代码:

.method public static final getHtc_PROJECT_flag()S

    .registers 1

    const/16 v0, 0x34

    return v0

.end method

国际版项目代码:0x34

国行版项目代码:0x1

国行联通版项目代码:0x17

国行移动版项目代码:0xda

C网(含电信、sprint、Verizon)项目代码:0xd8

 

@Jerry_Liu-熙漫

无名团体,HTC分队成员

论坛认证:爱机控管理员 

风暴数码荣誉站长

机锋认证rom制作者

技术强项:系统内核编译

微博:http://weibo.com/jerrylzyximan

拥有机型:HTC One Developer Edition

经典ROM作品:LZY_M7_UL_2.24_R1.0

大神技巧:修改Soc控制手机耗电

    现在的Soc(System on Chip)性能虽然越来越强,但是在控制手机发热和功耗上效果却并不明显。Soc是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上;从广义角度讲,Soc就是一个微小型系统,如果说中央处理器(CPU)是大脑,那么SoC就是包括大脑、心脏、眼睛和手的系统。

    在手机性能过剩的情况下,我们可以手动调整Soc参数,在不影响手机日常使用的前提下,来降低CPU频率和降低降温阀值,这样可以很好的控制手机发热。同样将下载的ROM包用解压工具解压,一般Soc文件都保存在system文件夹中,具体目录是“/system/etc/init.post_boot.sh”和“/system/etc/init.qcom.post_boot.sh”。而文件我们可以通过记事本直接打开,由于HTC One是采用的msm8960平台的Soc,所以我们要搜索“case “$target” in”,并更改字样为:

case “$target” in

“msm8960”)

boot文件可以直接利用写字板打开

    要修改Soc,首先应该着手考虑的就是CPU,毕竟它是手机运行的核心,也是日常使用最容易发热的部件。要修改Soc需要在Linux环境中进行(如果没有安装Linux系统,也可以在Windows系统中安装虚拟机进行编译,不过具体的操作同我们反编译后用Notepad++修改完全相同。而且由于没有改变文件类型,在修改后我们直接选择保存即可,无需进行专门的打包,或者签名操作。然后利用“厨房”工具,直接将修改后的ROM打包重新刷入手机即可。

    HTC One使用的是高通骁龙600 CPU,高通骁龙600虽然性能强悍,但是耗电相对也比较严重,在进行省电优化时着重需要调整控制CPU的两个调速器:ondemand(按需)以及msm-dcvs(msm动态频率电压调节)。

    调整ondemand(按需)可以让CPU的执行率大大提高,效率上也能得到优化。而调整msm-dcvs(msm动态频率电压调节)可以让CPU更加合理的运行,通过调整它可以很好的控制待机耗电。

    在进行省电和调整时,需要对CPU的四个核心进行专门的设置,这些数据的参数,都是进过仔细验证的,可以保证手机流畅运行的情况下,最大程度的节省电量大家可以放心修改,具体的方法如下:

省电设置:

        echo “ondemand” > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

        echo “ondemand” > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor

        echo “ondemand” > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor

        echo “ondemand” > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor

        echo 90 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold

        echo 50000 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate

性能设置:

使用Ondemand

        echo “ondemand” > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

        echo “ondemand” > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor

        echo “ondemand” > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor

        echo “ondemand” > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor

        echo 50 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold

        echo 30000 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_rate

直接使用msm-dcvs

        echo “msm-dcvs” > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

        echo “msm-dcvs” > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor

        echo “msm-dcvs” > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor

        echo “msm-dcvs” > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor

大神技巧:修改Soc控制手机发热量

    现在的智能手机,虽然性能越来越强悍,但是发热却也同样越来越严重,特别是像HTC One这样使用金属材质打造的手机,因为机身导热性更好,相同温度下同其他材质相比用户会感觉机身温度更高,所以控温显得更为重要。对温度的控制我们依然可以通过修改Soc来实现。

GPU频率调节:

    HTC One所配备的GPU是Adreno 320 ,性能虽然强悍,但是发热却同样不容小视,而控制GPU发热唯一有效的方式就是降频,经过长时间的试验,发现可以将原来400MHz的频率降低到320MHz,在不影响手机性能的同时,让手机温度明显降低,具体的操作如下:

echo 320000000 > /sys/devices/platform/kgsl-3d0.0/kgsl/kgsl-3d0/max_gpuclk


使用第三方内核

    由于HTC的官方内核已经加密,所以无法通过直接编译内核进行降温操作,不过可以使用第三方的开源内核进行编译来实现相应的降温操作,这里以ElementalX内核为例,告诉大家如何进行降温阀值的修改。

    EX内核降温阀值总共四个,每一个可以根据自己的需要进行专门的设置,而且ElementalX内核有专门的温度监控机制,可以根据手机温度自动调整CPU频率。

    为了很好地控制手机温度,建议从46摄氏度开始进行频率限制,将CPU频率降到1242MHz(ElementalX内核L2频率为1242MHz,所以1242MHz是平衡点),54摄氏度降频到918MHz(通过实测1242MHz满载时就很难超过54摄氏度了),75摄氏度降为702MHz,85摄氏度降为度384MHz。具体操作如下:


降温阀值:

echo 46,54,75,85 > /sys/module/msm_thermal/parameters/limit_temp_degC

降温对应频率:

echo 1242000,918000,702000,384000 > /sys/module/msm_thermal/parameters/limit_freq

大神技巧:超频二级缓存和GPU让手机性能更为强

超频二级缓存

    CPU会直接把最常用的数据存放在缓存中,在需要时提取,手机在进行一些复杂运算时,缓存就能起到很大作用。而高通CPU的二级缓存频率普遍低于CPU频率,这就让二级缓存成为了CPU性能在发挥时的一个瓶颈。对手机CPU的二级缓存进行超频,可以很大程度的提升手机性能。

二级缓存超频后性能提升效果图

    而对二级缓存进行超频的操作也相对比较简单,首先按照上期的内核编译法,将内核进行编译,然后在在内核源码中,找到“\arch\arm\mach-msm\acpuclock-8064.c”文件并在其中搜索:“static struct l2_level l2_freq_tbl[] __initdata = {”,然后找到第14档,然后将14档对应的CPU频率改为1134MHz,将15档对应的CPU频率改为1242MHz或1296MHz,这样设置可以在需要CPU满负荷工作时更加稳定,二级缓存性能也能全面提升,当CPU空闲时也能更加节电。

    然后将内核代码中“1566,1674,1728”的L2字符后的数字改为“15”并保存即可,这样对二级缓存超频的操作就结束了。经常抱怨CPU性能不够的用户,在执行这个操作之后可以较好地提升手机性能。

修改二级缓存时一定要非常细心

GPU超频

    虽然HTC One使用的GPU Adreno 320性能很强大,但是对于1080P的屏幕分辨率,400MHz的Adreno 320还是会多少有些吃力,要解决这个问题,最好的方法还是对GPU进行超频。

不同频率的GPU跑分结果

    从测试图中我们可以看出,GPU在保持在450MHz时,性能最为理想。为GPU超频的具体方法和为二级缓存超频没有什么太大的差别,都是通过编译内核实现的。

    首先将内核进行编译,然后在内核源码的“\arch\arm\mach-msm”下找到“board-m7-gpu.c”文件,打开并搜索“.gpu_freq = 400000000”,然后将“400000000”改为“450000000”。再找到“clock-8960.c文件”,打开并搜索“static struct clk_freq_tbl clk_tbl_gfx3d_8960[] = {同时在值“F_GFX3D(400000000, pll2, 1,  2)”下面加入代码“F_GFX3D(450000000, pll15, 1,  2)”。继续搜索“static unsigned long fmax_gfx3d_8064[MAX_VDD_LEVELS] __initdata = {”,找到“[VDD_DIG_HIGH] = 400000000”把“400000000”改成“450000000”。最后搜索“static struct rcg_clk gfx3d_clk = {”并找到值“VDD_DIG_FMAX_MAP3(LOW,  128000000, NOMINAL, 300000000, HIGH, 400000000)”同样改为“450000000”最后保存并将内核编译就可以完成GPU的超频了。

-=||=-收藏

未经允许不得转载:云破天开 » 大神教你定制ROM HTC One深度修改技巧

2 评论

2+9=

  1. 明升博彩

    我想当年也是,话说回来不就是一回事吗,只不过一个光明正大走前门,一个偷偷摸摸走后门,目的都是一样的,为了我们更好的活着。有多少人像他们
    明升博彩 http://www.nbxdl.com.cn/company/

    来自四川
    回复
  2. 小红鱼

    网站确实做的比较好啊。你是网页设计师么。

    来自河北
    回复