本文最后更新于 2026年1月24日。
“李跳跳”这类应用的实现原理非常精巧且硬核。如果你想用 Flutter 开发一个类似的应用,技术上是可行的,但由于其核心逻辑属于 Android 底层机制,你需要结合原生开发(Kotlin/Java)来完成。
以下是详细的技术拆解和开发建议:
1. “李跳跳”是怎么实现跳过广告的?
“李跳跳”并不是从网络层面拦截广告(那是屏蔽广告),而是通过 Android 的 无障碍服务 (Accessibility Service) 模拟人的操作来“点击”广告。
核心原理
-
监听 UI 变化:当应用启动并显示开屏广告时,系统会触发
AccessibilityEvent。 -
查找关键节点:程序会扫描当前的屏幕控件树(Layout Tree),寻找包含“跳过”、“Skip”或者带有特定 ID/描述的按钮。
-
模拟点击:一旦找到对应的按钮,程序会立即发送一个
performAction(AccessibilityNodeInfo.ACTION_CLICK)命令,在纳秒级的时间内模拟手指点击。
注意: “李跳跳”不需要联网,因为它纯粹是在本地对屏幕内容进行文本匹配和点击操作。
2. 我能用 Flutter 开发吗?
答案是:可以,但不能只用 Flutter。
为什么需要原生代码?
Flutter 运行在 Dart 虚拟机中,而 Accessibility Service 必须在 Android 原生层声明并继承 AccessibilityService 类。
-
Flutter 的角色:负责 UI 界面(开关、设置、白名单管理等)。
-
原生层(Kotlin/Java)的角色:负责核心逻辑,包括监听系统事件、扫描屏幕文字和执行点击。
-
桥接:通过
MethodChannel让 Flutter 界面与原生无障碍服务进行通信。
开发难点
-
保活机制:此类应用必须长期常驻后台,否则会被安卓系统杀掉。你需要处理自启动权限、电池优化白名单等极其繁琐的适配。
-
权限获取:无障碍权限是安卓中权限等级极高的一种,用户必须手动去设置里深层开启,Google Play 对此类应用的审核也非常严格。
-
适配成本:不同 App 的“跳过”按钮可能是一个图片(没有文字)、也可能是倒计时。你需要建立一套复杂的匹配逻辑(坐标点击、模糊匹配等)。
3. 简单的开发步骤建议
如果你准备动手,可以按照以下路径尝试:
第一步:在 android 目录创建无障碍服务
你需要新建一个 MyAdSkipService.kt:
Kotlin
class MyAdSkipService : AccessibilityService() {
override fun onAccessibilityEvent(event: AccessibilityEvent?) {
val rootNode = rootInActiveWindow ?: return
// 递归查找带有“跳过”字样的节点
findAndClickSkip(rootNode)
}
private fun findAndClickSkip(node: AccessibilityNodeInfo) {
if (node.text?.toString()?.contains("跳过") == true) {
node.performAction(AccessibilityNodeInfo.ACTION_CLICK)
}
for (i in 0 until node.childCount) {
findAndClickSkip(node.getChild(i))
}
}
override fun onInterrupt() {}
}
第二步:配置 AndroidManifest.xml
必须声明权限和 intent-filter:
XML
<service
android:name=".MyAdSkipService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
第三步:Flutter 交互
使用 MethodChannel 检查服务是否开启,并跳转到设置页面让用户授权。
4. 法律与风险提示
在开发前,你需要了解:
-
不正当竞争:李跳跳此前停更是因为收到了大厂的律师函,法院通常认为这类软件干扰了其他 App 的商业模式。
-
安全性:无障碍权限可以读取屏幕上的所有内容(包括支付密码和聊天记录),因此这类软件很难获得用户的深度信任,建议完全开源以示清白。
你想先尝试实现一个最基础的“检查无障碍权限是否开启”的 Flutter Demo 吗?我可以为你提供具体的 Dart 和 Kotlin 桥接代码。