Added: Root automator, custom theme color, some helps
This commit is contained in:
13
app/src/main/assets/help/catalogue.json
Normal file
13
app/src/main/assets/help/catalogue.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"main" : [
|
||||
{"title":"语法"},
|
||||
{"title":"JavaScript教程"},
|
||||
{"title":"自动操作函数"},
|
||||
{"title":"一般常用函数"},
|
||||
{"title":"控制台"},
|
||||
{"title":"UI(用户界面)"},
|
||||
{"title":"驻留模式与无障碍服务委托"},
|
||||
{"title":"shell命令"},
|
||||
{"title":"需要Root权限的自动操作函数"}
|
||||
]
|
||||
}
|
||||
358
app/src/main/assets/help/documentation/shell命令.md
Normal file
358
app/src/main/assets/help/documentation/shell命令.md
Normal file
@@ -0,0 +1,358 @@
|
||||
shell命令是通过shell函数运行的命令。等同于"adb shell"。shell函数的参数如下:
|
||||
## shell(cmd[, root])
|
||||
* cmd \<String\> 要执行的命令
|
||||
* root \<Boolean\> 是否以root权限运行,默认为false。
|
||||
返回运行一个执行结果。该返回值一般不会用到,其属性如下:
|
||||
* code \<Number\> 错误码。执行成功时为1,失败时为0。
|
||||
* result \<String\> 运行结果。
|
||||
* error \<String\> 运行的错误信息。例如执行需要root权限的命令但没有授予root权限会返回错误信息"Permission denied"。
|
||||
|
||||
例如``。(强制停止微信)
|
||||
示例:
|
||||
```
|
||||
var result = shell("am force-stop com.tencent.mm", true);
|
||||
if(result.succeed){
|
||||
toast("执行成功");
|
||||
}else{
|
||||
toast("执行失败!请到控制台查看错误信息");
|
||||
err(result.error);
|
||||
openConsole();
|
||||
}
|
||||
```
|
||||
|
||||
以下关于shell命令的资料来自[AndroidStudio用户指南: 发出shell命令](https://developer.android.com/studio/command-line/adb.html#shellcommands)。
|
||||
|
||||
目录:
|
||||
* [am命令](#am)
|
||||
* [intent 参数的规范](#IntentSpec)
|
||||
* [应用包名](#PackageName)
|
||||
* [pm命令](#pm)
|
||||
* [其他命令](#others)
|
||||
|
||||
<h2 id="am">am命令</h2>
|
||||
|
||||
am命令即Activity Manager命令,用于管理应用程序活动、服务等。
|
||||
|
||||
**以下命令均以"am "开头,例如"shell(\"am start -p com.tencent.mm\");"(启动微信)**
|
||||
|
||||
### start [options] intent
|
||||
启动 intent 指定的 Activity(应用程序活动)。
|
||||
请参阅 [intent 参数的规范](#IntentSpec)。
|
||||
|
||||
选项包括:
|
||||
|
||||
* -D:启用调试。
|
||||
* -W:等待启动完成。
|
||||
* --start-profiler file:启动分析器并将结果发送到 file。
|
||||
* -P file:类似于 --start-profiler,但当应用进入空闲状态时分析停止。
|
||||
* -R count:重复 Activity 启动 count 次数。在每次重复前,将完成顶部 Activity。
|
||||
* -S:启动 Activity 前强行停止目标应用。
|
||||
* --opengl-trace:启用 OpenGL 函数的跟踪。
|
||||
* --user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
|
||||
|
||||
### startservice [options] intent
|
||||
启动 intent 指定的 Service(服务)。
|
||||
请参阅 [intent 参数的规范](#IntentSpec)。
|
||||
选项包括:
|
||||
|
||||
* --user user_id | current:指定要作为哪个用户运行;如果未指定,则作为当前用户运行。
|
||||
|
||||
### force-stop package
|
||||
强行停止与 package([应用包名](#PackageName))关联的所有应用。
|
||||
|
||||
### kill [options] package
|
||||
终止与 package([应用包名](#PackageName))关联的所有进程。此命令仅终止可安全终止且不会影响用户体验的进程。
|
||||
选项包括:
|
||||
|
||||
* --user user_id | all | current:指定将终止其进程的用户;如果未指定,则终止所有用户的进程。
|
||||
* kill-all 终止所有后台进程。
|
||||
|
||||
### broadcast [options] intent
|
||||
发出广播 intent。
|
||||
请参阅 [intent 参数的规范](#IntentSpec)。
|
||||
|
||||
选项包括:
|
||||
|
||||
* [--user user_id | all | current]:指定要发送到的用户;如果未指定,则发送到所有用户。
|
||||
|
||||
### instrument [options] component
|
||||
使用 Instrumentation 实例启动监控。通常,目标 component 是表单 test_package/runner_class。
|
||||
选项包括:
|
||||
|
||||
* -r:输出原始结果(否则对 report_key_streamresult 进行解码)。与 [-e perf true] 结合使用以生成性能测量的原始输出。
|
||||
* -e name value:将参数 name 设为 value。对于测试运行器,通用表单为 -e testrunner_flag value[,value...]。
|
||||
* -p file:将分析数据写入 file。
|
||||
* -w:先等待仪器完成,然后再返回。测试运行器需要使用此选项。
|
||||
* --no-window-animation:运行时关闭窗口动画。
|
||||
* --user user_id | current:指定仪器在哪个用户中运行;如果未指定,则在当前用户中运行。
|
||||
* profile start process file 启动 process 的分析器,将结果写入 file。
|
||||
* profile stop process 停止 process 的分析器。
|
||||
|
||||
### dumpheap [options] process file
|
||||
转储 process 的堆,写入 file。
|
||||
|
||||
选项包括:
|
||||
|
||||
* --user [user_id|current]:提供进程名称时,指定要转储的进程用户;如果未指定,则使用当前用户。
|
||||
* -n:转储原生堆,而非托管堆。
|
||||
* set-debug-app [options] package 将应用 package 设为调试。
|
||||
|
||||
选项包括:
|
||||
|
||||
* -w:应用启动时等待调试程序。
|
||||
* --persistent:保留此值。
|
||||
* clear-debug-app 使用 set-debug-app 清除以前针对调试用途设置的软件包。
|
||||
|
||||
### monitor [options] 启动对崩溃或 ANR 的监控。
|
||||
选项包括:
|
||||
|
||||
* --gdb:在崩溃/ANR 时在给定端口上启动 gdbserv。
|
||||
### screen-compat {on|off} package
|
||||
控制 package 的屏幕兼容性模式。
|
||||
|
||||
### display-size [reset|widthxheight]
|
||||
替换模拟器/设备显示尺寸。此命令对于在不同尺寸的屏幕上测试您的应用非常有用,它支持使用大屏设备模仿小屏幕分辨率(反之亦然)。
|
||||
示例:
|
||||
```
|
||||
shell("am display-size 1280x800", true);
|
||||
|
||||
```
|
||||
### display-density dpi
|
||||
替换模拟器/设备显示密度。此命令对于在不同密度的屏幕上测试您的应用非常有用,它支持使用低密度屏幕在高密度环境环境上进行测试(反之亦然)。
|
||||
示例:
|
||||
```
|
||||
shell("am display-density 480", true);
|
||||
```
|
||||
### to-uri intent
|
||||
将给定的 intent 规范以 URI 的形式输出。
|
||||
请参阅 [intent 参数的规范](#IntentSpec)。
|
||||
|
||||
### to-intent-uri intent
|
||||
将给定的 intent 规范以 intent:URI 的形式输出。
|
||||
请参阅 intent 参数的规范。
|
||||
|
||||
<h2 id="IntentSpec"> intent 参数的规范 </h2>
|
||||
对于采用 intent 参数的 am 命令,您可以使用以下选项指定 intent:
|
||||
|
||||
* -a action
|
||||
指定 intent 操作,如“android.intent.action.VIEW”。此指定只能声明一次。
|
||||
* -d data_uri
|
||||
指定 intent 数据 URI,如“content://contacts/people/1”。此指定只能声明一次。
|
||||
* -t mime_type
|
||||
指定 intent MIME 类型,如“image/png”。此指定只能声明一次。
|
||||
* -c category
|
||||
指定 intent 类别,如“android.intent.category.APP_CONTACTS”。
|
||||
* -n component
|
||||
指定带有软件包名称前缀的组件名称以创建显式 intent,如“com.example.app/.ExampleActivity”。
|
||||
* -f flags
|
||||
将标志添加到 setFlags() 支持的 intent。
|
||||
* --esn extra_key
|
||||
添加一个 null extra。URI intent 不支持此选项。
|
||||
* -e|--es extra_key extra_string_value
|
||||
添加字符串数据作为键值对。
|
||||
* --ez extra_key extra_boolean_value
|
||||
添加布尔型数据作为键值对。
|
||||
* --ei extra_key extra_int_value
|
||||
添加整数型数据作为键值对。
|
||||
* --el extra_key extra_long_value
|
||||
添加长整型数据作为键值对。
|
||||
* --ef extra_key extra_float_value
|
||||
添加浮点型数据作为键值对。
|
||||
* --eu extra_key extra_uri_value
|
||||
添加 URI 数据作为键值对。
|
||||
* --ecn extra_key extra_component_name_value
|
||||
添加组件名称,将其作为 ComponentName 对象进行转换和传递。
|
||||
* --eia extra_key extra_int_value[,extra_int_value...]
|
||||
添加整数数组。
|
||||
* --ela extra_key extra_long_value[,extra_long_value...]
|
||||
添加长整型数组。
|
||||
* --efa extra_key extra_float_value[,extra_float_value...]
|
||||
添加浮点型数组。
|
||||
* --grant-read-uri-permission
|
||||
包含标志 FLAG_GRANT_READ_URI_PERMISSION。
|
||||
* --grant-write-uri-permission
|
||||
包含标志 FLAG_GRANT_WRITE_URI_PERMISSION。
|
||||
* --debug-log-resolution
|
||||
包含标志 FLAG_DEBUG_LOG_RESOLUTION。
|
||||
* --exclude-stopped-packages
|
||||
包含标志 FLAG_EXCLUDE_STOPPED_PACKAGES。
|
||||
* --include-stopped-packages
|
||||
包含标志 FLAG_INCLUDE_STOPPED_PACKAGES。
|
||||
* --activity-brought-to-front
|
||||
包含标志 FLAG_ACTIVITY_BROUGHT_TO_FRONT。
|
||||
* --activity-clear-top
|
||||
包含标志 FLAG_ACTIVITY_CLEAR_TOP。
|
||||
* --activity-clear-when-task-reset
|
||||
包含标志 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET。
|
||||
* --activity-exclude-from-recents
|
||||
包含标志 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS。
|
||||
* --activity-launched-from-history
|
||||
包含标志 FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY。
|
||||
* --activity-multiple-task
|
||||
包含标志 FLAG_ACTIVITY_MULTIPLE_TASK。
|
||||
* --activity-no-animation
|
||||
包含标志 FLAG_ACTIVITY_NO_ANIMATION。
|
||||
* --activity-no-history
|
||||
包含标志 FLAG_ACTIVITY_NO_HISTORY。
|
||||
* --activity-no-user-action
|
||||
包含标志 FLAG_ACTIVITY_NO_USER_ACTION。
|
||||
* --activity-previous-is-top
|
||||
包含标志 FLAG_ACTIVITY_PREVIOUS_IS_TOP。
|
||||
* --activity-reorder-to-front
|
||||
包含标志 FLAG_ACTIVITY_REORDER_TO_FRONT。
|
||||
* --activity-reset-task-if-needed
|
||||
包含标志 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED。
|
||||
* --activity-single-top
|
||||
包含标志 FLAG_ACTIVITY_SINGLE_TOP。
|
||||
* --activity-clear-task
|
||||
包含标志 FLAG_ACTIVITY_CLEAR_TASK。
|
||||
* --activity-task-on-home
|
||||
包含标志 FLAG_ACTIVITY_TASK_ON_HOME。
|
||||
* --receiver-registered-only
|
||||
包含标志 FLAG_RECEIVER_REGISTERED_ONLY。
|
||||
* --receiver-replace-pending
|
||||
包含标志 FLAG_RECEIVER_REPLACE_PENDING。
|
||||
* --selector
|
||||
需要使用 -d 和 -t 选项以设置 intent 数据和类型。
|
||||
#### URI component package
|
||||
如果不受上述某一选项的限制,您可以直接指定 URI、软件包名称和组件名称。当参数不受限制时,如果参数包含一个“:”(冒号),则此工具假定参数是一个 URI;如果参数包含一个“/”(正斜杠),则此工具假定参数是一个组件名称;否则,此工具假定参数是一个软件包名称。
|
||||
|
||||
<h2 id="PackageName"> 应用包名 </h2>
|
||||
所谓应用包名,是唯一确定应用的标识。例如微信的包名是"com.tencent.mm", QQ的包名是"com.tencent.mobileqq"。
|
||||
要获取一个应用的包名,可以通过函数`getPackageName(appName)`获取。参见帮助->其他一般函数。
|
||||
|
||||
|
||||
<h2 id="pm">pm命令</h2>
|
||||
|
||||
pm命令用于管理应用程序,例如卸载应用、冻结应用等。
|
||||
**以下命令均以"pm "开头,例如"shell(\"pm disable com.tencent.mm\");"(冻结微信)**
|
||||
|
||||
### list packages [options] filter
|
||||
输出所有软件包,或者,仅输出包名称包含 filter 中的文本的软件包。
|
||||
选项:
|
||||
|
||||
* -f:查看它们的关联文件。
|
||||
* -d:进行过滤以仅显示已停用的软件包。
|
||||
* -e:进行过滤以仅显示已启用的软件包。
|
||||
* -s:进行过滤以仅显示系统软件包。
|
||||
* -3:进行过滤以仅显示第三方软件包。
|
||||
* -i:查看软件包的安装程序。
|
||||
* -u:也包括卸载的软件包。
|
||||
* --user user_id:要查询的用户空间。
|
||||
|
||||
### list permission-groups
|
||||
输出所有已知的权限组。
|
||||
### list permissions [options] group
|
||||
输出所有已知权限,或者,仅输出 group 中的权限。
|
||||
选项:
|
||||
|
||||
* -g:按组加以组织。
|
||||
* -f:输出所有信息。
|
||||
* -s:简短摘要。
|
||||
* -d:仅列出危险权限。
|
||||
* -u:仅列出用户将看到的权限。
|
||||
|
||||
### list instrumentation [options]
|
||||
列出所有测试软件包。
|
||||
选项:
|
||||
|
||||
* -f:列出用于测试软件包的 APK 文件。
|
||||
* target_package:列出仅用于此应用的测试软件包。
|
||||
|
||||
### list features
|
||||
输出系统的所有功能。
|
||||
### list libraries
|
||||
输出当前设备支持的所有库。
|
||||
### list users
|
||||
输出系统上的所有用户。
|
||||
### path package
|
||||
输出给定 package 的 APK 的路径。
|
||||
### install [options] path
|
||||
将软件包(通过 path 指定)安装到系统。
|
||||
选项:
|
||||
|
||||
* -l:安装具有转发锁定功能的软件包。
|
||||
* -r:重新安装现有应用,保留其数据。
|
||||
* -t:允许安装测试 APK。
|
||||
* -i installer_package_name:指定安装程序软件包名称。
|
||||
* -s:在共享的大容量存储(如 sdcard)上安装软件包。
|
||||
* -f:在内部系统内存上安装软件包。
|
||||
* -d:允许版本代码降级。
|
||||
* -g:授予应用清单文件中列出的所有权限。
|
||||
|
||||
### uninstall [options] package
|
||||
|
||||
从系统中卸载软件包。
|
||||
选项:
|
||||
|
||||
* -k:移除软件包后保留数据和缓存目录。
|
||||
### clear package
|
||||
删除与软件包关联的所有数据。
|
||||
|
||||
### enable package_or_component
|
||||
启用给定软件包或组件(作为“package/class”写入)。
|
||||
|
||||
### disable package_or_component
|
||||
停用给定软件包或组件(作为“package/class”写入)。
|
||||
|
||||
### disable-user [options] package_or_component
|
||||
|
||||
选项:
|
||||
|
||||
* --user user_id:要停用的用户。
|
||||
### grant package_name permission
|
||||
向应用授予权限。在运行 Android 6.0(API 级别 23)及更高版本的设备上,可以是应用清单中声明的任何权限。在运行 Android 5.1(API 级别 22)和更低版本的设备上,必须是应用定义的可选权限。
|
||||
|
||||
### revoke package_name permission
|
||||
从应用中撤销权限。在运行 Android 6.0(API 级别 23)及更高版本的设备上,可以是应用清单中声明的任何权限。在运行 Android 5.1(API 级别 22)和更低版本的设备上,必须是应用定义的可选权限。
|
||||
|
||||
### set-install-location location
|
||||
更改默认安装位置。位置值:
|
||||
* 0:自动—让系统决定最佳位置。
|
||||
* 1:内部—安装在内部设备存储上。
|
||||
* 2:外部—安装在外部介质上。
|
||||
|
||||
> 注:此命令仅用于调试目的;使用此命令会导致应用中断和其他意外行为。
|
||||
|
||||
### get-install-location
|
||||
返回当前安装位置。返回值:
|
||||
* 0 [auto]:让系统决定最佳位置。
|
||||
* 1 [internal]:安装在内部设备存储上
|
||||
* 2 [external]:安装在外部介质上
|
||||
|
||||
### set-permission-enforced permission [true|false]
|
||||
指定是否应强制执行给定的权限。
|
||||
|
||||
### trim-caches desired_free_space
|
||||
减少缓存文件以达到给定的可用空间。
|
||||
|
||||
### create-user user_name
|
||||
使用给定的 user_name 创建新用户,输出新用户的标识符。
|
||||
|
||||
### remove-user user_id
|
||||
移除具有给定的 user_id 的用户,删除与该用户关联的所有数据。
|
||||
|
||||
### get-max-users
|
||||
输出设备支持的最大用户数。
|
||||
|
||||
<h2 id="others">其他命令</h2>
|
||||
|
||||
### 进行屏幕截图
|
||||
screencap 命令是一个用于对设备显示屏进行屏幕截图的 shell 实用程序。在 shell 中,此语法为:
|
||||
```
|
||||
screencap filename
|
||||
```
|
||||
|
||||
例如:
|
||||
```
|
||||
$ shell("screencap /sdcard/screen.png");
|
||||
```
|
||||
|
||||
### 列表文件
|
||||
```
|
||||
ls filepath
|
||||
```
|
||||
例如:
|
||||
```
|
||||
log(shell("ls /system/bin"));
|
||||
```
|
||||
24
app/src/main/assets/help/documentation/控制台.md
Normal file
24
app/src/main/assets/help/documentation/控制台.md
Normal file
@@ -0,0 +1,24 @@
|
||||
控制台通常用来输出一些调试信息和运算结果。
|
||||
|
||||
### openConsole()
|
||||
显示控制台。
|
||||
### clearConsole()
|
||||
清空控制台。
|
||||
### log(text)
|
||||
* text \<String\> | \<Object\> 要打印到控制台的信息
|
||||
|
||||
在控制台中输出日志,例如`log("Hello world");`。当text是一个对象时则会转换String以后再输出。
|
||||
|
||||
### err(error)
|
||||
* error \<String> | \<Object\>
|
||||
|
||||
在控制台中输出错误信息,以红色字体显示,例如:
|
||||
```
|
||||
try{
|
||||
//do something
|
||||
}catch(e){
|
||||
err("错误");
|
||||
err(e);
|
||||
openConsole();
|
||||
}
|
||||
```
|
||||
48
app/src/main/assets/help/documentation/自动操作函数.md
Normal file
48
app/src/main/assets/help/documentation/自动操作函数.md
Normal file
@@ -0,0 +1,48 @@
|
||||
**自动操作的函数都需要开启"自动操作服务"才能执行,否则执行到相应函数时脚本会停止运行。**
|
||||
|
||||
您也可以在设置中开启"使用Root权限自动开启自动操作服务",从而在运行到相应语句时可以自动开启。
|
||||
### click(text[, i])
|
||||
* text \<String\> 要点击的区域的文本
|
||||
* i \<Number\> 如果相同的文本在屏幕中出现多次,则i表示要点击第几个文本
|
||||
|
||||
返回是否点击成功。当屏幕中并未包含该文本,或者该文本所在区域不能点击时返回false,否则返回true。
|
||||
|
||||
该函数可以点击大部分包含文字的按钮。例如微信主界面下方的"微信", "联系人", "发现", "我"的按钮。
|
||||
通常与while同时使用以便点击按钮直至成功。例如:
|
||||
```
|
||||
while(!click("扫一扫"));
|
||||
```
|
||||
可选参数i通常不必指定,但当屏幕中出现相同的文字时,例如
|
||||
* `click(text, i)` 点击第i个文本text所在的区域,并返回是否点击成功。当不指定时点击所有区域。当前界面没有出现该文本或者该文本所在区域不可点击时返回false。例如`click("发现")`,是点击"发现"。如果要点击"发现"直至点击成功可以用`while(!click("发现"))`。
|
||||
> 文本所在区域指的是,从文本处向其父视图寻找,直至发现一个可点击的部件为止。
|
||||
### click(left, top, bottom, right)
|
||||
* left 要点击的长方形区域左边与屏幕左边的像素距离
|
||||
* top 要点击的长方形区域上边与屏幕上边的像素距离
|
||||
* bottom 要点击的长方形区域下边与屏幕上边的像素距离
|
||||
* right 要点击的长方形区域右边与屏幕左边的像素距离
|
||||
|
||||
当屏幕中并未包含与该区域严格匹配的区域,或者该区域不能点击时返回false,否则返回true。
|
||||
有些按钮或者部件是图标而不是文字(例如发送朋友圈的照相机图标以及QQ下方的消息、联系人、动态图标),这时不能通过`click(text[, i])`来点击,只能通过描述图标所在的区域来点击。left, bottom, top, right描述的就是点击的区域。
|
||||
至于要定位点击的区域,可以在侧拉菜单开启"点击区域辅助"(或者安卓7.0以上在通知栏点击"修改"添加点击区域辅助快捷设定图标),之后每次点击或长按都会提示这次点击或长按的区域并自动保存,可以在编辑器的右侧拉菜单中插入。
|
||||
也可以通过录制脚本会生成类似语句。
|
||||
|
||||
**以下的longClick、select、scrollUp、scrollDown的参数均与click类似,不再赘述。**
|
||||
|
||||
### longClick
|
||||
长按
|
||||
### select
|
||||
选择
|
||||
### scrollUp
|
||||
上滑。另外不加参数时`scrollUp();`会寻找"最大"的可滑动的控件上滑,例如微信消息列表等。
|
||||
参数为一个整数i时会找到第i + 1个可滑动控件滑动。例如`scrollUp(0);`。
|
||||
### scrollDown
|
||||
下滑。不加参数时与scrollUp类似。
|
||||
### input([i, ]text)
|
||||
* i \<Number\> 表示要输入的为第i + 1个输入框
|
||||
* text \<String\> 要输入的文本
|
||||
|
||||
返回是否输入成功。当找不到对应的文本框时返回false。
|
||||
这里的输入文本的意思是,把输入框的文本置为text,而不是在原来的文本上追加。
|
||||
不加参数i则会把所有输入框的文本都置为text。例如`input("测试")`。
|
||||
### input(i, text)
|
||||
把第i + 1个输入框的文本设为text。
|
||||
0
app/src/main/assets/help/documentation/语法.md
Normal file
0
app/src/main/assets/help/documentation/语法.md
Normal file
143
app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md
Normal file
143
app/src/main/assets/help/documentation/需要Root权限的自动操作函数.md
Normal file
@@ -0,0 +1,143 @@
|
||||
以下函数均需要root权限,可以实现任意位置的点击、滑动、长按、模拟物理按键等。
|
||||
|
||||
这些函数通常首字母大写以表示其特殊的权限。
|
||||
函数是返回值均是一个布尔值。true表示成功,false表示失败。一般而言,只有没有root权限时才会运行失败。
|
||||
|
||||
### Tap(x, y)
|
||||
点击位置(x, y), 您可以通过"开发者选项"开启指针位置来确定点击坐标。
|
||||
|
||||
### Swipe(x1, y1, x2, y2)
|
||||
滑动。从(x1, y1)位置滑动到(x2, y2)位置。
|
||||
|
||||
### Home()
|
||||
按下Home键。
|
||||
|
||||
### Back()
|
||||
按下返回键。
|
||||
|
||||
### Power()
|
||||
按下电源键。
|
||||
|
||||
### Menu()
|
||||
按下菜单键。
|
||||
|
||||
### Up()
|
||||
模拟按下物理按键上。
|
||||
|
||||
### Down()
|
||||
模拟按下物理按键上。
|
||||
|
||||
### Left()
|
||||
模拟按下物理按键上。
|
||||
|
||||
### Right()
|
||||
模拟按下物理按键上。
|
||||
|
||||
### OK()
|
||||
模拟按下物理按键确定。
|
||||
|
||||
### VolumeUp()
|
||||
按下音量上键。
|
||||
|
||||
### VolumeDown()
|
||||
按键音量上键。
|
||||
|
||||
### Text(text)
|
||||
* text <String> 要输入的文字
|
||||
输入文字text。例如`Text("测试");`
|
||||
|
||||
### Camera()
|
||||
模拟按下照相键。
|
||||
|
||||
### KeyCode(code)
|
||||
* code <Number> | <String> 要按下的按键的数字代码或名称。参见下表。
|
||||
模拟物理按键。例如`KeyCode(29)`和`KeyCode("KEYCODE_A")`是按下A键。
|
||||
|
||||
KeyCode KeyEvent Value
|
||||
* KEYCODE_MENU 1
|
||||
* KEYCODE_SOFT_RIGHT 2
|
||||
* KEYCODE_HOME 3
|
||||
* KEYCODE_BACK 4
|
||||
* KEYCODE_CALL 5
|
||||
* KEYCODE_ENDCALL 6
|
||||
* KEYCODE_0 7
|
||||
* KEYCODE_1 8
|
||||
* KEYCODE_2 9
|
||||
* KEYCODE_3 10
|
||||
* KEYCODE_4 11
|
||||
* KEYCODE_5 12
|
||||
* KEYCODE_6 13
|
||||
* KEYCODE_7 14
|
||||
* KEYCODE_8 15
|
||||
* KEYCODE_9 16
|
||||
* KEYCODE_STAR 17
|
||||
* KEYCODE_POUND 18
|
||||
* KEYCODE_DPAD_UP 19
|
||||
* KEYCODE_DPAD_DOWN 20
|
||||
* KEYCODE_DPAD_LEFT 21
|
||||
* KEYCODE_DPAD_RIGHT 22
|
||||
* KEYCODE_DPAD_CENTER 23
|
||||
* KEYCODE_VOLUME_UP 24
|
||||
* KEYCODE_VOLUME_DOWN 25
|
||||
* KEYCODE_POWER 26
|
||||
* KEYCODE_CAMERA 27
|
||||
* KEYCODE_CLEAR 28
|
||||
* KEYCODE_A 29
|
||||
* KEYCODE_B 30
|
||||
* KEYCODE_C 31
|
||||
* KEYCODE_D 32
|
||||
* KEYCODE_E 33
|
||||
* KEYCODE_F 34
|
||||
* KEYCODE_G 35
|
||||
* KEYCODE_H 36
|
||||
* KEYCODE_I 37
|
||||
* KEYCODE_J 38
|
||||
* KEYCODE_K 39
|
||||
* KEYCODE_L 40
|
||||
* KEYCODE_M 41
|
||||
* KEYCODE_N 42
|
||||
* KEYCODE_O 43
|
||||
* KEYCODE_P 44
|
||||
* KEYCODE_Q 45
|
||||
* KEYCODE_R 46
|
||||
* KEYCODE_S 47
|
||||
* KEYCODE_T 48
|
||||
* KEYCODE_U 49
|
||||
* KEYCODE_V 50
|
||||
* KEYCODE_W 51
|
||||
* KEYCODE_X 52
|
||||
* KEYCODE_Y 53
|
||||
* KEYCODE_Z 54
|
||||
* KEYCODE_COMMA 55
|
||||
* KEYCODE_PERIOD 56
|
||||
* KEYCODE_ALT_LEFT 57
|
||||
* KEYCODE_ALT_RIGHT 58
|
||||
* KEYCODE_SHIFT_LEFT 59
|
||||
* KEYCODE_SHIFT_RIGHT 60
|
||||
* KEYCODE_TAB 61
|
||||
* KEYCODE_SPACE 62
|
||||
* KEYCODE_SYM 63
|
||||
* KEYCODE_EXPLORER 64
|
||||
* KEYCODE_ENVELOPE 65
|
||||
* KEYCODE_ENTER 66
|
||||
* KEYCODE_DEL 67
|
||||
* KEYCODE_GRAVE 68
|
||||
* KEYCODE_MINUS 69
|
||||
* KEYCODE_EQUALS 70
|
||||
* KEYCODE_LEFT_BRACKET 71
|
||||
* KEYCODE_RIGHT_BRACKET 72
|
||||
* KEYCODE_BACKSLASH 73
|
||||
* KEYCODE_SEMICOLON 74
|
||||
* KEYCODE_APOSTROPHE 75
|
||||
* KEYCODE_SLASH 76
|
||||
* KEYCODE_AT 77
|
||||
* KEYCODE_NUM 78
|
||||
* KEYCODE_HEADSETHOOK 79
|
||||
* KEYCODE_FOCUS 80
|
||||
* KEYCODE_PLUS 81
|
||||
* KEYCODE_MENU 82
|
||||
* KEYCODE_NOTIFICATION 83
|
||||
* KEYCODE_SEARCH 84
|
||||
* TAG_LAST_ KEYCODE 85
|
||||
|
||||
|
||||
@@ -1,4 +1,15 @@
|
||||
|
||||
if(__engine__ == "rhino"){
|
||||
__importClassOld__ = importClass;
|
||||
var importClass = function(pack){
|
||||
if(typeof(pack) == "string"){
|
||||
__importClassOld__(Packages[pack]);
|
||||
}else{
|
||||
__importClassOld__(pack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var toast = function(text){
|
||||
droid.toast(text);
|
||||
}
|
||||
@@ -22,8 +33,10 @@ var launchApp = function(appName){
|
||||
function performAction(action, args){
|
||||
if(args.length == 4){
|
||||
return action(droid.bounds(args[0], args[1], args[2], args[3]));
|
||||
}else{
|
||||
return action(droid.text(args[0]));
|
||||
}else if(args.length == 2){
|
||||
return action(droid.text(args[0], args[1]));
|
||||
}else {
|
||||
return action(droid.text(args[0], -1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +52,10 @@ var longClick = function(a, b, c, d){
|
||||
}, arguments);
|
||||
}
|
||||
|
||||
var clickId = function(id){
|
||||
return droid.click(droid.id(id));
|
||||
}
|
||||
|
||||
var scrollUp = function(a, b, c, d){
|
||||
if(arguments.length == 0)
|
||||
return droid.scrollAllUp();
|
||||
@@ -136,4 +153,76 @@ var getActivityName = function(){
|
||||
|
||||
var setClip = function(text){
|
||||
droid.setClip(text);
|
||||
}
|
||||
}
|
||||
|
||||
var Tap = function(x, y){
|
||||
return shell("input tap " + x + " " + y, true).code == 1;
|
||||
}
|
||||
|
||||
var Swipe = function(x1, y1, x2, y2){
|
||||
return shell("input swipe " + x1 + " " + y1 + " " + x2 + " " + y2, true).code == 1;
|
||||
}
|
||||
|
||||
var KeyCode = function(keyCode){
|
||||
return shell("input keyevent " + keyCode, true).code == 1;
|
||||
}
|
||||
|
||||
var Home = function(){
|
||||
return KeyCode(3);
|
||||
}
|
||||
|
||||
var Back = function(){
|
||||
return KeyCode(4);
|
||||
}
|
||||
|
||||
var Power = function(){
|
||||
return KeyCode(26);
|
||||
}
|
||||
|
||||
var Up = function(){
|
||||
return KeyCode(19);
|
||||
}
|
||||
|
||||
var Down = function(){
|
||||
return KeyCode(20);
|
||||
}
|
||||
|
||||
var Left = function(){
|
||||
return KeyCode(21);
|
||||
}
|
||||
|
||||
var Right = function(){
|
||||
return KeyCode(22);
|
||||
}
|
||||
|
||||
var OK = function(){
|
||||
return KeyCode(23);
|
||||
}
|
||||
|
||||
var VolumeUp = function(){
|
||||
return KeyCode(24);
|
||||
}
|
||||
|
||||
var VolumeDown = function(){
|
||||
return KeyCode(25);
|
||||
}
|
||||
|
||||
var Menu = function(){
|
||||
return KeyCode(1);
|
||||
}
|
||||
|
||||
var Camera = function(){
|
||||
return KeyCode(27);
|
||||
}
|
||||
|
||||
var Text = function(text){
|
||||
return shell("input text " + text, true).code == 1;
|
||||
}
|
||||
|
||||
/*
|
||||
importClass("com.stardust.scriptdroid.service.AccessibilityDelegate");
|
||||
|
||||
var addAccessibilityDelegate = function(delegate){
|
||||
droid.addAccessibilityDelegate(delegate);
|
||||
}
|
||||
*/
|
||||
@@ -3,7 +3,6 @@
|
||||
importClass("android.widget.EditText");
|
||||
importClass("android.widget.Button");
|
||||
importClass("android.widget.LinearLayout");
|
||||
importClass("android.view.View.OnClickListener");
|
||||
importClass("android.content.Intent");
|
||||
importClass("android.net.Uri");
|
||||
|
||||
@@ -16,7 +15,7 @@ container.addView(qq);
|
||||
container.addView(btnOk);
|
||||
activity.setContentView(container);
|
||||
|
||||
btnOk.setOnClickListener(new OnClickListener(function(view){
|
||||
btnOk.setOnClickListener(function(view){
|
||||
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("mqqwpa://im/chat?chat_type=wpa&uin=" + qq.getText())));
|
||||
activity.finish();
|
||||
}));
|
||||
});
|
||||
@@ -14,9 +14,9 @@ function openRunningServices(){
|
||||
}
|
||||
|
||||
|
||||
importClass("android.os.Build.VERSION");
|
||||
importClass("android.os.Build");
|
||||
|
||||
if(VERSION.SDK_INT < 23){
|
||||
if(Build.VERSION.SDK_INT < 23){
|
||||
toast("本代码只适用于Android6.0以上");
|
||||
}else{
|
||||
openRunningServices();
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
"ui";
|
||||
|
||||
importClass("com.afollestad.materialdialogs.MaterialDialog.Builder");
|
||||
importClass("com.afollestad.materialdialogs.MaterialDialog.InputCallback");
|
||||
importClass("android.content.DialogInterface.OnDismissListener");
|
||||
importClass("com.afollestad.materialdialogs.MaterialDialog");
|
||||
|
||||
new Builder(activity)
|
||||
new ThemeColorMaterialDialogBuilder(activity)
|
||||
.title("简单计算器")
|
||||
.input("请输入算式", "1+1", new InputCallback(function(dialog, input){
|
||||
.input("请输入算式", "1+1", function(dialog, input){
|
||||
eval("var ans = (" + input + ")");
|
||||
toast(ans);
|
||||
}))
|
||||
})
|
||||
.positiveText("计算")
|
||||
.dismissListener(new OnDismissListener(function(dialog){
|
||||
.dismissListener(function(dialog){
|
||||
activity.finish();
|
||||
}))
|
||||
})
|
||||
.show();
|
||||
Reference in New Issue
Block a user