|
|
前置知识
阅读此教程,假设你已学会给软件添加弹窗,并有一定编程基础。不满足于使用别人提供的弹窗,也想自己写一个,但是无从下手。此教程仅做引领,学习完此教程,你会对弹窗有一个更深的理解,大佬请绕行。由于我文学素养不好,有些地方难以表述清楚,建议你先跟着做,遇到问题可ai帮你解答。
资料
https://1816490705.share.123pan.cn/123pan/o1cqVv-qcpvA
其中包含最终项目,如果你想深入研究,可打开项目尝试。还包含png版教程,你可以从此资料中下载,让ai总结。
安装Android studio
Android studio(以下简称as),安装教程自行bing“as安装教程”
注:提到安卓开发,as是绕不开的一个坎,推荐学习使用。没有电脑可以考虑android-code-studio-github
常见问题
sdk下载失败
考虑科学上网,如果是模拟器下载失败,也可以使用手机代替(都是安卓环境),只要能编译软件就行。
汉化as
阅读此github的README.MD:AndroidStudio中文插件(官方修改版本)
创建项目
选择空activity,才能选java,本教程以java代码为准,看图填写
换源
安卓项目需要使用gradle进行构建,as默认从gradle官网下载,国外网站下载慢,推荐换成阿里云
查看版本
打开此文件,可以看到gradle是9.10版本。
注:由于不同as默认gradle版本不一致,且新版as不兼容旧版gradle,故自行查看你的gradle版本是多少,否则无法运行。
打开gradle安装包下载-阿里云,替换gradle下载链接
下载all版本(如果下载bin,as仍会从国外下载all),并删除hash校验(distributionSha256Sum),最后点击sync now
新建MainActivity
空项目无activity,教程请参考:如何在新版的Android studio中创建Java项目-CSDN博客
勾选作为launcher,表示从桌面启动此activity
点击运行
这样我们就有一个空app了。这个空app专门用来测试我们的弹窗代码,可以运行后才提取dex给其他应用使用。
编写弹窗代码
先写一个最简单的Toast作为弹窗示例。
Toast
ai提示词:
- 我有一个as安卓项目,现要求创建一个工具包,包until.qcxs,在其中添加一个使用Toast提示的类,由MainActivity传入Context,编写代码
复制代码
作为小白的我,还是让ai写代码吧,我只讲思路。
于是我们就有了一个工具类
在MainActivity中调用它
运行,查看结果
第一个dex
接下来我们将上述代码提取为一个dex,首先去mt提取安装包
温馨提示
运行时产生的debug版会热更新,此时提取的安装包中无新增的Toast代码,实际dex在以下路径:
- /data/user/0/qcxs.showdia/code_cache/.overlay/base.apk/
复制代码
故如果从apk中没有找到代码,就去上述路径寻找。(推荐发布release版再提取)
使用mt打开所有dex
打开MainActivity,在onCreate中可以得到调用处
- const-string v0, "作者:青春向上"
- invoke-static {p0, v0}, Lutil/qcxs/ToastUtil;->showShort(Landroid/content/Context;Ljava/lang/String;)V
复制代码
长按-批量管理-勾选until,选择导出为dex
将导出的dex添加进via.apk中(模拟给其他应用添加弹窗)
将调用代码粘贴至via的入口的onCreate方法(入口可通过mt的“Activity记录”获取)
via成功显示我们自定义的Toast
发现了吗?这个dex和调用代码就是我们自己的弹窗!只不过代码特别简单,只是一个Toast提示而已。原理掌握后,接下来我们尝试更高难度。
随机一言Toast
ai提示词
- 编写随机一言Toast,访问https://api.zxki.cn/api/sjyy,其返回一个随机一言字符串,使用Toast弹出,捕获无网络、无网络权限等异常,发生异常时Toast异常
复制代码
注:上述一言api为随机选取,不保证可用。你可以将捕获异常的处理事件改为finish,这样断网后软件将无法运行(禁止离线使用)
注意在我们的项目xml中添加权限,目标应用一般都有联网权限
- <!-- 网络权限 -->
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
复制代码
测试成功,同理提取dex和调用处,不再演示。
Dialog
ai提示词
- 编写Dialog,显示一个包含标题(Dialog)、内容(点击前往mt论坛)、积极(打开链接)消极(关闭)中立(不再提醒)按钮的弹窗。所有逻辑封装在一个类中,mian只需传入Context,无需知晓细节。链接为https://bbs.binmt.cc/
复制代码
效果
是不是有点感觉了?这才是弹窗,刚才只是入门。
自定义Dialog
ai提示词1
- 生成一个网页,只显示一个对话框,由圆形头像(重点在于布局,内容由div代替),昵称(青春向上),说明(可上下滚动的一段文字,大意为欢迎来到我的空间),三个按钮(积极(查看)、消极(关闭)、中立(不再提示,无需实现,只布局))。要求苹果设计风格,简约好看,编写html代码
复制代码
布局口述累死人,可以让ai先用网页画草图,再把成品截图发给ai,让它使用java画出来。
ai提示词2
- 使用纯java代码创建自定义Dialog,布局如图,头像从assets中读取head.png,背景半透明,不可通过点击背景或返回键关闭。弹窗具有一定自适应能力,内容区字数少时,弹窗不能留有大量空白。内容区字数多时,弹窗显示竖直滚动条,适当美化。查看按钮的功能是打开https://bbs.binmt.cc/home.php?mod=space&uid=88062&do=profile链接,无需手动传递。按照上述要求编写工具类,mian只需简单调用。
复制代码
具体代码非常杂,还要修bug,不过做成后能凑合看。
效果+注入via
至此教程结束。
总结
此教程演示了使用as开发弹窗代码,通过mt提取dex和调用处,看完后相信你可以编写简单弹窗。但是弹窗只是软件开发中很基础的一部分,相信你不会只局限于一个小小弹窗,更多功能由你发掘,学习永无止境。
大佬思路分享
网络弹窗
结合本教程中的随机一言(从网络获取数据),和显示弹窗,组合出:从网络获取配置文件,根据文件判断是否显示弹窗,可用于更新弹窗、云控等。
html弹窗
江江弹窗2.1 源码已补上
别人弹窗是java硬画,这个是用webview显示网页,思路很开阔。
逗比_滑稽
教小白一种随机设备id的方法
虽然不是弹窗,但本质上都是注入代码。非常强大的工具,猜测使用了反射,非常高级。
赤〆夜
【实用教程】添加软件启动图
用MT添加软件悬浮窗
(「・ω・)「添加加群弹窗教程
【实用教程】DES加密字符弹窗添加与去除
꯭清꯭羽꯭ღ
清羽网络弹窗7.0
实战使用Log工具类
现在mt支持“注入日志记录”,但当年可没这功能,大佬遇事不决,自己手搓log工具。
꧁法外狂徒꧂
去除一些常见的引流弹窗大合集 全程修改dex
毒皇(iAg)
存档注入APP_v1.2
XuanRan
【实战演示】为软件添加按钮点击事件
尾声
相关资源还有很多,论坛资料多多,大家努力考古吧。
打开项目
解压资料中提供的项目代码,并使用as打开。as会自动下载依赖并构建,构建成功后即可运行,请耐心等待。
注:项目代码仅做演示,由于安卓碎片化严重,制作出的弹窗不一定可以在任何app上正常显示。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
查看全部评分
总评分:好评 +6
金币 +6
|