9300官方短信归属地添加

由于篇幅较长,本人也正在考试周中,所以分为上下两篇,上篇主要讲smali修改的部分,
下篇讲res修改的部分,理论上讲下篇会比上篇简单。


待修改文件:
system/app/SecMms.apk
1。反编译后,找到文件:

smali\com\android\mms\ui\ConversationListItem.smali
复制代码
首先要增加一个TextView,让归属地的信息有地方容纳它
找到这几行:

.field private mPresenceView:Landroid/widget/ImageView;

.field mRootLayout:Landroid/widget/LinearLayout;

.field private mStatusView:Landroid/widget/TextView;

.field private mSubjectView:Landroid/widget/TextView;

.field private mUnreadCount:Landroid/widget/TextView;
复制代码


在后面添加一行:

.field private txtCity:Landroid/widget/TextView;
复制代码


2.往下,搜索method:

.method private updateAvatarView()V
复制代码
在这个方法里面,继续搜索:

const-string v4, "CBmessages"

invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v4

if-eqz v4, :cond_0
复制代码
在第一行的上面,添加下面几行:
iget-object v4, p0, Lcom/android/mms/ui/ConversationListItem;->mContext:Landroid/content/Context;

invoke-static {v4, v3}, Lorg/52samsung/galaxy/CityLocator;->getPhoneLocation(Landroid/content/Context;Ljava/lang/CharSequence;)Ljava/lang/String;

move-result-object v4

iget-object v5, p0, Lcom/android/mms/ui/ConversationListItem;->txtCity:Landroid/widget/TextView;

if-eqz v5, :cond_0

invoke-virtual {v5, v4}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
复制代码


这里调用了额外的包来实现对归属地数据库的获取,这个包的添加在后面会介绍。

添加好了大致是这个样子的:
.local v3, number:Ljava/lang/String;
iget-object v4, p0, Lcom/android/mms/ui/ConversationListItem;->mContext:Landroid/content/Context;

invoke-static {v4, v3}, Lorg/52samsung/galaxy/CityLocator;->getPhoneLocation(Landroid/content/Context;Ljava/lang/CharSequence;)Ljava/lang/String;

move-result-object v4

iget-object v5, p0, Lcom/android/mms/ui/ConversationListItem;->txtCity:Landroid/widget/TextView;

if-eqz v5, :cond_0

invoke-virtual {v5, v4}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

const-string v4, "CBmessages"

invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v4

if-eqz v4, :cond_0
复制代码

本帖隐藏的内容

3.然后继续往下搜索,找到method:
.method protected onFinishInflate()V
复制代码
然后往下搜索:
move-result-object v0

check-cast v0, Landroid/widget/TextView;

iput-object v0, p0, Lcom/android/mms/ui/ConversationListItem;->mDateView:Landroid/widget/TextView;

.line 121
复制代码
注意这里行号可能对应不上
反正是一堆TextView的地方
我们要在程序加载的时候,再多加载一个TextView上去,具体资源的调用会在res中增加,后面会提到
增加下面几行,即增加一个TextView资源的调用
const v0, 0x7f080269

invoke-virtual {p0, v0}, Lcom/android/mms/ui/ConversationListItem;->findViewById(I)Landroid/view/View;

move-result-object v0

check-cast v0, Landroid/widget/TextView;

iput-object v0, p0, Lcom/android/mms/ui/ConversationListItem;->txtCity:Landroid/widget/TextView;
复制代码
记住0x7f080269是这个textView的ID,以后会用到的。

搞定之后上下文大概这样:
.line 119
const v0, 0x7f0800c7

invoke-virtual {p0, v0}, Lcom/android/mms/ui/ConversationListItem;->findViewById(I)Landroid/view/View;

move-result-object v0

check-cast v0, Landroid/widget/TextView;

iput-object v0, p0, Lcom/android/mms/ui/ConversationListItem;->mDateView:Landroid/widget/TextView;

.line 121
const v0, 0x7f080269

invoke-virtual {p0, v0}, Lcom/android/mms/ui/ConversationListItem;->findViewById(I)Landroid/view/View;

move-result-object v0

check-cast v0, Landroid/widget/TextView;

iput-object v0, p0, Lcom/android/mms/ui/ConversationListItem;->txtCity:Landroid/widget/TextView;

.line 122
const v0, 0x7f0800c4

invoke-virtual {p0, v0}, Lcom/android/mms/ui/ConversationListItem;->findViewById(I)Landroid/view/View;

move-result-object v0

check-cast v0, Landroid/widget/TextView;

iput-object v0, p0, Lcom/android/mms/ui/ConversationListItem;->mStatusView:Landroid/widget/TextView;
复制代码
反正是在一堆原有的TextView中加上这一个。


4.对刚才那个Smali的修改已经完成,现在增加一个额外的smali包,这个包由隔壁论坛牛人制作,提供从归属地数据库中查询字段的功能
CityLocator.smali (84.63 KB, 下载次数: 263)
将这个文件放在这样的文件夹下(如果没有请新建)
\smali\org\52samsung\galaxy
复制代码
具体文件路径上面的smali中可以改,不过为了版权起见,大家罢手吧。估计这个东西最早是给i500用的,能沿用至今也是我等屌丝的福气。。
5.放好之后,smali部分就改好了。


下半篇:http://lt.imobile.com.cn/forum.p ... ;extra=#pid50571099
上篇见:http://lt.imobile.com.cn/forum.php?mod=viewthread&tid=10136835

本片主要讲res部分的修改

1.找到文件
res\layout\conversation_list_item.xml
复制代码
这个负责我们进入短信初始页面的展示,就是一些短信的item,要在每个item右侧加一个textView显示归属地
找到这一行:
<ImageView android:id="@id/presence" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="3.0dip" android:layout_marginTop="16.0dip" android:layout_toLeftOf="@id/unread_count" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" />
复制代码
在后面另起一行,加入这段:
<TextView android:textSize="15.0dip" android:textColor="#ffbebebe" android:ellipsize="marquee" android:id="@id/city" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="3.0dip" android:singleLine="true" android:layout_toLeftOf="@id/presence" android:layout_alignBaseline="@id/thread_status" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" />
复制代码
本帖隐藏的内容

2.添加资源名字
找到文件:
res\values\ids.xml
复制代码
这个文件里指明了有哪些个id,
在文件的最后一行</resources>之前,加上一行:
<item type="id" name="city">false</item>
复制代码


3.给我们的city这个id链接一个资源地址
找到文件:
\res\values\public.xml
复制代码
找到这一行:
<public type="id" name="menuRefreshLoc" id="0x7f080268" />
复制代码
一般来说i535机型的ID对应的这个,也有可能具体值7f080268不同,这个没关系
在它后面新起一行,加入:
<public type="id" name="city" id="0x7f080269" />
复制代码
注意!!!这里的id号与【上】篇加到smali文件中的要对应起来,且不能在public.xml文件中有与原来的id号码冲突,一半在刚才的7f070268加上1应该是空闲的。

然后,,然后搞定了
反编译打包回去就行。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值