前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小游戏 跳一跳 Android 插件分析开发测试 adb 命令

微信小游戏 跳一跳 Android 插件分析开发测试 adb 命令

作者头像
iOSDevLog
发布2018-05-17 11:16:34
9000
发布2018-05-17 11:16:34
举报
文章被收录于专栏:iOSDevLogiOSDevLog

screenshot

源码:https://github.com/iOSDevLog/Jump 现在跳得准了。

测试:https://github.com/iOSDevLog/Jump/releases/download/1.0/Jump.apk

视频:https://weibo.com/tv/v/FD5JIDeTO?fid=1034:be8ac5577f9d183858300b1b18a0c782

现在的微信跳一跳小游戏都是通过 PC 端破解的,于是我就写了一个只用 Android 手机就能破解的插件。

如果10秒还不跳,重新回到插件主页再回到跳一跳试试 。

现在的微信跳一跳小游戏都是通过 PC 端破解的,于是我就写了一个只用 Android 手机就能破解的插件。

【建议】应该还可以通过Accessibility直接在手机端实现

分析


kotlin, Android Studio, Accessibility, adb, root

Accessibility

https://developer.android.com/guide/topics/ui/accessibility/services.html

Accessibility 可以用来辅助操作,自动化测试等,可以参考微信抢红包插件。

我们可以监测微信,如果是跳一跳界面就触发插件。

查了一下文档,好像只有长按,不能自己控制时间。用 Accessibility 实现跳跃是不行了。

adb

如果是连接 PC 端,可以通过 adb 命令截图,模拟跳跃的长按(点击拖动)操作。

代码语言:javascript
复制
input swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen) # 模拟长按
screencap <filename> # 保存截屏到手机

开发


用 Android Studio 创建一个新的项目。

创建一个 AccessibilityService 子类。

manifests

代码语言:javascript
复制
        <service
            android:name=".JumpAccessibilityService"
            android:enabled="true"
            android:exported="true"
            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>

xmo/accessibility.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeWindowStateChanged"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"
    android:notificationTimeout="100"
    android:packageNames="com.tencent.mm" />
代码语言:javascript
复制
package iosdevlog.com.jump

import android.accessibilityservice.AccessibilityService
import android.view.accessibility.AccessibilityEvent

class JumpAccessibilityService : AccessibilityService() {
    override fun onInterrupt() {
    }

    override fun onAccessibilityEvent(event: AccessibilityEvent?) {
    }

}

测试 adb 命令

代码语言:javascript
复制
    fun adbCommand(commands: Array<String>) {
        try {
            process = runtime.exec("su")
            val os = DataOutputStream(process?.outputStream)

            os.let {
                for (command in commands) {
                    os.write(command.toByteArray())
                    os.writeBytes("\n")
                    os.flush()
                }
                os.writeBytes("exit\n")
                os.flush()
                process?.waitFor()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

在 AndroidTest 下面添加测试

代码语言:javascript
复制
@Test
fun adbCommand() {
    Utils.screencap()
    val bitmap = BitmapFactory.decodeFile(Utils.SCREENSHOT_LOCATION)
    assertNotNull(bitmap)
    assert(bitmap.width > 0)
}

报错 :

Error:Gradle: failed to create directory '...'

解决方法:

gradle.properties 添加 android.enableAapt2=false

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析
    • Accessibility
      • adb
      • 开发
      • 测试 adb 命令
        • 在 AndroidTest 下面添加测试
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档