按上一篇文章,搭建可修改android 系统的环境
http://blog.csdn.net/karts/article/details/64124098
SIM卡状态改变系统弹出提示框,是在 Keyguard 这个apk里面进行的。
1、copy设备的 /system 目录到本机。
2、使用 apktool,对所有apk进行 反编译,主要获取 strings.xml。
3、然后在xml查找 “SIM card is unplugged”。
4、发现<string name="lockscreen_missing_sim_dialog_message">SIM card is unplugged. Please make sure your SIM card is properly plugged in.</string>
在Keyguard apk里面, 那初步判断,这个功能是在 该apk实现。
5、接着在 smali 文件里查找 lockscreen_missing_sim_dialog_message
.field public static final lockscreen_missing_sim_dialog_message:I = 0x7f05002f
6、接着看看 0x7f05002f (2131034159十进制,在class文件查看java源码的时候,会是10进制)在 smali 哪里使用,
如果smali 看得比较麻烦,用dex2jar,得到class,然后用jd-gui 查看java源码,对照着smali 看。
7、发现是在 KeyguardDialogManager 里面的 private void handleSIMCardChanged() 弹出提示框的。
private void handleSIMCardChanged()
{
...........
if ((SIM_DETECT_REMOVE.equals(str)) && (i == 0))
{
localBuilder.setCancelable(false);
localBuilder.setTitle(17039380);
localBuilder.setIcon(17301543);
localBuilder.setMessage(2131034159);
localObject = this.mContext.getResources().getString(2131034159);
localBuilder.setMessage(this.mIOperatorSIMString.getOperatorSIMString((String)localObject, -1, IOperatorSIMString.SIMChangedTag.UIMSIM, this.mContext));
localBuilder.setPositiveButton(17039370, null);
this.mPromptView = null;
}
里面的 2131034159,就是提示框的文本了。
8、修改 smali 文件,让函数直接返回,那就不会弹提示框了。
.method private handleSIMCardChanged()V
........
const/4 v9, 0x0
return-void
然后重新编译,签名apk,放进设备,大功告成!