android 错误提示框,安卓系统toast 消息框 广告错误提示 去除通用教程

最近发现一款软件去除穿山甲的广告后(去广告教程:https://www.52pojie.cn/thread-1213695-1-1.html),出现了上面的提示,这种叫做toast。不过这种情况还是非常少见的。

Android中的Toast是一种简易的消息提示框。

当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。用户将可能是在中间键入别的东西。Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,Toast会根据用户设置的显示时间后自动消失。

他的通用代码是【Landroid/widget/Toast;->show()V】,一般在包名路径下。不过如果删掉这段代码,所有的消息框都会消失,比如再按一次退出、你没有……、需要登录等。所以并不推荐一刀切,现在要准确定位是从哪里弹出来的,而且修改后不能影响正常的提示,要准确定位弹出来源就需要用到DDMS来监控app运行情况了。

thread-1219878-1-1.html

注意:

1、在apk配置文件内加入android:debuggable="true",打开调试功能。如果app有反调试,代码内搜索【isDebuggerConnected】想办法改掉。

2、由于必须要在app启动时运行“start method profiling”(这个工具可以从虚拟机层面抓取每个函数及其调用的函数的运行时间,统计运行次数等功能,是分析性能问题的绝佳工具),所以这个分析方法的按钮不能在弹出toast后再点击,这样会捕捉不到。

3、由于2的原因,启动app的瞬间手机立即切换到多任务窗口(不要按主页键),暂停其运行,几秒后系统会自动释放。这样就能抓到函数了。

55fd2b2273b5a8b4531f72773c469d6e.gif

2.png (33.94 KB, 下载次数: 1)

2020-7-15 15:33 上传

thread-1219878-1-1.html

回到穿山甲广告的开关,修改后他的代码如下:

.method private a(Lcom/bytedance/sdk/openadsdk/a/b;)Z

.locals 2

const/16 v0, 0x3e8

const-string v1, "\u5e7f\u544a\u8bf7\u6c42\u5f00\u5173\u5df2\u5173\u95ed,\u8bf7\u8054\u7cfb\u7a7f\u5c71\u7532\u7ba1\u7406\u5458"

invoke-interface {p1, v0, v1}, Lcom/bytedance/sdk/openadsdk/a/b;->onError(ILjava/lang/String;)V

const/4 p1, 0x1

return p1

.end method

invoke-interface:调用。直观的理解就是v1寄存器的字符串放到onError里面去了,广告异常时就会弹出提示。

所以DDMS内直接输入onError,看看会有什么结果。

55fd2b2273b5a8b4531f72773c469d6e.gif

1.png (70.44 KB, 下载次数: 0)

2020-7-15 15:49 上传

如上图,一目了然,上下关系都非常清楚。$在java里面是分割符,从LOG来看字符串tag是SplashActivity,那么可以确定来源就在SplashActivity$1。所以根据DDMS找一下文件【com/histudio/app/ad/SplashActivity$1.smali】,然后定位到方法onError(ILjava/lang/String;)V,直接让他结束掉即可,常用的是return-void。

55fd2b2273b5a8b4531f72773c469d6e.gif

1.png (123.39 KB, 下载次数: 1)

2020-7-15 16:02 上传

[Java] 纯文本查看 复制代码.method public onError(ILjava/lang/String;)V

.locals 1

return-void

.end method

这样一来就没有烦人的错误提示了,同时也不影响正常操作的提示。

除此之外,还能顺藤摸瓜找到toast总开关。上图依次点击access$000——showToast——showToastTip。而这个showToastTip如果直接结束掉了整个app都不会有toast弹框了。如下图:

55fd2b2273b5a8b4531f72773c469d6e.gif

1.png (34.76 KB, 下载次数: 1)

2020-7-15 16:10 上传

55fd2b2273b5a8b4531f72773c469d6e.gif

2.png (25.17 KB, 下载次数: 1)

2020-7-15 16:10 上传

55fd2b2273b5a8b4531f72773c469d6e.gif

3.png (24.36 KB, 下载次数: 1)

2020-7-15 16:10 上传

DDMS如果无法启动可能要安装AS,或者jdk版本太高。DDMS非常好用,对于去广告或者查找异常简直是神器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中,有两种常用的消息提示框可以使用:Toast提示框和AlertDialog。这两种提示框在功能和使用方式上有所不同。 1. Toast提示框是一种简单的消息提示框,用于向用户显示一条临时性的消息。它的代码示例如下: Toast.makeText(MainActivity.this, "有空输入!\n请重新输入!", Toast.LENGTH_SHORT).show(); 这段代码会在底部弹出一个短暂显示提示框,其中包含有关输入错误消息Toast提示框适用于简单的文本提示,对于输入错误等情况较为合适。 2. AlertDialog是一种更为复杂和功能丰富的提示框,可以用于实现多种功能,例如提示说明、单选、复选甚至登录功能。AlertDialog可以通过编写XML文件来实现更多的功能和更好的界面。下面是一个使用AlertDialog的示例代码: Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { //放在UI线程弹AlertDialog的代码 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("提示") .setMessage("有空输入!\n请重新输入!") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //确定按钮的点击事件处理 } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //取消按钮的点击事件处理 } }) .show(); } }); 这段代码会创建一个AlertDialog并在UI线程中显示出来。其中,通过AlertDialog.Builder来构建对话的内容,可以设置标题、消息内容以及确定和取消按钮的点击事件。通过调用show()方法来显示对话。 总结来说,Toast提示框适用于简单的文本提示,而AlertDialog则可以实现更多的功能和更好的界面。具体选择哪种消息提示框取决于实际需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值