MIUI 12折腾minitouch,windows10环境

因为想跟随大佬的脚步搞一下手机强化学习 王者荣耀

卡在了minitouch这一步,由于minitouch 不支持android10及以上,必须跟随instruction安装服务才可以

具体英文步骤可以参考

GitHub - DeviceFarmer/STFService.apk: Monitor and perform various actions on your Android device. Not meant for actual user devices.Monitor and perform various actions on your Android device. Not meant for actual user devices. - GitHub - DeviceFarmer/STFService.apk: Monitor and perform various actions on your Android device. Not meant for actual user devices.https://github.com/DeviceFarmer/STFService.apk#building

然后安装服务必须要安装android studio 

然后下载 STFService.apk

git clone https://github.com/DeviceFarmer/STFService.apk.git

下载之后按照指示运行

./gradlew assembleDebug

但是这一步会报错,所以就用AS把文件夹打开,让其自动下载,看是否能够编译成功

不得不说AS这个速度是真的够慢的,各位开发Android的程序猿工资高不是没有道理,等这个实在太心焦了

下载完成之后 直接build 报错,

那就先不管他,用AS的terminal按照指示运行一下,结果提示

Gradle 7.2 requires Java 8 or later to run. You are currently using Java 7.

囧,再去安装一下最新的 java,当然了 安装完毕之后要把 JAVA_HOME的path改成最新的版本,然后验证一下版本是否已经更改,更改之后重启AS

这时运行还是会报错,因为build_tools没有被accept, 所以按照要求,选择tools-sdk manager,将相应的sdk tools 30.0.2及以上版本勾选安装即可

然后再次运行gradlew 编译成功,只不过会提示api有过期,不知道后面会不会再有坑 

然后运行 

gradlew installDebug

即可,注意手机要连接电脑,并且打开通过usb安装apk功能,这时会弹出提示是否安装,10s内点击确认即可,(强烈建议做好之后把这个选项去掉哦,防止后面手机丢了被人刷机)

提示将app-debug.apk安装成功,而且这个apk是no lauch icon的,怪不得我找不到apk安在哪里了

然后要启动两个service,如何启动呢?

按照指示运行 

adb shell am startservice --user 0 \
    -a jp.co.cyberagent.stf.ACTION_START \
    -n jp.co.cyberagent.stf/.Service

提示startservice error

Exception occurred while executing 'startservice':
java.lang.IllegalArgumentException: No intent supplied

继续查呗,根据这个提示应该是我们的命令行不能多行,只用一行的话,可以成功

adb shell am startservice --user 0  -a jp.co.cyberagent.stf.ACTION_START  -n jp.co.cyberagent.stf/.Service

https://github.com/androidthings/sample-tensorflow-imageclassifier/issues/9icon-default.png?t=LA46https://github.com/androidthings/sample-tensorflow-imageclassifier/issues/9

这样的话,提示 

Starting service: Intent { act=jp.co.cyberagent.stf.ACTION_START cmp=jp.co.cyberagent.stf/.Service }
Error: app is in background uid null

这么看起来应该是已经运行成功失败了,查了一下 Android26以后不允许用startservice 启动 ,我们试一下 ,在我怀疑没有安装成功的时候,通过设置-应用管理里面找到了STFService,说明安装是成功的了

然后还有一个古早的issue,不知道对其他人有没有用

https://github.com/openstf/stf/issues/407icon-default.png?t=LA46https://github.com/openstf/stf/issues/407 

adb shell am start-foreground-service

提示Not Found . no service started ,关键我这个只有后台,没有前台啊?

简书上说应该先启动apk,再启动service,但是启动了apk,service依然找不到啊,在这里我决定,设置apk自启动的情况下,将手机重启一下,果然重启之后,提示成功!

Starting service: Intent { act=jp.co.cyberagent.stf.ACTION_START cmp=jp.co.cyberagent.stf/.Service }

然后继续下一步

这里需要检查一下

运行 

adb forward tcp:1100 localabstract:stfservice

这样子的话 服务应该在 1100端口开启成功了,然后connect即可 ,这时候打开手机可以看到STFService is running 的提示

nc localhost 1100

但这时又报错了,nc这个命令找不到?太棒了,居然是linux下面的命令,先不管他跳过

早知道切换ubuntu来搞事了

后面成功安装之后 ,监听了乱码。。要换一个成熟的cmd才可以

所以呢,下一步要启动agent,有一丢丢的复杂(官网说的,现在用windows就更复杂一些了)

运行

adb shell pm path jp.co.cyberagent.stf | \
    tr -d '\r' | awk -F: '{print $2}'

需要注意到,我们后面的命令是没有的,所以只运行第一句即可

我这里得到的位置是 

package:/data/app/~~4ivWI8g_C36NgJZ09hAesg==/jp.co.cyberagent.stf-VGHYjSvLJGeV0xoDQy_uRQ==/base.apk

大胆猜测大家的位置都差不太多 

然后呢下一步 

adb shell export CLASSPATH="$APK"\; \
    exec app_process /system/bin jp.co.cyberagent.stf.Agent

我们又有命令运行不了了

这时,回过头看一下,这个apk安装成功之后,service启动了,是否可以装minitouch然后把后面的步骤跳过呢?但是从instruction来看,

you need to take care of running the service and agent, before running minicap.

如果windows不行 只能切换到ubuntu下面搞了

先尝试运行后面的步骤 

adb forward tcp:1090 localabstract:stfagent

 提示1090 也不知道是不是算运行成功

然后要run一下minicap (并不知道为什么说是run minicap 下面确实将minitouch推送到device上)

adb shell getprop ro.product.cpu.abi

可以给出你自己对应的cpu型号 然后

adb push libs/$ABI/minitouch /data/local/tmp/

将对应的ABI下的minitouch推送到tmp文件夹中 

然后继续运行 

adb shell /data/local/tmp/minitouch

会报错! 因为我们的版本是android11, 怎么又绕回来了。。

但是现在运行不一样了 

open: Permission denied
Unable to open device /dev/input/event7 for inspectionopen: Permission denied
Unable to open device /dev/input/event6 for inspectionopen: Permission denied
Unable to open device /dev/input/event5 for inspectionopen: Permission denied
Unable to open device /dev/input/event1 for inspectionopen: Permission denied
Unable to open device /dev/input/event2 for inspectionopen: Permission denied
Unable to open device /dev/input/event4 for inspectionopen: Permission denied
Unable to open device /dev/input/event0 for inspectionopen: Permission denied
Unable to open device /dev/input/event3 for inspectionUnable to find a suitable touch device
using Android InputManager

注意最后一句,using input manager  ,如果agent没有启动,会提示connection failed

所以直接运行socket 版本的命令试一下 

adb forward tcp:1111 localabstract:minitouch

所以,如何验证我到底是不是把minitouch安装成功了呢?

迫于无奈还是下一个nc 吧 

netcat 1.11 for Win32/Win64icon-default.png?t=LA46https://eternallybored.org/misc/netcat/下载 解压 设置环境变量 

nc安装之后的测试通信可以看Linux网络命令必知必会之瑞士军刀 nc(netcat) - 猿大白 - 博客园本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 nc,全https://www.cnblogs.com/bakari/p/10898604.html

 启动好之后,顺序执行 minitouch的一系列操作

adb shell /data/local/tmp/minitouch
adb forward tcp:1111 localabstract:minitouch
nc localhost 1111

现在可以确认 minitouch已经安装成功了,那么就可以参考他人的minitouch教程 

STF-minitouch的使用_saii的专栏-CSDN博客_minitouch我们经常会遇到这样子的情况,需要演示一些手机上的一些界面的时候。不能够把手机上的影像投影到电脑上,同时在电脑上操作手机。也可能是我了解的比较少吧。最近在论坛上看到了 [STF 框架之 minitouch 工具] (https://testerhome.com/topics/4400) 其实里面已经介绍的很详细了,只是使用C#的来实现的。对于c#确实不太熟悉,所以就拿了 minicap_java Dhttps://blog.csdn.net/qq744746842/article/details/50950301STF 框架之 minicap 工具 · TesterHomehttps://testerhome.com/topics/3115STF 框架之 minitouch 工具 · TesterHomehttps://testerhome.com/topics/4400但是他们都是针对老版本的,也就是说直接操作minitouch,现在minitouch通过inputmanager和手机进行交流,这个信息流我没搞懂啊? minitouch和Agent/Service之间的通信顺序是什么呢?

总之我现在在minitouch界面 发的都没有反应

using Android InputManager
v
d 0 10 10 50
m 0 10 10 100
m 0 10 10 100\n
m 0 10 10 100 \n
m 0 100 100 50\n

我怀疑是端口问题 那我们再尝试看看?

经过一番摸索 还是要运行 

adb forward tcp:1111 localabstract:minitouch
nc localhost 1111

这时运行就会有一些和Minitouch主页接近的提示了 包括 version 以及pid

如果有输入的话,在Agent 的界面,有相应的反应,虽然手机还是没有操作 

不过呢 在qq的看点页面 始终没办法给个反应 灵机一动 返回主页面进行尝试,成功了哦?

d 0 100 100 50\n
c

commit 之后才会有动作 我们来录个屏看一看

好!告一段落,然后研究一下键盘的映射和pyminitouch相关 再继续

现在不知道是不是需要把minicap一起用上,毕竟我希望先有自己的训练数据,这样子给AI打个样,会更好一些,如果minicap可以把键位映射给省去,就更好了

总结一下:

Service和Agent启动以后,minitouch也转发到Agent监听的窗口,然后通过启动的minitouch 发送按键,目前用的是4个cmd窗口

不知道能不能减少

[server]
adb shell am start-foreground-service --user 0 -a jp.co.cyberagent.stf.ACTION_START -n jp.co.cyberagent.stf/.Service
adb forward tcp:1100 localabstract:stfservice
nc64 localhost 1100

[agent]
adb forward tcp:1090 localabstract:stfagent
adb shell pm path jp.co.cyberagent.stf
adb shell export CLASSPATH="package:/data/app/~~xNM5OyPoTlGp65bZ9WdgJw==/jp.co.cyberagent.stf-W2c4h9a5TaG0tdkexyFq6A==/base.apk";exec app_process /system/bin jp.co.cyberagent.stf.Agent

[minitouch]
adb shell /data/local/tmp/minitouch

[minitouch-2]
adb forward tcp:1090 localabstract:minitouch
nc localhost 1090

最终在minitouch-2界面输入, 

d 0 100 100 50\n
c

对应的手机就有反应

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>