常见问题
# 常见问题
这里收录了一些常见问题,如果你的问题不在此列,请尝试右上角搜索文档,查阅相关文档;或者在官方博客、搜索引擎、自带示例中搜索。
在查阅文档、网络资料等均未找到答案时,你可以尝试在官方QQ群、官方频道(论坛)中求助,但请注意:
提问之前请查阅应用内自带示例(示例支持搜索)、商店(也支持搜索)、官方文档、官方博客、搜索引擎等,是否已经包含了你的问题答案
不要用“不能用”、“报错”等含糊字眼,请直接贴出具体代码,具体错误截图或文本(错误需要完整!),运行日志
请提供你的Auto.js Pro版本(不要说“最新”,请说具体版本号)、系统、Android版本
怀疑是bug的,请先更新到群文件、官网的最新版本尝试是否仍然有问题
# 显示Toast信息时,自动加上了应用名称前缀
这是定制系统(比如小米、华为)的特性,而非Auto.js自身添加的前缀。
# 在后台时无法显示Toast
这是系统自身的限制,你可以尝试授予应用通知权限。另外,从Android 11开始,自定义View的Toast内容将无法在后台显示。
# 在后台时launchApp等无反应
从Android 10开始(部分国内厂商系统可能更早),应用无法在应用启动其他应用、自身界面,因此,launch、launchApp等代码会无反应。
部分国内厂商系统中有一个“后台启动界面”的权限,如果你在应用的权限设置中找到它,可以尝试开启此权限;或者开启“自启动”、“后台启动”等权限。
# 在后台时无法读写剪贴板
从Android 10开始,应用无法在后台读写剪贴板。如果你在后台时需要和用户交互并读写剪贴板,可以尝试使用悬浮窗获取焦点,再读写剪贴板。
# 代码运行一段时间后就自动停止,没有任何报错、崩溃
首先你需要确定,你的代码是真的没有报错,你可以将日志目录设置到sdcard(参见setGlobalLogConfig),查看日志文件的内容。
一旦你确定代码是运行一段时间(一般几个小时以上)自动停止,那么有几种原因:
内存不足
这可能是设备本身的内存较低,或者是代码中有内存泄露。内存泄露又有多种情况:
在Pro 9.2及以前的版本,包括免费版,引擎自身有内存泄露。请更新到Pro 9.3以上版本。
代码自身有内存泄露,比如反复创建对象等。典型的错误代码有:
被系统杀死
比如消耗资源较高长时间超过100% CPU运行,消耗较高的电量,被系统杀死;或者没有开启前台服务、没有界面、悬浮窗等情况被系统认为低优先级而杀死。
这些情况下除了加入白名单、开启前台服务,保持充电状态时,还有用一些异步方式(比如第二代API)来代替,减少耗电和资源消耗。
其他异常
你可以用Logcat来查看进程退出的信息。一般来说,不管是内存不足、被系统杀死还是应用崩溃,在Logcat中都有相关日志。
Logcat一般需要在电脑上使用adb命令,在手机上则需要root权限才能查看完整的日志。
# 运行脚本时出现"Module toast not found"或者"missing ; before statement"
通常这是因为使用第一代引擎去运行第二代API的脚本。你需要将文件名改名为".node.js"结尾的文件,或在文件前面加上`"nodejs"`;。
请查阅第二代API的文档。
# 如何定时运行、根据特定条件自动运行脚本
点击脚本右边的菜单按钮->更多->任务即可设置一个脚本任务。任务可以是定时任务,也可以是开机自动运行、解锁屏幕等条件。
但是必须保持Auto.js Pro后台运行,给予自启动白名单、电源管理白名单等,参见不要杀死我的APPopen in new window。
# 打包后如何设置任务、开机启动
使用代码将文件加入任务,可以设置定时任务或者开机自启动等任务,参见定时与任务。
# 任务如何获取外部参数
如果一个脚本是用任务触发启动的,比如任务中的特定事件(网络状态变化等)触发而启动的,则可以通过`engines.myEngine().execArgv.intent`获取启动的intent,从而获取外部参数。
# 如何把图片和脚本一起打包,或者打包多个脚本
如果除了单脚本以外还有其他脚本、图片、音乐等资源一起打包,则需要使用项目功能。
点击Auto.js Pro的"+"号,选择项目,填写项目名称、包名等信息以后,点击"√"即可新建一个项目。可以在项目中放多个脚本、模块、资源文件,点击项目工具栏的apk打包图标即可打包一个项目,点击工具栏可以重新配置项目。
例如,ui中的图片控件要引用同一文件夹的2.png图片则为`<img src="file://2.png"/>`。Auto.js内置的函数和模块都支持相对路径,但是,其他情况则需要使用`files.path()`函数来把相对路径转换为绝对路径。
# 如何使打包的应用隐藏日志界面
打包时在打包配置中勾选隐藏日志界面即可。一般来说,建议脚本不要没有任何界面,否则一些依赖界面的功能会出现错误,或者是容易被系统杀死。
# Auto.js自带的模块和函数中没有的功能如何实现
由于Auto.js支持直接调用Android的API,对于Auto.js没有内置的函数,可以直接通过修改Android代码为JavaScript代码实现。例如旋转图片的Android代码为:
```
import android.graphics.Bitmap;
import android.graphics.Matrix;
public static Bitmap rotate(final Bitmap src,
final int degrees,
final float px,
final float py) {
if (degrees == 0) return src;
Matrix matrix = new Matrix();
matrix.setRotate(degrees, px, py);
Bitmap ret = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
return ret;
}
```
转换为JavaScript的代码后为:
```
importClass(android.graphics.Bitmap);
importClass(android.graphics.Matrix);
function rotate(src, degrees, px, py){
if (degrees == 0) return src;
var matrix = new Matrix();
matrix.setRotate(degrees, px, py);
var ret = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
return ret;
}
```
有关调用Android和Java的API的更多信息,参见W
# 写脚本必备神器
## 1. vscode
地表最强 代码编辑器
必知必会
搜索文件
比较文件
## 2. android studio
Android集成开发工具
对写脚本有用的功能
把java 转为jar 或者 dex, 供脚本使用
查找java类
预览xml界面, 成功后移植到脚本UI
## 3. AnLink
手机投屏到电脑的软件, 可以usb投屏, 也可以无线投屏
## 4. apipost
http接口测试
## 5. ScriptGraphicHelper
图色工具
## 6. GifCam
录制视频, 输出gif动图, 给别人展示脚本效果
有时候会图片里会出现大片的绿色,
后来我就用了 屏幕录像机(oCam), 这个效果更好
## 7. uTools
工具大全
我主要用来取色, 和查看autojs文档, 还有便签功能
## 8. HexEditXP
十六进制编辑器
## 9. mt管理器
破解反编译, 查看dex, 添加app权限, 添加dex文件, 签名, 超神工具
## 10. FV文件浏览器
查找和浏览手机上的文件
## 11. VisualEditor
autojs脚本可视化界面编辑器
查找控件的属性, 也很方便
## 12. 文档类
看本文档
[安卓官方文档](https://developer.android.google.cn/docs)
# 无障碍检测
【来自掌玩小子】

什么是无障碍功能
无障碍功能是Android系统开放给第三方应用的界面内容监控API,当应用在特定界面上检测到某个控件、某张图片等时,可以对其进行输入、点击等事件操作的自动化功能,初衷是好的,应对一些手惰疾病的用户。但由于应用环境的复杂性,目前越来越多的敏感APP开始对其的状态进行检测。
什么说无障碍的检测是个迷?
根据我对大量的文章的研读和综合解析,获取Android系统上无障碍功能的状态和列表的一般方法是:

得到的结果如下:

由此可见,确实可以获取开启无障碍功能的程序列表,这是我的模拟器上测试的。
但是有一点这个检测需要一个敏感权限:
READ_SECURE_SETTINGS


可能会出现隐私合规问题,所以大厂肯定不会轻易去索取这个权限。很多群友在使用脚本时一出现封号、死号、利益无效等失败现象时,都惯性认为是“无障碍检测”,其实我觉得更多几率是风控的综合作用而已,比如Root、VNP、程序列表、手势轨迹、操作频率等都能检测你。
怎么规避无障碍检测
当然首先你要排除掉其他容易被检测的环境,比如Root、Xposed、Magisk、KenerlSU、Lsposed、Riru等。
如果你的手机有Root,可以看下这篇帖子:[一个 Android 无障碍功能和 Chrome 浏览器的 Bug - V2EX](https://www.v2ex.com/t/826317)
如果你的手机没有Root,建议你对开启无障碍功能的service组件名称进行混淆,也就是这个名字:

Auto.jsPro打包的程序,这个名称都是com.stardust.autojs.core.accessibility.AccessibilityService
怎么规避?就是使用Pro9.3.11打包的时候,将“混淆组件”的选项勾上:

这样你打包出来的无障碍功能组件的service服务名称就不一样了,从而规避通用检测,当然,还有特征,比如service组件服务的结尾仍然是.AccessibilityService,MT管理器组件的名称是:bin.mt.plus/l.还有就是Auto.jsPro打包后脚本运行的进程名称是:script结尾,再怎么改就看自己了。