首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android玩乐系列:批改汇编代码支持原生高清来电大头贴(三)

2012-09-13 
Android玩乐系列:修改汇编代码支持原生高清来电大头贴(三)【本文分三篇。本篇介绍更复杂的定制过程。】(接下来

Android玩乐系列:修改汇编代码支持原生高清来电大头贴(三)

本文分三篇。本篇介绍更复杂的定制过程。


(接下来进一步细化上一篇的修改,前六节请参见:http://blog.csdn.net/aimingoo/article/details/7939116)


7、一些遗留问题的修改
=======

上面是最简版本,只是为了突出核心功能的实现,但实际留下的问题还是不少的。下面一一道来。


1) 呀。是成功了呢,不过一会儿就被改回来了。
---------

[修改, 2012.09.04。方法名写错的,应该是updateInCallBackground(),而不是updateScreen()]
这并不是普遍性的问题,有些拔号面板是有背景的,有些则是背景透明而直接显示桌面的。对于有背景的拔号面板,Phone.apk通常会在InCallScreen.smali中有一个updateInCallBackground()方法,找到它的几处调用,注释掉即可。或者干脆把updateInCallBackground()改成空函数就好了。


如果找不到updateInCallBackground()函数,则尝试找一个setBackgroundResource()这个方法,看哪里重绘了mMainFrame的背景即可。




2) 下一次电话呼入的时候,会残留上一个电话使用的大头贴
---------
是的。这应该在此次电话结束时清理掉。这很简单,修改InCallScreen.smali,找到

##---------## 注释掉下面的代码,使打开图片选取时显示一个“自由的”截图框##  -  .line xxx这样的代码可能与具体的反编译有关,不必在意。##---------##    .line 406##    const-string v12, "outputX"####    const/16 v13, 0x100####    invoke-virtual {v8, v12, v13}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;####    .line 407##    const-string v12, "outputY"####    const/16 v13, 0x100####    invoke-virtual {v8, v12, v13}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;####    .line 408##    const-string v12, "aspectX"####    const/4 v13, 0x1####    invoke-virtual {v8, v12, v13}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;####    .line 409##    const-string v12, "aspectY"####    const/4 v13, 0x1####    invoke-virtual {v8, v12, v13}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;

然后重编译它,这样在用它设置大头贴时,我们可以自由选取图片大小。当然,为了得到“正好是一个全屏大小”的大头贴,我们也可以借助一下工具。这里强烈推荐“快图浏览”,它在截取时可以按大小(像素数)和长宽比来设置截取框。如果你按大小来设置,比如480x800的屏幕大小,那么无论你截选图片多大,最终都会等比缩放到这个大小——相当好用!


n) 其它之其它
---------
!强调!!!


1:永远记住:插入代码的时候,要确认你在使用着合适的寄存器!


2:不同的Phone.apk是不一样的,上面的代码主要基于CyanogenMod及其衍生版的ROM,大致在它们之间都是可以通用的。但要注意细节上的差异,尤其(再次强调)寄存器在反汇编代码中是可能不同的!


3:非常多的ROM衍生自CyanogenMod,包括Lewa、Lezo、DianxinOS、Mokee、Shendu、Norma、Joyos,以及部分Miui的定制版。


4:不同版本ROM中的Phone.apk,多数都是不能换在其它ROM中用的。主要的原因之一,是Phone.apk依赖framework-res.apk中的资源来实现了锁屏状态下的接听面板(TouchUi),而不用ROM的framework-res差异较大。另外,也可能是它们用到的TelephonyProvider.apk版本不一致,试试换个看,试试手气呵。


5:一定要用platform.*的两个key来签名Phone.apk,它要求必须是这个权限的签名。


6:没必要去尝试改原厂的Phone.apk,例如sesen原生界面的。因为你拿不到他们私有的platform keys。于是你签不了名,于是你改了也放不到原生ROM中去。用到别的ROM?你忘了,framework-res还不一样呢。


7:写程序嘛,不过是汇编嘛,不怕不怕啦!

热点排行