自动化程序手机版框架-ascript

我哪最开始搞自动化的程序,先是在windows ,然后是android 最开始用的框架是按键精灵,触动精灵,的。之后也了解了autojs ,冰狐智能。对于我个人来讲感觉都不咋地,因为咱python,java玩的多,所以我最后用的是ascript。

这玩意,不但用法简单,图色工具等测试工具全面,支持中控,而且可以无限开,就是每个机器地连下有点麻烦,最主要的是用的是python可以玩的花活的多咱熟悉啊。

而且后台和其它的一样都有中控,设备管理等,还有自己的数据库mysql,开发者可以直接创建一个,给自己的脚本用还可以搞模型训练目标检测(yolo)标注啥的这个可个大杀器哈哈哈,用起来也简单。

--开发后台注册地址 用户注册

这篇博客主要介绍一下ascript 的常见api 过下

开发插件安装

概述

这里先说下插件,这里必须地安装下,要不玩不了哈。除非你喜欢用三方的,咱管不了。这里它是去上网盘下插件包,咱们需要在pycharm从磁盘安装,就不多说了。走下连接直接下个就完了。百度网盘 请输入提取码

插件菜单位置

安装后可以在左侧看到这个插件

插件功能菜单

这个可以大概过下不难理解,要注意的是连接设备需要下ascript 客户端用于执行脚本代码等(下载 | AScript) 可以根据自己需要下载

必知的三种高级权限

动作指令

1. 直接 Root


 

Root 权限就像是手机的 “超级管理员密码”,有了它就能随意摆弄手机里的各种东西,想咋改就咋改。但这密码一般很难搞到,弄不好手机还会出毛病。不过用云手机就好多了,基本都能直接拿到这个 “密码”,让你放开了折腾。

2. 无障碍服务


 

无障碍服务权限就像给手机请了个听话的小秘书。开启权限很容易,真机也能轻松搞定。有了这小秘书,它就能按照你的要求帮你操作手机,比如点点屏幕、滑滑页面啥的。

3. 虚拟外设


 

虚拟外设得买专门的硬件,像外接手柄、键盘这类的,就好比给手机额外装了 “新手脚”。不过要让这些 “新手脚” 能正常使唤,就得在手机上开对应的权限,就像给 “新手脚” 办个合法 “身份证”。

概述

动作指令就是,模拟人的操作,比如点击屏幕某个点,滑动屏幕,还有智能手机其它几个能按的物理按钮等。

api介绍

这里大概列举常用的,过下,很简单。具体的我下面会给官方文档链接,自己可以看看。在提一嘴一般做动作操作最好加上范围随机延迟,还有操作的位置,要不瞎搞大数据会封的,你要是违反平台规则哦。

屏幕点击

这里dur 指定是延迟 x y是位置坐标下面也差不多

from ascript.android import action
# 点击坐标
# action.click(x:int,y:int,dur:int = 20):
action.click(2,33)
手指滑动
# 模拟手指滑动屏幕 从坐标(1,1) 滑动至坐标(2,2) ,耗时20毫秒
# action.slide(x:int,y:int,x1:int,y1:int,dur:int=20)
from ascript.android import action
action.slide(1,1,2,2)

# 这个是延迟的一般动作设置范围内延迟比较好,搞游戏容易被封
# 模拟手指滑动屏幕 从坐标(157,798) 滑动至坐标(946,834) ,耗时3000毫秒
from ascript.android import action
action.slide(157,798,946,834,3000)
输入框输入

这里简单说下选择器,和控件

  1. 选择器:用来查找指定类的控件资源,并且返回对象。这里一般使用工具里的控件检索工具来查看下
  2. 手机界面控件是屏幕上交互组件,像按钮能触发操作、文本框可输入内容等,但是游戏比较特殊,一般没有,除了个别地方,因为游戏很多是画的组件,自己探索不深究。
action.input(msg:str="",selector:Selector=None)
# 模拟在当前 ‘已获取焦点’的的文本框中输入‘你好’
from ascript.android import action
action.input("你好")

# 模拟在 控件检查器查到的 文本框中输入‘你好’
from ascript.android import action
from ascript.android.node import Selector

selector = Selector().id("xx.xx.xx/search_bar_text")
action.input("你好",selector)

按下/抬起/移动

# 按下
action.Touch.down(x,y,dur:int=20)
# 按下后往哪里移动
action.Touch.move(x, y, dur: int = 20)
# 抬起
action.Touch.up(x, y, dur: int = 20)
按键
# 模拟 模拟按键操作
#class
action.Key
# Home按键
action.Key.home()
# 返回按键
action.Key.back()
# 调出通知栏
action.Key.notifactions()
# 任务栏键
action.Key.recents()
# 关闭屏幕
action.Key.screenshot()
# 关闭屏幕
action.Key.lockscreen()
手指路径

这里是一般玩比较复杂的连续动作,比如在手机上用手写打字,只是个比喻哈。

# 连续 执行两个Path路径,中途不松手指
from ascript.android import action
from ascript.android.action import Path

line1 = Path(0,1000,True);
line1.moveTo(200,200) 
line1.lineTo(200,500)

# 创建另一个新的path路径 模拟 手指2
line2 = Path(1000,500);
line2.moveTo(200,500) 
line2.lineTo(500,500)

class listener:
    def onCompleted():
        gesture.perform(line2)
    def onCancelled():
        print("被中断取消了")

action.gesture([line1],listener)

捕获用户点击

这个一般录脚本动作可以用用。

# 捕获用户点击屏幕的坐标,给出提示文字,并取消屏幕闪烁
from ascript.android import action
p = action.catch_click("请点击屏幕任意位置",False)
print(p)

控件检索

控件查找器

就是和html 类似用id 类 路径点,名称包下所有等方式来获取控件。这里就直接贴几个代码列几个自己过下,具体的话看自己是什么场景,看下官方文档用合适的api。

from ascript.android.node import Selector

# 获取控件树
#class
Selector.dump(mode:int=0)
# 通过 id 约束
node =  Selector().id("com.aojoy.airscript:id/search_bar_text").find()
# 查找id 基于正则表达式
node =  Selector().id(".*search_bar_text$").find()
# 查文本的
node =  Selector().text("开发者").find()
# 根据类型 比如按钮 。输入框,文本等
nodes =  Selector().type("TextView").find_all()

图色

图色这里经常用图色工具,是通过ide插件里开,必用的东西属于,可以直接打开用用。

屏幕图像

屏幕图像这个重点是截屏,还有设置缓存很重要.缓存的话很常用,截屏不多说,说下缓存是什么意思就是比如截取物品背包图像后,要识都有什么物品,就截屏一次就够了,不需要多次截屏.

from ascript.android import screen
# s_cache	是否缓存 True:缓存 False:取消缓存
# bitmap	是否将一张android bitmap 作为图色缓存 默认为None,缓存当前屏幕 如填入Bitmap参数,所有图色方法都从这个Bitmap图像中检测
# file	图片文件地址	是否将一个图片文件作为图色缓存 默认为None,缓存当前屏幕如填入对应的图片文件地址,所有图色方法都从这个图片文件中检测
# screen.cache(is_cache:bool=False,bitmap=None,file=None)
# 打开屏幕缓存 这里开启后在截屏会使用首次截取的
screen.cache(True) 
# 关闭
screen.cache(False) 
# 将sd卡中的a.png图片作为屏幕图像缓存起来.
screen.cache(False,file=R.sd("a.png")) 
# 获取一张当前屏幕的内存截图,截图格式为
# screen.capture(x:int=None,y:int=None,x1:int=None,y1:int=None)
bitmap = screen.capture( 122,358,808,979)
# 图片转Base64数据
screen.bitmap_base64(bitmap=screen.capture())
# 图像转文件
screen.bitmap_to_file(path:str,bitmap=screen.capture(),quality=100)
# 文件转图片
screen.file_to_bitmap(path:str,sampleSize:int=1)

剩下的用的少就简单看下就行,一般玩的复杂用

# 获取图像指定坐标的颜色值s
# creen.get_color(x:int,y:int,bitmap = screen.capture())
# 获取R通道,G通道,B通道,A通道 10进制颜色值
# 图像所有色值
# screen.get_colors(bitmap = screen.capture())
# 区域颜色点数量
# screen.get_color_num(colors:str,rect:list=None,sim:float=0.9)
# 图片最大边缩放
# screen.bitmap_maxside(bitmap=screen.capture(),max_side_len=9999)
# Bitmap 转 Python Image
# screen.bitmap_to_pilimage(bitmap=capture())
# Bitmap 转 Opencv Image
# screen.bitmap_to_cvimage(bitmap=capture())
# Opencv Image 转 Bitmap
# screen.cvimage_to_bitmap(image)
# 创建一个颜色
# Color(color_argb:int)

图色识别

文字识别

很常用比如识别金钱数量,等级,任务属性等很常用

谷歌文字识别
from ascript.android.screen import Ocr
谷歌 MLKIT 引擎v2, 速度快,且准确度高. (源码版本:4.0)
# 参数		说明
# rect		识别范围
# pattern	regx	正则匹配
# bitmap	要识别的图片,默认为当前屏幕,如需传入指定图片,请传入Bitmap格式
# Ocr.mlkitocr_v2(rect: list = None, pattern: str = None bitmap=None):
# 没有设置范围就是全屏
res = Ocr.mlkitocr_v2()
if res:
    #循环打印识别到的每一个段落
    for r in res:
        print("文字:",r.text)
        print("文字中心坐标:",r.center_x,r.center_y)
        print("文字范围:",r.rect)

# 
百度飞桨v2

百度飞桨v2 文字识别引擎 ,速度快,精度中等

# 参数	类型	是否必填	说明
# rect	list	否	圈定屏幕中识别的范围
# pattern	str	否	匹配的正则表达式 如保留字符串中包含IT的识别结果:.*IT.*
# confidence	float	否	识别可信度:默认0.1
# max_side_len	str	否	如果指定最大边时,如1200,那么所有输入资源都会同比缩放最大边至1200px,再传入引擎识别
# bitmap	str	否	从指定的图片中识别 该Bitmap 可以从Screen.capture()获取
# file	str	否	从指定的文件中识别
# Ocr.paddleocr_v2(
#             rect:list=None,
#             pattern:str=None,
#             confidence:int=0.1
#             max_side_len:int=1200,
#             precision:int=16,
#             bitmap=None,
#             file:str=None):
from ascript.android.screen import Ocr
res =  Ocr().paddleocr_v2(rect=[40,122,714,659],pattern=".*程序.*",max_side_len=1600)
print(res)
if res:
    #循环打印识别到的每一个段落
    for r in res:
        print("文字:",r.text)
        print("可信度",r.confidence)
        print("文字中心坐标:",r.center_x,r.center_y)
        print("文字范围:",r.rect) # 这是一个int数组,可以这样取值 r.rect[0],r.rect[1],r.rect[2],r.rect[3]
百度飞桨v3

百度飞桨v3 文字识别引擎 ,速度慢,精度高

#Ocr.paddleocr_v3(
#             rect:list=None,
#             pattern:str=None,
#             confidence:int=0.1
#             max_side_len:int=1200,
#             precision:int=16,
#             bitmap=None,
#             file:str=None):
#         参数	类型	是否必填	说明
# rect	list	否	圈定屏幕中识别的范围
# pattern	str	否	匹配的正则表达式 如保留字符串中包含IT的识别结果:.*IT.*
# confidence	float	否	识别可信度:默认0.1
# max_side_len	str	否	如果指定最大边时,如1200,那么所有输入资源都会同比缩放最大边至1200px,再传入引擎识别
# bitmap	str	否	从指定的图片中识别 该Bitmap 可以从Screen.capture()获取
# file	str	否	从指定的文件中识别
from ascript.android.screen import Ocr
res =  Ocr().paddleocr_v3()
print(ots)
if res:
    #循环打印识别到的每一个段落
    for r in res:
        print("文字:",r.text)
        print("可信度",r.confidence)
        print("文字中心坐标:",r.center_x,r.center_y)
        print("文字范围:",r.rect) # 这是一个int数组,可以这样取值 r.rect[0],r.rect[1],r.rect[2],r.rect[3]
        
TesserAct 文字识别

这个有的字上面的都不行的时候可以考虑用自己做字库,不多赘述。

多点找色

这个还好一般,一般用多点比色就行

# 找到 一个符合特征点的位置 立刻返回
# FindColors.find(colors:str,rect:list=None,space:int=5,ori:int=2,diff:float=0.9)
# 参数	类型	是否必填	说明
# colors	str	是	颜色特征点, 通常用图色助手获取
# rect	list	否	圈定屏幕范围
# space	int	是	找色结果间距 默认:5像素 ,如果返回的结果,多个点位的像素值 在5像素内重合.则只保留一个
# ori	int	否	找色方向 1-8 个方向 ,2(默认):左上角到右下角,横向开始找色 详情见...
# diff	float	否	相似度 0-1 之间, 1为100%匹配 默认:0.9
from ascript.android.screen import FindColors
point = FindColors.find('634,2126,#05D395|675,2142,#05D395|889,2146,#05D395|939,2117,#05D395|868,2085,#05D395|652,2124,#05D294',rect=[82,2010,1005,2215])
if point:
    # 打印 x坐标 和 y坐标
    print(point.x,point.y)

# 找到全部点
参数	类型	是否必填	说明
colors	str	是	颜色特征点, 通常用图色助手获取
rect	list	否	圈定屏幕范围
space	int	是	找色结果间距 默认:5像素 ,如果返回的结果,多个点位的像素值 在5像素内重合.则只保留一个
ori	int	否	找色方向 1-8 个方向 ,2(默认):左上角到右下角,横向开始找色 详情见...
diff	float	否	相似度 0-1 之间, 1为100%匹配 默认:0.9 ,当图色工具中颜色带有偏色,则不会使用该值
# FindColors.find_all(colors:str,rect:list=None,space:int=5,ori:int=2,diff:float=0.9)
from ascript.android.screen import FindColors

points = FindColors.find_all('634,2126,#05D395|675,2142,#05D395|889,2146,#05D395|939,2117,#05D395|868,2085,#05D395|652,2124,#05D294',rect=[82,2010,1005,2215])
if points:
    # 打印 x坐标 和 y坐标
    for p in points:
        print(p.x,p.y)

多点比色

很重要比如打开游戏后,判断是不是加载完成进入登录界面,或者界面静态部分多取几个位置点点就可以判断当前界面是上面,比找图快太多了,计算量很小。

# 比色
参数	类型	是否必填	说明
colors	str	是	颜色特征点, 通常用图色助手获取
diff	float	否	颜色相似度 0-1 之间 默认0.9
# CompareColors.compare(colors:str,diff:float=0.9)
from ascript.android.screen import CompareColors

res = CompareColors.compare('339,342,#38D8A8|445,424,#FFFFFF|504,586,#FFFFFF')

if res:
    print('比色成功')
else:
    print('比色失败')
    
# 比对颜色,直到成功后返回结果 会阻塞线程
CompareColors.compare_until(colors:str,diff:float=0.9)
找图

这个常用比如找背包里的特定物品,然后使用等,api的话需要注意的是使用可信度参数还有多张图匹配,提高匹配准确度。

from ascript.android.screen import FindImages
from ascript.android.system import R
path = R.res("/img/a.png") # 这里替换为你的图片地址
res = FindImages.find(path)
if res:
    print("中心坐标:",res["center_x"],res["center_y"])
    print("相似度:",res["confidence"])
    print("在屏幕中的范围:",res["rect"])
# opencv中的模版匹配算法, 找色速度快, 不支持全分辨率
# FindImages.find_template(part_img:str,rect:list=None,confidence:int=0.1,rgb:bool=False)
# 全分辨率算法, 找色速度慢, 可以在任意设备上找到图像特征匹配的图
# FindImages.find_sift(part_img:str,rect:list=None,confidence:int=0.1)
# 先使用 模版匹配find_template ,如果找不到再使用全分辨率算法 find_全分辨率 查找
# FindImages.find_all(part_img:str,rect:list=None,confidence:int=0.1)
# opencv中的模版匹配算法, 找色速度快, 不支持全分辨率
# FindImages.find_all_template(part_img:str,rect:list=None,confidence:int=0.1,rgb:bool=False)
# 全分辨率算法, 找色速度慢, 可在所有设备上找到图像特征匹配的图像
# FindImages.find_all_sift(part_img:str,rect:list=None,confidence:int=0.1)
yolo目标检测

这里标注用的入口是在插件里web ide中上面菜单里面,就是画框的。这里上b站上找下视频。我就贴了个使用的例子,很简单用起来,主要是训练浪费时间。

from ascript.android.screen import YoLov5
# 注意,这里的 ‘微信跳一跳’就是训练的模型名称,1.5是模型的版本(需替换成你自己的模型与版本)
# 创建Yolov5 并加载模型文件
yolo = YoLov5("微信跳一跳:1.5")

while True:
    res = yolo.find_all()
    for r in res:
        print(r.label) # 目标名称
        print(r.prob) # 可信度
        print(r.x) # 坐标x
        print(r.y) # 坐标y
        print(r.w) # 目标宽度
        print(r.h) # 目标高度

边缘检测

简单来说就是匹配一个物体的框线,这个复杂逻辑会用到,属于高级的玩法自己研究下吧

opencv

不多说就是图像处理库直接在android用可以直接另外学习

UI交互

Web窗口

这个自动化程序界面搞的强大花里胡哨主要是这个,常用的也是这个。

#展示一个简单的Html页面
from ascript.android.ui import WebWindow
from ascript.android.system import R

def tunnel(k,v):
    print(k)
    print(v)

# 构建一个WebWindow 显示‘/res/ui/a.html’ 通信通道为tunnel 函数
w = WebWindow(R.ui('a.html'),tunnel)
w.show()
# 窗口的模式
# m=0 默认,窗口内和窗口外都可以获取点击触摸事件,但窗口外不可以调出键盘
# m=1 只有窗口内的点击触摸事件有效
# m=2 窗口内的所有点击触摸事件无效,并透传到窗口下
# m=3窗口内外都可以点击触摸,但窗口内不可以调起键盘
# m = -1 窗口载入进activity中.窗口内长按事件触发为系统原生方式
WebWindow(...).mode(mode:int=0)
web界面消息通道
# 设置消息通道,可以接收到js中传递的消息
WebWindow(...).tunner(pyfun)
# 设置窗口 宽 或 高
WebWindow(...).size(self,width=None,height=None)
# 设置UI背景色,默认为白色
WebWindow(...).background(color:str)
# 拖拽
WebWindow(...).drag(is_drag:bool=False)
# 遮罩
# 设置窗口遮罩层透明度,默认为0.5
WebWindow(...).dim_amount(dim:float=0.5)
# 引力与位置
# 可更改 窗口的引力方向,随着引力方向的改变. 窗口的位置 属性也会随着引力点改变.
WebWindow(...).gravity(gravity:int=None,offset_x:int=None,offset_y:int=None)
# 显示
WebWindow(...).show()
# 关闭
WebWindow(...).close()
# Python与Html交互
# 导包
from airscript.ui import WebWindow 
#构建与展示UI
w = WebWindow(R(__file__).res('/ui/a.html'))
w.show()

# 调用 javascript 中的 函数 fun1 ,并传入参数 "1111",2
w.call('fun1("111",2)')
# JavaScript 向 Python 传递数据
# <script>
#     //这里的 key,value 用户填入自定义的值 ,在 python 的WebWindow 构造参数 tunnel 中会回调
#     window.airscript.call('key',"value")
# </script>
# JavaScript 中的快捷方法
# airscript.close()	关闭当前窗口
# airscript.get("key")	获取 Python 中Kv 存储的数据,仅支持string数据
# airscript.save("key","value")	快速存储数据到本地,和Python Kv函数数据互通,仅支持string数据
对话框
from ascript.android.ui import Dialog
# Dialog.toast(msg,dur=3000,gravity=1|16,x=0,y=200,bg_color: str = None, color: str = None)
Dialog.toast('hello')
# 展示一个简单吐司提示,5秒后消失
Dialog.toast('hello',5000)
消息提示

from ascript.android.ui import Dialog
# Dialog.alert(msg:str,submit:str="确认")

# 案例1: 弹出一个信息提示框
Dialog.alert('您好','确认')
消息确认
# Dialog.confirm(msg:str, title:str =None, submit:str="确认", cancel:str= "取消")
# 弹出一个用户确认框
from ascript.android.ui import Dialog
res = Dialog.confirm('您确定要学习aslib吗?')
if res:
    print("确定")
else:
    print("取消")
文本输入
Dialog.prompt(msg:str="请输入信息",title:str=None,value:str=None,hint:str=None,submit:str="确认",cancel:str="取消")
# 弹出一个熟消息输入框
from ascript.android.ui import Dialog
res = Dialog.prompt('您确定要学习aslib吗?')
if res:
    print(res)
else:
    print("取消")

展示图片
# 展示一张 图片文件
from ascript.android.ui import ImageWindow
from ascript.android.system import R

ImageWindow.show(R.img("a.png"))
日志窗口
# 创建 日志窗口
Loger()
# 显示日志窗口
Loger().show()
# 隐藏日志窗口
Loger().close()
悬浮窗
# 显示
FloatWindow.show(x:float=None,y:float=None,dim:float=None)
FloatWindow.show()
# 更改悬浮窗位置
# x为20%屏幕宽度, y 为20%屏幕高度
FloatWindow.show(0.2,0.4)
# 隐藏悬浮窗
FloatWindow.hide()
# 注入按钮
# menu_id	str	是	按钮唯一id,随意填写
# menu_ico	str	是	按钮图标文件地址
# menu_click_listener	fun	是	按钮点击后的回调函数
# remove_system	bool	否	默认False不移除系统按钮, True:移除系统按钮
FloatWindow.add_menu(menu_id:str,menu_ico:str,menu_click_listener,remove_system:bool=False)
# 向悬浮菜单中新增按钮
def a():
    print("123")

FloatWindow.add_menu("123",R.img("a.png"),a)

通信

这里就提一嘴默认ascript是直接支持使用requests 和 websocket 包直接用就完了。

数据库

数据库是直接支持mysql的包,注册开发者后台可以直接建个mysql库用 地址用户注册

文件读写

文件操作和py自带的api一样就是文件路径需要 使用R.sd("文件路径")包下

from airscript.system import R
file = open(R.sd("a.txt"),mode='w')
# 上面这句代码意思:打开当前文件路径下的这个文件并采用写入的文件模式,当这个文件不存在的时候就会去创建
# w、w+、a+、a模式都能创建新文件
file.close()

多媒体

列几个简单的例子

from ascript.android import media
# 音量调节 percent是大小 
# type说下就是
# 音乐-3,
# 铃声-2,
# 系统-1,
# 通话-0 
# 警告-4
# 窗口顶部状态栏Notification-5
media.volume(percent:int,type:int =3)
# 获取音量大小
media.get_volume(type:int =3)
# 语音朗读
media.talk('自在老师你好')
# 播放音频
# 播放一个音频文件 
from ascript.android.system import R 
media.play(R.res("/media/aodi.wav")).stop()
# 设备震动
media.vibrate(time:int=200):
# 图片文件存储相册并更新
media.image_to_gallery(R.img("logo.png"))

意图

他可以启动应用,启动服务 等操作.直接引用官方代码可以扫一下

发短信

from airscript.intent import Intent
# 发短信
#导包
from android.content import Intent 
from ascript.android.system import R

it =  Intent(Intent.ACTION_VIEW) 
it.putExtra('sms_body', '你好这是短信内容');
it.setType('vnd.android-dir/mms-sms');

# 部分Activity 启动需要一个新的TASK ,通常都固定写这一行代码
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
R.context.startActivity(it);


抖音直播间跳转

# 通过 房间ID 跳转抖音直播间
# 导包
from android.content import Intent 
from ascript.android.system import R
from android.net import Uri

roomid = '6901450157649300232'
uri = Uri.parse("snssdk1128://live?room_id="+roomid);
it =  Intent(Intent.ACTION_VIEW,uri) 
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
R.context.startActivity(it);

跳转应用详情


from airscript.intent import Intent 
from ascript.android.system import R
from android.net import Uri
from android.provider import Settings

# 根据需求改变包名,即可跳转,跳转后,可点击停止程序等等.
intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData(Uri.fromParts("package", "com.aojoy.airscript", None))
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
R.context.startActivity(intent);

跳转设置界面

from airscript.intent import Intent 
from android.content import ComponentName
from ascript.android.system import R

intent = Intent()
package = "com.android.settings"
activity = "com.android.settings.Settings"
componentName = ComponentName(package, activity)
intent.setComponent(componentName)
intent.setAction("android.intent.action.VIEW");

# 这是固定的启动方法
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
R.context.startActivity(intent);

系统操作相关api

from ascript.android import system
# 关闭当前程序
system.exit()
# 重启
system.reboot()
# 启动应用
# 根据应用名称启动
system.open("微信")
# 根据包名启动
system.open("com.autonavi.minimap")
# 输入网址,用浏览器打开
system.browser("http://www.airscript.cn")
获取当前正在运行的APP,默认获取1分钟内打开的操作.
app_package = system.get_foreground_app()

Root指令

需要root权限可以执行命令,可以玩更多花样,权限更大

system.shell(adb_root:str)

云控

该部分API 可以让设备主动连接至官方运控 或 开发者自搭建的云控平台.连接后可在云端控制设备,远程操控设备,定时下发执行任务等.

from ascript.android import cloud_control
cloud_control.connect_to_as("你自己的开发者账号")
# 发数据
cloud_control.send(data:dict)
# 关闭云控
cloud_control.close()

插件

支持插件就是自己打包啥的,相当于包,可以去官网看下。我列几个可以重点关注下,比较好用的。

  1. ld 这个配置特征,还有可以用中文ai 用链式调用api比较优雅简单
  2. TomatoOcr:这个文字识别效果可以
  3. sync_projects_plug 局域网批量更新项目
  4. 自然语言大模型 这个是调大模型的,有热度提一嘴,我是没用过 清华,DeepSeek,百度大模型 轻松调用插件
  5. fsm 玩状态机的

结尾

(开发后台注册地址)用户注册

(官方文档)Android 自动化 | AScript

### JavaScript Hint Tools and Extensions JavaScript hinting tools play a crucial role in improving code quality by identifying potential issues early during development. These tools analyze source code statically without executing it, providing developers with warnings about problematic patterns or non-standard practices. #### JSHint One of the most popular static analysis tools for JavaScript is **JSHint**, which extends from its predecessor JSLint but offers greater flexibility through configurable options. When using environments such as WebStorm, configuring JSHint correctly ensures compatibility with newer ECMAScript standards like ES6 features including `let` declarations [^2]. To resolve errors related to unsupported language constructs, adjusting settings within IDEs can be necessary; specifically setting up environment configurations that recognize modern JavaScript versions. For instance, when encountering messages indicating certain keywords are only valid under specific conditions—such as `"use strict"` mode being required—it may indicate misconfiguration rather than actual bugs in your script files. Ensuring proper setup involves specifying appropriate parameters either via configuration files or directly inside comments at the top of each file: ```javascript /* jshint esversion: 6 */ ``` This directive tells JSHint to interpret subsequent lines according to ECMAScript 2015 specifications, thereby avoiding false positives regarding advanced syntax elements not recognized otherwise. #### Visual Studio Code Integration In addition to standalone applications, many integrated development environments support plugins enhancing their functionality concerning linting services. For example, users working on projects involving HTML/CSS/JS might benefit significantly from installing extensions tailored towards these technologies into platforms like Visual Studio Code. Such add-ons facilitate real-time feedback while editing documents alongside other productivity enhancements provided by Microsoft's editor suite [^1]. Developers seeking comprehensive solutions should explore offerings compatible with chosen workflows since different teams have varying requirements based upon project specifics and personal preferences.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静水深渊

随便

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值