由于篇幅较长,本人也正在考试周中,所以分为上下两篇,上篇主要讲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应该是空闲的。
然后,,然后搞定了
反编译打包回去就行。。
下篇讲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应该是空闲的。
然后,,然后搞定了
反编译打包回去就行。。