add: search for scripts and posts

This commit is contained in:
hyb1996
2017-10-25 13:23:46 +08:00
parent 08d1188b33
commit cf82cd2802
40 changed files with 9572 additions and 36 deletions

View File

@@ -10,8 +10,8 @@ android {
applicationId "com.stardust.scriptdroid"
minSdkVersion 17
targetSdkVersion 23
versionCode 211
versionName "3.0.0 Alpha12"
versionCode 212
versionName "3.0.0 Alpha13"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
ndk {
@@ -35,9 +35,6 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
encoding = 'utf-8'
}
dataBinding {
enabled = true
}
lintOptions {
disable 'MissingTranslation'
disable 'ExtraTranslation'
@@ -49,20 +46,6 @@ android {
}
}
dexcount {
format = "list"
includeClasses = true
includeFieldCount = true
includeTotalMethodCount = true
orderByMethodCount = true
verbose = true
maxTreeDepth = Integer.MAX_VALUE
teamCityIntegration = false
enableForInstantRun = false
teamCitySlug = null
runOnEachAssemble = true
maxMethodCount = 128000
}
configurations.all {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.1'
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,165 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>App | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/app.html">
</head>
<body class="alt apidoc" id="api-section-app">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app active" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="app" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_undefined"><a href="#app_app">App</a></span><ul>
<li><span class="stability_undefined"><a href="#app_app_viewfile_path">app.viewFile(path)</a></span></li>
<li><span class="stability_undefined"><a href="#app_app_editfile_path">app.editFile(path)</a></span></li>
<li><span class="stability_undefined"><a href="#app_app_uninstall_packagename">app.uninstall(packageName)</a></span></li>
<li><span class="stability_undefined"><a href="#app_app_openurl_url">app.openUrl(url)</a></span></li>
<li><span class="stability_undefined"><a href="#app_app_takephoto_path">app.takePhoto(path)</a></span></li>
<li><span class="stability_undefined"><a href="#app_app_sendemail_options">app.sendEmail(options)</a></span></li>
<li><span class="stability_undefined"><a href="#app_app_intent_intent">app.intent(intent)</a></span></li>
<li><span class="stability_undefined"><a href="#app_app_startactivity_intent">app.startActivity(intent)</a></span></li>
<li><span class="stability_undefined"><a href="#app_app_sendbroadcast_intent">app.sendBroadcast(intent)</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>App<span><a class="mark" href="#app_app" id="app_app">#</a></span></h1>
<p>app模块提供一系列函数用于与其他应用的交互。例如打开文件、拍照、发送邮件等。</p>
<p>同时提供了方便的基础函数startActivity和sendBroadcast用他们可完成app模块没有内置的和其他应用的交互。</p>
<h2>app.viewFile(path)<span><a class="mark" href="#app_app_viewfile_path" id="app_app_viewfile_path">#</a></span></h2>
<div class="signature"><ul>
<li>path <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 文件路径</li>
</ul>
</div><p>用其他应用查看文件。</p>
<h2>app.editFile(path)<span><a class="mark" href="#app_app_editfile_path" id="app_app_editfile_path">#</a></span></h2>
<div class="signature"><ul>
<li>path <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 文件路径</li>
</ul>
</div><p>用其他应用编辑文件。</p>
<h2>app.uninstall(packageName)<span><a class="mark" href="#app_app_uninstall_packagename" id="app_app_uninstall_packagename">#</a></span></h2>
<div class="signature"><ul>
<li>packageName <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 应用包名</li>
</ul>
</div><p>卸载应用。</p>
<h2>app.openUrl(url)<span><a class="mark" href="#app_app_openurl_url" id="app_app_openurl_url">#</a></span></h2>
<div class="signature"><ul>
<li>url <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 网站的Url</li>
</ul>
</div><p>用浏览器打开网站url。</p>
<h2>app.takePhoto(path)<span><a class="mark" href="#app_app_takephoto_path" id="app_app_takephoto_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 照片保存路径</li>
</ul>
</div><p>调用相机应用拍照完成后保存到路径path。</p>
<h2>app.sendEmail(options)<span><a class="mark" href="#app_app_sendemail_options" id="app_app_sendemail_options">#</a></span></h2>
<div class="signature"><ul>
<li><code>options</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 发送邮件的参数。包括:<ul>
<li>email <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> 收件人的邮件地址。如果有多个收件人,则用字符串数组表示</li>
<li>cc <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> 抄送收件人的邮件地址。如果有多个抄送收件人,则用字符串数组表示</li>
<li>bcc <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> 密送收件人的邮件地址。如果有多个密送收件人,则用字符串数组表示</li>
<li>subject <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 邮件主题(标题)</li>
<li>text <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 邮件正文</li>
<li>attachment <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> 附件的路径。如果有多个附件,则用字符串数组表示</li>
</ul>
</li>
</ul>
</div><p>根据选项options调用邮箱应用发送邮件。这些选项均是可选的。</p>
<h2>app.intent(intent)<span><a class="mark" href="#app_app_intent_intent" id="app_app_intent_intent">#</a></span></h2>
<div class="signature"><ul>
<li>intent <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 一个表示Intent对象其属性可以包括<ul>
<li>action <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 这个Intent的Action比如&quot;android.intent.action.SEND&quot;</li>
<li>type <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 这个Intent的MimeType比如&quot;text/plain&quot;</li>
<li>data <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 这个Intent的Data(Uri)可以是文件路径或者Url等。</li>
<li>category \<Array\> 这个Intent的Category的字符串数组。</li>
<li>packageName <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 目标包名</li>
<li>className <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 目标Activity或Service等组件的名称</li>
<li>extras <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 以键值对构成的这个Intent的Extras。</li>
</ul>
</li>
</ul>
</div><p>返回用intent对象构造的android.content.Intent对象。</p>
<p>例如:</p>
<pre><code>var i = app.intent({
action: &quot;android.intent.action.VIEW&quot;,
type: &quot;text/plain&quot;,
data: &quot;file:///sdcard/1.txt&quot;,
});
</code></pre><p>如果你看了一脸懵逼,请百度<a href="https://www.baidu.com/s?wd=android%20Intent">安卓Intent</a></p>
<h2>app.startActivity(intent)<span><a class="mark" href="#app_app_startactivity_intent" id="app_app_startactivity_intent">#</a></span></h2>
<div class="signature"><ul>
<li>intent <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 与app.intent函数的参数一样的intent对象。</li>
</ul>
</div><p>相当于context.startActivity(intent)。</p>
<h2>app.sendBroadcast(intent)<span><a class="mark" href="#app_app_sendbroadcast_intent" id="app_app_sendbroadcast_intent">#</a></span></h2>
<div class="signature"><ul>
<li>intent <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 与app.intent函数的参数一样的intent对象。</li>
</ul>
</div><p>相当于context.sendBroadcast(intent)。</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,49 @@
/**
* http://schalkneethling.github.io/blog/2015/11/06/respect-user-choice-do-not-track/
* https://github.com/schalkneethling/dnt-helper/blob/master/js/dnt-helper.js
*
* Returns true or false based on whether doNotTack is enabled. It also takes into account the
* anomalies, such as !bugzilla 887703, which effect versions of Fx 31 and lower. It also handles
* IE versions on Windows 7, 8 and 8.1, where the DNT implementation does not honor the spec.
* @see https://bugzilla.mozilla.org/show_bug.cgi?id=1217896 for more details
* @params {string} [dnt] - An optional mock doNotTrack string to ease unit testing.
* @params {string} [userAgent] - An optional mock userAgent string to ease unit testing.
* @returns {boolean} true if enabled else false
*/
function _dntEnabled(dnt, userAgent) {
'use strict';
// for old version of IE we need to use the msDoNotTrack property of navigator
// on newer versions, and newer platforms, this is doNotTrack but, on the window object
// Safari also exposes the property on the window object.
var dntStatus = dnt || navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
var ua = userAgent || navigator.userAgent;
// List of Windows versions known to not implement DNT according to the standard.
var anomalousWinVersions = ['Windows NT 6.1', 'Windows NT 6.2', 'Windows NT 6.3'];
var fxMatch = ua.match(/Firefox\/(\d+)/);
var ieRegEx = /MSIE|Trident/i;
var isIE = ieRegEx.test(ua);
// Matches from Windows up to the first occurrence of ; un-greedily
// http://www.regexr.com/3c2el
var platform = ua.match(/Windows.+?(?=;)/g);
// With old versions of IE, DNT did not exist so we simply return false;
if (isIE && typeof Array.prototype.indexOf !== 'function') {
return false;
} else if (fxMatch && parseInt(fxMatch[1], 10) < 32) {
// Can't say for sure if it is 1 or 0, due to Fx bug 887703
dntStatus = 'Unspecified';
} else if (isIE && platform && anomalousWinVersions.indexOf(platform.toString()) !== -1) {
// default is on, which does not honor the specification
dntStatus = 'Unspecified';
} else {
// sets dntStatus to Disabled or Enabled based on the value returned by the browser.
// If dntStatus is undefined, it will be set to Unspecified
dntStatus = { '0': 'Disabled', '1': 'Enabled' }[dntStatus] || 'Unspecified';
}
return dntStatus === 'Enabled' ? true : false;
}

View File

@@ -0,0 +1,25 @@
.sh_sourceCode {
font-weight: normal;
font-style: normal;
}
.sh_sourceCode .sh_symbol,
.sh_sourceCode .sh_cbracket {
color: #333;
}
.sh_sourceCode .sh_keyword {
color: #338;
}
.sh_sourceCode .sh_string,
.sh_sourceCode .sh_regexp,
.sh_sourceCode .sh_number,
.sh_sourceCode .sh_specialchar {
color: #E54305;
}
.sh_sourceCode .sh_comment {
color: #666;
font-weight: lighter;
}

View File

@@ -0,0 +1 @@
if(!this.sh_languages){this.sh_languages={}}sh_languages.javascript=[[[/\/\/\//g,"sh_comment",1],[/\/\//g,"sh_comment",7],[/\/\*\*/g,"sh_comment",8],[/\/\*/g,"sh_comment",9],[/\b(?:abstract|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|final|finally|for|function|goto|if|implements|in|instanceof|interface|native|new|null|private|protected|prototype|public|return|static|super|switch|synchronized|throw|throws|this|transient|true|try|typeof|var|volatile|while|with)\b/g,"sh_keyword",-1],[/(\+\+|--|\)|\])(\s*)(\/=?(?![*\/]))/g,["sh_symbol","sh_normal","sh_symbol"],-1],[/(0x[A-Fa-f0-9]+|(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?)(\s*)(\/(?![*\/]))/g,["sh_number","sh_normal","sh_symbol"],-1],[/([A-Za-z$_][A-Za-z0-9$_]*\s*)(\/=?(?![*\/]))/g,["sh_normal","sh_symbol"],-1],[/\/(?:\\.|[^*\\\/])(?:\\.|[^\\\/])*\/[gim]*/g,"sh_regexp",-1],[/\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g,"sh_number",-1],[/"/g,"sh_string",10],[/'/g,"sh_string",11],[/~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g,"sh_symbol",-1],[/\{|\}/g,"sh_cbracket",-1],[/\b(?:Math|Infinity|NaN|undefined|arguments)\b/g,"sh_predef_var",-1],[/\b(?:Array|Boolean|Date|Error|EvalError|Function|Number|Object|RangeError|ReferenceError|RegExp|String|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt)\b/g,"sh_predef_func",-1],[/(?:[A-Za-z]|_)[A-Za-z0-9_]*(?=[ \t]*\()/g,"sh_function",-1]],[[/$/g,null,-2],[/(?:<?)[A-Za-z0-9_\.\/\-_~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-_~]+(?:>?)/g,"sh_url",-1],[/<\?xml/g,"sh_preproc",2,1],[/<!DOCTYPE/g,"sh_preproc",4,1],[/<!--/g,"sh_comment",5],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)(?:\/)?>/g,"sh_keyword",-1],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,"sh_keyword",6,1],[/&(?:[A-Za-z0-9]+);/g,"sh_preproc",-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*(?:\/)?>/g,"sh_keyword",-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*/g,"sh_keyword",6,1],[/@[A-Za-z]+/g,"sh_type",-1],[/(?:TODO|FIXME|BUG)(?:[:]?)/g,"sh_todo",-1]],[[/\?>/g,"sh_preproc",-2],[/([^=" \t>]+)([ \t]*)(=?)/g,["sh_type","sh_normal","sh_symbol"],-1],[/"/g,"sh_string",3]],[[/\\(?:\\|")/g,null,-1],[/"/g,"sh_string",-2]],[[/>/g,"sh_preproc",-2],[/([^=" \t>]+)([ \t]*)(=?)/g,["sh_type","sh_normal","sh_symbol"],-1],[/"/g,"sh_string",3]],[[/-->/g,"sh_comment",-2],[/<!--/g,"sh_comment",5]],[[/(?:\/)?>/g,"sh_keyword",-2],[/([^=" \t>]+)([ \t]*)(=?)/g,["sh_type","sh_normal","sh_symbol"],-1],[/"/g,"sh_string",3]],[[/$/g,null,-2]],[[/\*\//g,"sh_comment",-2],[/(?:<?)[A-Za-z0-9_\.\/\-_~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-_~]+(?:>?)/g,"sh_url",-1],[/<\?xml/g,"sh_preproc",2,1],[/<!DOCTYPE/g,"sh_preproc",4,1],[/<!--/g,"sh_comment",5],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)(?:\/)?>/g,"sh_keyword",-1],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,"sh_keyword",6,1],[/&(?:[A-Za-z0-9]+);/g,"sh_preproc",-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*(?:\/)?>/g,"sh_keyword",-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*/g,"sh_keyword",6,1],[/@[A-Za-z]+/g,"sh_type",-1],[/(?:TODO|FIXME|BUG)(?:[:]?)/g,"sh_todo",-1]],[[/\*\//g,"sh_comment",-2],[/(?:<?)[A-Za-z0-9_\.\/\-_~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-_~]+(?:>?)/g,"sh_url",-1],[/(?:TODO|FIXME|BUG)(?:[:]?)/g,"sh_todo",-1]],[[/"/g,"sh_string",-2],[/\\./g,"sh_specialchar",-1]],[[/'/g,"sh_string",-2],[/\\./g,"sh_specialchar",-1]]];

View File

@@ -0,0 +1,553 @@
/*
SHJS - Syntax Highlighting in JavaScript
Copyright (C) 2007, 2008 gnombat@users.sourceforge.net
License: http://shjs.sourceforge.net/doc/gplv3.html
*/
if (! this.sh_languages) {
this.sh_languages = {};
}
var sh_requests = {};
function sh_isEmailAddress(url) {
if (/^mailto:/.test(url)) {
return false;
}
return url.indexOf('@') !== -1;
}
function sh_setHref(tags, numTags, inputString) {
var url = inputString.substring(tags[numTags - 2].pos, tags[numTags - 1].pos);
if (url.length >= 2 && url.charAt(0) === '<' && url.charAt(url.length - 1) === '>') {
url = url.substr(1, url.length - 2);
}
if (sh_isEmailAddress(url)) {
url = 'mailto:' + url;
}
tags[numTags - 2].node.href = url;
}
/*
Konqueror has a bug where the regular expression /$/g will not match at the end
of a line more than once:
var regex = /$/g;
var match;
var line = '1234567890';
regex.lastIndex = 10;
match = regex.exec(line);
var line2 = 'abcde';
regex.lastIndex = 5;
match = regex.exec(line2); // fails
*/
function sh_konquerorExec(s) {
var result = [''];
result.index = s.length;
result.input = s;
return result;
}
/**
Highlights all elements containing source code in a text string. The return
value is an array of objects, each representing an HTML start or end tag. Each
object has a property named pos, which is an integer representing the text
offset of the tag. Every start tag also has a property named node, which is the
DOM element started by the tag. End tags do not have this property.
@param inputString a text string
@param language a language definition object
@return an array of tag objects
*/
function sh_highlightString(inputString, language) {
if (/Konqueror/.test(navigator.userAgent)) {
if (! language.konquered) {
for (var s = 0; s < language.length; s++) {
for (var p = 0; p < language[s].length; p++) {
var r = language[s][p][0];
if (r.source === '$') {
r.exec = sh_konquerorExec;
}
}
}
language.konquered = true;
}
}
var a = document.createElement('a');
var span = document.createElement('span');
// the result
var tags = [];
var numTags = 0;
// each element is a pattern object from language
var patternStack = [];
// the current position within inputString
var pos = 0;
// the name of the current style, or null if there is no current style
var currentStyle = null;
var output = function(s, style) {
var length = s.length;
// this is more than just an optimization - we don't want to output empty <span></span> elements
if (length === 0) {
return;
}
if (! style) {
var stackLength = patternStack.length;
if (stackLength !== 0) {
var pattern = patternStack[stackLength - 1];
// check whether this is a state or an environment
if (! pattern[3]) {
// it's not a state - it's an environment; use the style for this environment
style = pattern[1];
}
}
}
if (currentStyle !== style) {
if (currentStyle) {
tags[numTags++] = {pos: pos};
if (currentStyle === 'sh_url') {
sh_setHref(tags, numTags, inputString);
}
}
if (style) {
var clone;
if (style === 'sh_url') {
clone = a.cloneNode(false);
}
else {
clone = span.cloneNode(false);
}
clone.className = style;
tags[numTags++] = {node: clone, pos: pos};
}
}
pos += length;
currentStyle = style;
};
var endOfLinePattern = /\r\n|\r|\n/g;
endOfLinePattern.lastIndex = 0;
var inputStringLength = inputString.length;
while (pos < inputStringLength) {
var start = pos;
var end;
var startOfNextLine;
var endOfLineMatch = endOfLinePattern.exec(inputString);
if (endOfLineMatch === null) {
end = inputStringLength;
startOfNextLine = inputStringLength;
}
else {
end = endOfLineMatch.index;
startOfNextLine = endOfLinePattern.lastIndex;
}
var line = inputString.substring(start, end);
var matchCache = [];
for (;;) {
var posWithinLine = pos - start;
var stateIndex;
var stackLength = patternStack.length;
if (stackLength === 0) {
stateIndex = 0;
}
else {
// get the next state
stateIndex = patternStack[stackLength - 1][2];
}
var state = language[stateIndex];
var numPatterns = state.length;
var mc = matchCache[stateIndex];
if (! mc) {
mc = matchCache[stateIndex] = [];
}
var bestMatch = null;
var bestPatternIndex = -1;
for (var i = 0; i < numPatterns; i++) {
var match;
if (i < mc.length && (mc[i] === null || posWithinLine <= mc[i].index)) {
match = mc[i];
}
else {
var regex = state[i][0];
regex.lastIndex = posWithinLine;
match = regex.exec(line);
mc[i] = match;
}
if (match !== null && (bestMatch === null || match.index < bestMatch.index)) {
bestMatch = match;
bestPatternIndex = i;
if (match.index === posWithinLine) {
break;
}
}
}
if (bestMatch === null) {
output(line.substring(posWithinLine), null);
break;
}
else {
// got a match
if (bestMatch.index > posWithinLine) {
output(line.substring(posWithinLine, bestMatch.index), null);
}
var pattern = state[bestPatternIndex];
var newStyle = pattern[1];
var matchedString;
if (newStyle instanceof Array) {
for (var subexpression = 0; subexpression < newStyle.length; subexpression++) {
matchedString = bestMatch[subexpression + 1];
output(matchedString, newStyle[subexpression]);
}
}
else {
matchedString = bestMatch[0];
output(matchedString, newStyle);
}
switch (pattern[2]) {
case -1:
// do nothing
break;
case -2:
// exit
patternStack.pop();
break;
case -3:
// exitall
patternStack.length = 0;
break;
default:
// this was the start of a delimited pattern or a state/environment
patternStack.push(pattern);
break;
}
}
}
// end of the line
if (currentStyle) {
tags[numTags++] = {pos: pos};
if (currentStyle === 'sh_url') {
sh_setHref(tags, numTags, inputString);
}
currentStyle = null;
}
pos = startOfNextLine;
}
return tags;
}
////////////////////////////////////////////////////////////////////////////////
// DOM-dependent functions
function sh_getClasses(element) {
var result = [];
var htmlClass = element.className;
if (htmlClass && htmlClass.length > 0) {
var htmlClasses = htmlClass.split(' ');
for (var i = 0; i < htmlClasses.length; i++) {
if (htmlClasses[i].length > 0) {
result.push(htmlClasses[i]);
}
}
}
return result;
}
function sh_addClass(element, name) {
var htmlClasses = sh_getClasses(element);
for (var i = 0; i < htmlClasses.length; i++) {
if (name.toLowerCase() === htmlClasses[i].toLowerCase()) {
return;
}
}
htmlClasses.push(name);
element.className = htmlClasses.join(' ');
}
/**
Extracts the tags from an HTML DOM NodeList.
@param nodeList a DOM NodeList
@param result an object with text, tags and pos properties
*/
function sh_extractTagsFromNodeList(nodeList, result) {
var length = nodeList.length;
for (var i = 0; i < length; i++) {
var node = nodeList.item(i);
switch (node.nodeType) {
case 1:
if (node.nodeName.toLowerCase() === 'br') {
var terminator;
if (/MSIE/.test(navigator.userAgent)) {
terminator = '\r';
}
else {
terminator = '\n';
}
result.text.push(terminator);
result.pos++;
}
else {
result.tags.push({node: node.cloneNode(false), pos: result.pos});
sh_extractTagsFromNodeList(node.childNodes, result);
result.tags.push({pos: result.pos});
}
break;
case 3:
case 4:
result.text.push(node.data);
result.pos += node.length;
break;
}
}
}
/**
Extracts the tags from the text of an HTML element. The extracted tags will be
returned as an array of tag objects. See sh_highlightString for the format of
the tag objects.
@param element a DOM element
@param tags an empty array; the extracted tag objects will be returned in it
@return the text of the element
@see sh_highlightString
*/
function sh_extractTags(element, tags) {
var result = {};
result.text = [];
result.tags = tags;
result.pos = 0;
sh_extractTagsFromNodeList(element.childNodes, result);
return result.text.join('');
}
/**
Merges the original tags from an element with the tags produced by highlighting.
@param originalTags an array containing the original tags
@param highlightTags an array containing the highlighting tags - these must not overlap
@result an array containing the merged tags
*/
function sh_mergeTags(originalTags, highlightTags) {
var numOriginalTags = originalTags.length;
if (numOriginalTags === 0) {
return highlightTags;
}
var numHighlightTags = highlightTags.length;
if (numHighlightTags === 0) {
return originalTags;
}
var result = [];
var originalIndex = 0;
var highlightIndex = 0;
while (originalIndex < numOriginalTags && highlightIndex < numHighlightTags) {
var originalTag = originalTags[originalIndex];
var highlightTag = highlightTags[highlightIndex];
if (originalTag.pos <= highlightTag.pos) {
result.push(originalTag);
originalIndex++;
}
else {
result.push(highlightTag);
if (highlightTags[highlightIndex + 1].pos <= originalTag.pos) {
highlightIndex++;
result.push(highlightTags[highlightIndex]);
highlightIndex++;
}
else {
// new end tag
result.push({pos: originalTag.pos});
// new start tag
highlightTags[highlightIndex] = {node: highlightTag.node.cloneNode(false), pos: originalTag.pos};
}
}
}
while (originalIndex < numOriginalTags) {
result.push(originalTags[originalIndex]);
originalIndex++;
}
while (highlightIndex < numHighlightTags) {
result.push(highlightTags[highlightIndex]);
highlightIndex++;
}
return result;
}
/**
Inserts tags into text.
@param tags an array of tag objects
@param text a string representing the text
@return a DOM DocumentFragment representing the resulting HTML
*/
function sh_insertTags(tags, text) {
var doc = document;
var result = document.createDocumentFragment();
var tagIndex = 0;
var numTags = tags.length;
var textPos = 0;
var textLength = text.length;
var currentNode = result;
// output one tag or text node every iteration
while (textPos < textLength || tagIndex < numTags) {
var tag;
var tagPos;
if (tagIndex < numTags) {
tag = tags[tagIndex];
tagPos = tag.pos;
}
else {
tagPos = textLength;
}
if (tagPos <= textPos) {
// output the tag
if (tag.node) {
// start tag
var newNode = tag.node;
currentNode.appendChild(newNode);
currentNode = newNode;
}
else {
// end tag
currentNode = currentNode.parentNode;
}
tagIndex++;
}
else {
// output text
currentNode.appendChild(doc.createTextNode(text.substring(textPos, tagPos)));
textPos = tagPos;
}
}
return result;
}
/**
Highlights an element containing source code. Upon completion of this function,
the element will have been placed in the "sh_sourceCode" class.
@param element a DOM <pre> element containing the source code to be highlighted
@param language a language definition object
*/
function sh_highlightElement(element, language) {
sh_addClass(element, 'sh_sourceCode');
var originalTags = [];
var inputString = sh_extractTags(element, originalTags);
var highlightTags = sh_highlightString(inputString, language);
var tags = sh_mergeTags(originalTags, highlightTags);
var documentFragment = sh_insertTags(tags, inputString);
while (element.hasChildNodes()) {
element.removeChild(element.firstChild);
}
element.appendChild(documentFragment);
}
function sh_getXMLHttpRequest() {
if (window.ActiveXObject) {
return new ActiveXObject('Msxml2.XMLHTTP');
}
else if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}
throw 'No XMLHttpRequest implementation available';
}
function sh_load(language, element, prefix, suffix) {
if (language in sh_requests) {
sh_requests[language].push(element);
return;
}
sh_requests[language] = [element];
var request = sh_getXMLHttpRequest();
var url = prefix + 'sh_' + language + suffix;
request.open('GET', url, true);
request.onreadystatechange = function () {
if (request.readyState === 4) {
try {
if (! request.status || request.status === 200) {
eval(request.responseText);
var elements = sh_requests[language];
for (var i = 0; i < elements.length; i++) {
sh_highlightElement(elements[i], sh_languages[language]);
}
}
else {
throw 'HTTP error: status ' + request.status;
}
}
finally {
request = null;
}
}
};
request.send(null);
}
/**
Highlights all elements containing source code on the current page. Elements
containing source code must be "pre" elements with a "class" attribute of
"sh_LANGUAGE", where LANGUAGE is a valid language identifier; e.g., "sh_java"
identifies the element as containing "java" language source code.
*/
function highlight(prefix, suffix, tag) {
var nodeList = document.getElementsByTagName(tag);
for (var i = 0; i < nodeList.length; i++) {
var element = nodeList.item(i);
var htmlClasses = sh_getClasses(element);
var highlighted = false;
var donthighlight = false;
for (var j = 0; j < htmlClasses.length; j++) {
var htmlClass = htmlClasses[j].toLowerCase();
if (htmlClass === 'sh_none') {
donthighlight = true
continue;
}
if (htmlClass.substr(0, 3) === 'sh_') {
var language = htmlClass.substring(3);
if (language in sh_languages) {
sh_highlightElement(element, sh_languages[language]);
highlighted = true;
}
else if (typeof(prefix) === 'string' && typeof(suffix) === 'string') {
sh_load(language, element, prefix, suffix);
}
else {
throw 'Found <' + tag + '> element with class="' + htmlClass + '", but no such language exists';
}
break;
}
}
if (highlighted === false && donthighlight == false) {
sh_highlightElement(element, sh_languages["javascript"]);
}
}
}
function sh_highlightDocument(prefix, suffix) {
highlight(prefix, suffix, 'tt');
highlight(prefix, suffix, 'code');
highlight(prefix, suffix, 'pre');
}

View File

@@ -0,0 +1,523 @@
/*--------------------- Layout and Typography ----------------------------*/
html {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-font-variant-ligatures: none;
font-variant-ligatures: none;
}
body {
font-family: "Lato", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Verdana, Tahoma, sans-serif;
font-size: 62.5%;
margin: 0;
padding: 0;
color: #333;
background: #fff;
}
h1, h2, h3, h4 {
margin: .8em 0 .5em;
line-height: 1.2;
}
h5, h6 {
margin: 1em 0 .8em;
line-height: 1.2;
}
h1 {
margin-top: 0;
font-size: 2.441em;
}
h2 {font-size: 1.953em;}
h3 {font-size: 1.563em;}
h4 {font-size: 1.25em;}
h5 {font-size: 1em;}
h6 {font-size: .8em;}
pre, tt, code, .pre, span.type, a.type {
font-family: Monaco, Consolas, "Lucida Console", monospace;
}
#content {
font-size: 1.8em;
position: relative;
}
a, a:link, a:active {
color: #43853d;
text-decoration: none;
border-radius: 2px;
padding: .1em .2em;
margin: -.1em;
}
a:hover, a:focus {
color: #fff;
background-color: #43853d;
outline: none;
}
strong {
font-weight: 700;
}
code a:hover {
background: none;
}
em code {
font-style: normal;
}
#changelog #gtoc {
display: none;
}
#gtoc {
font-size: .8em;
}
.line {
width: calc(100% - 1em);
display: block;
padding-bottom: 1px;
}
.api_stability {
color: white !important;
margin: 0 0 1em 0;
font-family: "Lato", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Verdana, Tahoma, sans-serif;
padding: 1em;
line-height: 1.5;
}
.api_stability * {
color: white !important;
}
.api_stability a {
text-decoration: underline;
}
.api_stability a:hover, .api_stability a:active, .api_stability a:focus {
background: rgba(255, 255, 255, .4);
}
.api_stability a code {
background: none;
}
.api_stability_0 {
background-color: #D60027;
}
.api_stability_1 {
background-color: #EC5315;
}
.api_stability_2 {
background-color: #4EBA0F;
}
.api_stability_3 {
background-color: #0084B6;
}
.api_metadata {
font-size: .75em;
margin-bottom: 1em;
}
.api_metadata span {
margin-right: 1em;
}
.api_metadata span:last-child {
margin-right: 0px;
}
ul.plain {
list-style: none;
}
abbr {
border-bottom: 1px dotted #454545;
}
p {
position: relative;
text-rendering: optimizeLegibility;
margin: 0 0 1.125em 0;
line-height: 1.5em;
}
#apicontent > *:last-child {
margin-bottom: 0;
padding-bottom: 2em;
}
table {
border-collapse: collapse;
margin: 0 0 1.5em 0;
}
th, td {
border: 1px solid #aaa;
}
th {
text-align:left;
}
ol, ul, dl {
margin: 0 0 .6em 0;
padding: 0;
}
ol ul, ol ol, ol dl, ul ul, ul ol, ul dl, dl ul, dl ol, dl dl {
margin-bottom: 0;
}
ul, ol {
margin-left: 2em;
}
dl dt {
position: relative;
margin: 1.5em 0 0;
}
dl dd {
position: relative;
margin: 0 1em 0;
}
dd + dt.pre {
margin-top: 1.6em;
}
h1, h2, h3, h4, h5, h6 {
text-rendering: optimizeLegibility;
font-weight: 700;
position: relative;
}
header h1 {
font-size: 2em;
line-height: 2em;
margin: 0;
}
#apicontent {
padding-top: 1em;
}
#apicontent .line {
width: calc(50% - 1em);
margin: 1em 1em .95em;
background-color: #ccc;
}
h2 + h2 {
margin: 0 0 .5em;
}
h3 + h3 {
margin: 0 0 .5em;
}
h2, h3, h4, h5 {
position: relative;
padding-right: 40px;
}
h1 span, h2 span, h3 span, h4 span {
position: absolute;
display: block;
top: 0;
right: 0;
}
h1 span:hover, h2 span:hover, h3 span:hover, h4 span:hover {
opacity: 1;
}
h1 span a, h2 span a, h3 span a, h4 span a {
font-size: .8em;
color: #000;
text-decoration: none;
font-weight: bold;
}
pre, tt, code {
line-height: 1.5em;
margin: 0; padding: 0;
}
.pre {
line-height: 1.5em;
font-size: 1.2em;
}
pre {
padding: 1em;
vertical-align: top;
background: #f2f2f2;
margin: 1em;
overflow-x: auto;
}
pre > code {
font-size: .8em;
padding: 0;
}
pre + h3 {
margin-top: 2.225em;
}
code.pre {
white-space: pre;
}
#intro {
margin-top: 1.25em;
margin-left: 1em;
}
#intro a {
color: #ddd;
font-size: 1.25em;
font-weight: bold;
}
hr {
background: none;
border: medium none;
border-bottom: 1px solid #7a7a7a;
margin: 0 0 1em 0;
}
#toc h2 {
margin-top: 0;
font-size: 1em;
line-height: 0;
margin: 1.5em 0;
}
#toc ul {
font-size: .8125em;
}
#toc ul ul {
font-size: 1em;
}
#toc ul a {
text-decoration:none;
}
#toc ul li {
margin-bottom: .666em;
list-style: square outside;
}
#toc li > ul {
margin-top: .666em;
}
#toc .stability_0::after {
background-color: #d50027;
color: #fff;
}
#toc .stability_0::after {
content: "deprecated";
font-size: .8em;
position: relative;
top: -.18em;
left: .5em;
padding: 0 .3em .2em;
border-radius: 3px;
}
#apicontent li {
margin-bottom: .5em;
}
#apicontent li:last-child {
margin-bottom: 0;
}
tt, code {
font-size: .9em;
color: #040404;
background-color: #f2f2f2;
border-radius: 2px;
padding: .1em .3em;
}
.api_stability code {
background: rgba(0, 0, 0, .1);
padding: .1em .3em;
}
a code {
color: inherit;
background: inherit;
padding: 0;
}
.type {
font-size: .9em;
line-height: 1.5em;
}
#column1.interior {
margin-left: 234px;
padding: 0 2em;
-webkit-padding-start: 1.5em;
}
#column2.interior {
width: 234px;
background: #333;
position: fixed;
left: 0;
top: 0;
bottom: 0;
overflow-x: hidden;
overflow-y: scroll;
}
#column2 ul {
list-style: none;
margin: .9em 0 .5em;
background: #333;
}
#column2 > :first-child {
margin: 1.25em 1em;
}
#column2 > ul:nth-child(2) {
margin: 1.25em 0 .5em;
}
#column2 > ul:last-child {
margin: .9em 0 1.25em;
}
#column2 ul li {
padding-left: 1.4em;
margin-bottom: .5em;
padding-bottom: .5em;
font-size: .8em;
}
#column2 .line {
margin: 0 .5em;
background-color: #707070;
}
#column2 ul li:last-child {
margin-bottom: 0;
}
#column2 ul li a {
color: #ccc;
border-radius: 0;
}
#column2 ul li a.active, #column2 ul li a.active:hover,
#column2 ul li a.active:focus {
color: #43853d;
border-radius: 0;
border-bottom: 1px solid #43853d;
background: none;
}
#intro a:hover, #intro a:focus,
#column2 ul li a:hover, #column2 ul li a:focus {
color: #fff;
background: none;
}
span > .mark, span > .mark:visited {
font-size: 1em;
color: #707070;
position: absolute;
top: 0px;
right: 0px;
}
span > .mark:hover, span > .mark:focus, span > .mark:active {
color: #43853d;
background: none;
}
th, td {
padding: .75em 1em .75em 1em;
vertical-align: top;
}
th > *:last-child, td > *:last-child {
margin-bottom: 0;
}
.changelog > summary {
margin: .5rem 0;
padding: .5rem 0;
cursor: pointer;
}
/* simpler clearfix */
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
@media only screen and (max-width: 1024px) {
#content {
font-size: 1.6em;
overflow: visible;
}
#column1.interior {
margin-left: 0;
padding-left: .5em;
padding-right: .5em;
width: auto;
overflow-y: visible;
}
#column2 {
display: none;
}
}
@media only screen and (max-width: 1024px) and (orientation: portrait) {
#content {
font-size: 3.5em;
}
}
@media print {
html {
height: auto;
}
#column2.interior {
display: none;
}
#column1.interior {
margin-left: auto;
overflow-y: auto;
}
}

View File

@@ -0,0 +1,173 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Console | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/console.html">
</head>
<body class="alt apidoc" id="api-section-console">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console active" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="console" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#console_console">Console</a></span><ul>
<li><span class="stability_undefined"><a href="#console_console_show">console.show()</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_clear">console.clear()</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_log_data_args">console.log([data][, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_verbose_data_args">console.verbose([data][, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_info_data_args">console.info([data][, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_warn_data_args">console.warn([data][, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_error_data_args">console.error([data][, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_assert_value_message">console.assert(value, message)</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_input_data_args">console.input(data[, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#console_console_rawinput_data_args">console.rawInput(data[, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#console_print_text">print(text)</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>Console<span><a class="mark" href="#console_console" id="console_console">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>控制台模块提供了一个和Web浏览器中相似的用于调试的控制台。用于输出一些调试信息、中间结果等。
console模块中的一些函数也可以直接作为全局函数使用例如log, print等。</p>
<h2>console.show()<span><a class="mark" href="#console_console_show" id="console_console_show">#</a></span></h2>
<p>显示控制台。这会显示一个控制台的悬浮窗(需要悬浮窗权限)。</p>
<h2>console.clear()<span><a class="mark" href="#console_console_clear" id="console_console_clear">#</a></span></h2>
<p>清空控制台。</p>
<h2>console.log([data][, ...args])<span><a class="mark" href="#console_console_log_data_args" id="console_console_log_data_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>data</code> <any></li>
<li><code>...args</code> <any></li>
</ul>
</div><p>打印到控制台,并带上换行符。 可以传入多个参数,第一个参数作为主要信息,其他参数作为类似于 <a href="http://man7.org/linux/man-pages/man3/printf.3.html">printf(3)</a> 中的代替值(参数都会传给 util.format())。</p>
<pre><code>const count = 5;
console.log(&#39;count: %d&#39;, count);
// 打印: count: 5 到 stdout
console.log(&#39;count:&#39;, count);
// 打印: count: 5 到 stdout
</code></pre><p>详见 util.format()。</p>
<h2>console.verbose([data][, ...args])<span><a class="mark" href="#console_console_verbose_data_args" id="console_console_verbose_data_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>data</code> <any></li>
<li><code>...args</code> <any></li>
</ul>
</div><p>与console.log类似但输出结果以灰色字体显示。输出优先级低于log用于输出观察性质的信息。</p>
<h2>console.info([data][, ...args])<span><a class="mark" href="#console_console_info_data_args" id="console_console_info_data_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>data</code> <any></li>
<li><code>...args</code> <any></li>
</ul>
</div><p>与console.log类似但输出结果以绿色字体显示。输出优先级高于log, 用于输出重要信息。</p>
<h2>console.warn([data][, ...args])<span><a class="mark" href="#console_console_warn_data_args" id="console_console_warn_data_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>data</code> <any></li>
<li><code>...args</code> <any></li>
</ul>
</div><p>与console.log类似但输出结果以蓝色字体显示。输出优先级高于info, 用于输出警告信息。</p>
<h2>console.error([data][, ...args])<span><a class="mark" href="#console_console_error_data_args" id="console_console_error_data_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>data</code> <any></li>
<li><code>...args</code> <any></li>
</ul>
</div><p>与console.log类似但输出结果以红色字体显示。输出优先级高于warn, 用于输出错误信息。</p>
<h2>console.assert(value, message)<span><a class="mark" href="#console_console_assert_value_message" id="console_console_assert_value_message">#</a></span></h2>
<div class="signature"><ul>
<li>value <span class="type">&lt;any&gt;</span> 要断言的布尔值</li>
<li>message <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> value为false时要输出的信息</li>
</ul>
</div><p>断言。如果value为false则输出错误信息message并停止脚本运行。</p>
<h2>console.input(data[, ...args])<span><a class="mark" href="#console_console_input_data_args" id="console_console_input_data_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>data</code> <any></li>
<li><code>...args</code> <any></li>
</ul>
</div><p>与console.log一样输出信息并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串用eval计算后返回。</p>
<p>部分机型可能会有控制台不显示输入框的情况属于bug。</p>
<p>例如:</p>
<pre><code>var n = console.input(&quot;请输入一个数字:&quot;);
//输入123之后
toast(n + 1);
//显示124
</code></pre><h2>console.rawInput(data[, ...args])<span><a class="mark" href="#console_console_rawinput_data_args" id="console_console_rawinput_data_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>data</code> <any></li>
<li><code>...args</code> <any></li>
</ul>
</div><p>与console.log一样输出信息并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串直接返回。</p>
<p>部分机型可能会有控制台不显示输入框的情况属于bug。</p>
<p>例如:</p>
<pre><code>var n = console.input(&quot;请输入一个数字:&quot;);
//输入123之后
toast(n + 1);
//显示1231
</code></pre><h2>print(text)<span><a class="mark" href="#console_print_text" id="console_print_text">#</a></span></h2>
<div class="signature"><ul>
<li>text <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 要打印到控制台的信息</li>
</ul>
</div><p>在控制台中输出文本text。不会自动换行。</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,267 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Android7.0以上点按与手势模拟 | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/coordinates-based-automation.html">
</head>
<body class="alt apidoc" id="api-section-coordinates-based-automation">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation active" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="coordinates-based-automation" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#coordinates_based_automation_android7_0">Android7.0以上点按与手势模拟</a></span><ul>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_click_x_y">click(x, y)</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_longclick_x_y">longClick(x, y)</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_press_x_y_duration">press(x, y, duration)</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_swipe_x1_y1_x2_y2_duration">swipe(x1, y1, x2, y2, duration)</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_gesture_duration_x1_y1_x2_y2">gesture(duration, [x1, y1], [x2, y2], ...)</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_gestures_delay1_duration1_x1_y1_x2_y2_delay2_duration2_x3_y3_x4_y4">gestures([delay1, duration1, [x1, y1], [x2, y2], ...], [delay2, duration2, [x3, y3], [x4, y4], ...], ...)</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_setscreenmetrics_width_height">setScreenMetrics(width, height)</a></span></li>
</ul>
</li>
<li><span class="stability_2"><a href="#coordinates_based_automation_rootautomator">RootAutomator</a></span><ul>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_rootautomator_tap_x_y_id">RootAutomator.tap(x, y[, id])</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_rootautomator_swipe_x1_x2_y1_y2_duration_id">RootAutomator.swipe(x1, x2, y1, y2[, duration, id])</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_rootautomator_press_x_y_duration_id">RootAutomator.press(x, y, duration[, id])</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_rootautomator_longpress_x_y_id">RootAutomator.longPress(x, y[\, id])</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_rootautomator_touchdown_x_y_id">RootAutomator.touchDown(x, y[\, id])</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_rootautomator_touchmove_x_y_id">RootAutomator.touchMove(x, y[\, id])</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_rootautomator_touchup_id">RootAutomator.touchUp([id])</a></span></li>
</ul>
</li>
<li><span class="stability_1"><a href="#coordinates_based_automation_root">使用root权限点击和滑动的简单命令</a></span><ul>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_tap_x_y">Tap(x, y)</a></span></li>
<li><span class="stability_undefined"><a href="#coordinates_based_automation_swipe_x1_y1_x2_y2_duration_1">Swipe(x1, y1, x2, y2, [duration])</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>Android7.0以上点按与手势模拟<span><a class="mark" href="#coordinates_based_automation_android7_0" id="coordinates_based_automation_android7_0">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>本章节介绍了一些适用于Android7.0以上、不需要root权限、依赖于无障碍服务的点按与手势模拟的全局函数。</p>
<p><strong>注意以下命令只有Android7.0及以上才有效</strong></p>
<h2>click(x, y)<span><a class="mark" href="#coordinates_based_automation_click_x_y" id="coordinates_based_automation_click_x_y">#</a></span></h2>
<div class="signature"><ul>
<li><code>x</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要点击的坐标的x值</li>
<li><code>y</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要点击的坐标的y值</li>
</ul>
</div><p>模拟点击坐标(x, y),并返回是否点击成功。只有在点击执行完成后脚本才继续执行。</p>
<p>一般而言,只有点击过程(大约150毫秒)中被其他事件中断(例如用户自行点击)才会点击失败。</p>
<p>使用该函数模拟连续点击时可能有点击速度过慢的问题,这时可以用[press][]函数代替。</p>
<blockquote>
<p>可以在开发者选项中启用指针位置来查看坐标</p>
</blockquote>
<h2>longClick(x, y)<span><a class="mark" href="#coordinates_based_automation_longclick_x_y" id="coordinates_based_automation_longclick_x_y">#</a></span></h2>
<div class="signature"><ul>
<li><code>x</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要长按的坐标的x值</li>
<li><code>y</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要长按的坐标的y值</li>
</ul>
</div><p>模拟长按坐标(x, y), 并 返回是否成功。只有在长按执行完成大约600毫秒时脚本才会继续执行。</p>
<p>一般而言,只有长按过程中被其他事件中断(例如用户自行点击)才会长按失败。</p>
<h2>press(x, y, duration)<span><a class="mark" href="#coordinates_based_automation_press_x_y_duration" id="coordinates_based_automation_press_x_y_duration">#</a></span></h2>
<div class="signature"><ul>
<li><code>x</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要按住的坐标的x值</li>
<li><code>y</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要按住的坐标的y值</li>
<li><code>duration</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 按住时长,单位毫秒</li>
</ul>
</div><p>模拟按住坐标(x, y), 并返回是否成功。只有按住操作执行完成时脚本才会继续执行。</p>
<p>如果按住时间过短那么会被系统认为是点击如果时长超过500毫秒则认为是长按。</p>
<p>一般而言,只有按住过程中被其他事件中断才会操作失败。</p>
<h2>swipe(x1, y1, x2, y2, duration)<span><a class="mark" href="#coordinates_based_automation_swipe_x1_y1_x2_y2_duration" id="coordinates_based_automation_swipe_x1_y1_x2_y2_duration">#</a></span></h2>
<div class="signature"><ul>
<li><code>x1</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动的起始坐标的x值</li>
<li><code>y1</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动的起始坐标的y值</li>
<li><code>x2</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动的结束坐标的x值</li>
<li><code>y2</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动的结束坐标的y值</li>
<li><code>duration</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动时长,单位毫秒</li>
</ul>
</div><p>模拟从坐标(x1, y1)滑动到坐标(x2, y2),并返回是否成功。只有滑动操作执行完成时脚本才会继续执行。</p>
<p>一般而言,只有滑动过程中被其他事件中断才会滑动失败。</p>
<h2>gesture(duration, [x1, y1], [x2, y2], ...)<span><a class="mark" href="#coordinates_based_automation_gesture_duration_x1_y1_x2_y2" id="coordinates_based_automation_gesture_duration_x1_y1_x2_y2">#</a></span></h2>
<div class="signature"><ul>
<li><code>duration</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 手势的时长</li>
<li>[x, y] ... 手势滑动路径的一系列坐标</li>
</ul>
</div><p>模拟手势操作。例如<code>gesture(1000, [0, 0], [500, 500], [500, 1000])</code>为模拟一个从(0, 0)到(500, 500)到(500, 100)的手势操作时长为2秒。</p>
<h2>gestures([delay1, duration1, [x1, y1], [x2, y2], ...], [delay2, duration2, [x3, y3], [x4, y4], ...], ...)<span><a class="mark" href="#coordinates_based_automation_gestures_delay1_duration1_x1_y1_x2_y2_delay2_duration2_x3_y3_x4_y4" id="coordinates_based_automation_gestures_delay1_duration1_x1_y1_x2_y2_delay2_duration2_x3_y3_x4_y4">#</a></span></h2>
<p>同时模拟多个手势。每个手势的参数为[delay, duration, 坐标], delay为延迟多久(毫秒)才执行该手势duration为手势执行时长坐标为手势经过的点的坐标。其中delay参数可以省略默认为0。</p>
<p>例如手指捏合:</p>
<pre><code>gestures([0, 500, [800, 300], [500, 1000]],
[0, 500, [300, 1500], [500, 1000]]);
</code></pre><h2>setScreenMetrics(width, height)<span><a class="mark" href="#coordinates_based_automation_setscreenmetrics_width_height" id="coordinates_based_automation_setscreenmetrics_width_height">#</a></span></h2>
<div class="signature"><ul>
<li>width <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 屏幕宽度,单位像素</li>
<li>height <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 屏幕高度,单位像素</li>
</ul>
</div><p>设置脚本坐标点击所适合的屏幕宽高。如果脚本运行时,屏幕宽度不一致会自动放缩坐标。</p>
<p>例如在1920*1080的设备中某个操作的代码为</p>
<pre><code>setScreenMetrics(1080, 1920);
click(800, 200);
longClick(300, 500);
</code></pre><p>那么在其他设备上AutoJs会自动放缩坐标以便脚本仍然有效。</p>
<h1>RootAutomator<span><a class="mark" href="#coordinates_based_automation_rootautomator" id="coordinates_based_automation_rootautomator">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>RootAutomator是一个使用root权限来模拟触摸的对象用它可以完成触摸与多点触摸并且这些动作的执行没有延迟。</p>
<p><strong>注意以下命令需要root权限</strong></p>
<pre><code>var ra = new RootAutomator();
</code></pre><h2>RootAutomator.tap(x, y[, id])<span><a class="mark" href="#coordinates_based_automation_rootautomator_tap_x_y_id" id="coordinates_based_automation_rootautomator_tap_x_y_id">#</a></span></h2>
<div class="signature"><ul>
<li><code>x</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 横坐标</li>
<li><code>y</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 纵坐标</li>
<li><code>id</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 多点触摸id可选默认为1可以通过setDefaultId指定。</li>
</ul>
</div><p>点击位置(x, y)。其中id是一个整数值用于区分多点触摸不同的id表示不同的&quot;手指&quot;,例如:</p>
<pre><code>var ra = new RootAutomator();
//让&quot;手指1&quot;点击位置(100, 100)
ra.tap(100, 100, 1);
//让&quot;手指2&quot;点击位置(200, 200);
ra.tap(200, 200, 2);
ra.exit();
</code></pre><p>如果不需要多点触摸则不需要id这个参数。
多点触摸通常用于手势或游戏操作,例如模拟双指捏合、双指上滑等。</p>
<h2>RootAutomator.swipe(x1, x2, y1, y2[, duration, id])<span><a class="mark" href="#coordinates_based_automation_rootautomator_swipe_x1_x2_y1_y2_duration_id" id="coordinates_based_automation_rootautomator_swipe_x1_x2_y1_y2_duration_id">#</a></span></h2>
<div class="signature"><ul>
<li><code>x1</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动起点横坐标</li>
<li><code>y1</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动起点纵坐标</li>
<li><code>x2</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动终点横坐标</li>
<li><code>y2</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动终点纵坐标</li>
<li><code>duration</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动时长单位毫秒默认值为300</li>
<li><code>id</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 多点触摸id可选默认为1</li>
</ul>
</div><p>模拟一次从(x1, y1)到(x2, y2)的时间为duration毫秒的滑动。</p>
<h2>RootAutomator.press(x, y, duration[, id])<span><a class="mark" href="#coordinates_based_automation_rootautomator_press_x_y_duration_id" id="coordinates_based_automation_rootautomator_press_x_y_duration_id">#</a></span></h2>
<div class="signature"><ul>
<li>x <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 横坐标</li>
<li>y <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 纵坐标</li>
<li>duration <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 按下时长</li>
<li>id <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 多点触摸id可选默认为1</li>
</ul>
</div><p>模拟按下位置(x, y)时长为duration毫秒。</p>
<p>使用该函数模拟连续点击时可能有点击速度过慢的问题,这时可以用[RootAutomator.press][]函数代替。</p>
<h2>RootAutomator.longPress(x, y[\, id])<span><a class="mark" href="#coordinates_based_automation_rootautomator_longpress_x_y_id" id="coordinates_based_automation_rootautomator_longpress_x_y_id">#</a></span></h2>
<div class="signature"><ul>
<li>x <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 横坐标</li>
<li>y <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 纵坐标</li>
<li>duration <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 按下时长</li>
<li>id <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 多点触摸id可选默认为1</li>
</ul>
</div><p>模拟长按位置(x, y)。</p>
<p>以上为简单模拟触摸操作的函数。如果要模拟一些复杂的手势,需要更底层的函数。</p>
<h2>RootAutomator.touchDown(x, y[\, id])<span><a class="mark" href="#coordinates_based_automation_rootautomator_touchdown_x_y_id" id="coordinates_based_automation_rootautomator_touchdown_x_y_id">#</a></span></h2>
<div class="signature"><ul>
<li>x <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 横坐标</li>
<li>y <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 纵坐标</li>
<li>id <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 多点触摸id可选默认为1</li>
</ul>
</div><p>模拟手指按下位置(x, y)。</p>
<h2>RootAutomator.touchMove(x, y[\, id])<span><a class="mark" href="#coordinates_based_automation_rootautomator_touchmove_x_y_id" id="coordinates_based_automation_rootautomator_touchmove_x_y_id">#</a></span></h2>
<div class="signature"><ul>
<li>x <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 横坐标</li>
<li>y <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 纵坐标</li>
<li>id <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 多点触摸id可选默认为1</li>
</ul>
</div><p>模拟移动手指到位置(x, y)。</p>
<h2>RootAutomator.touchUp([id])<span><a class="mark" href="#coordinates_based_automation_rootautomator_touchup_id" id="coordinates_based_automation_rootautomator_touchup_id">#</a></span></h2>
<div class="signature"><ul>
<li>id <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 多点触摸id可选默认为1</li>
</ul>
</div><p>模拟手指弹起。</p>
<h1>使用root权限点击和滑动的简单命令<span><a class="mark" href="#coordinates_based_automation_root" id="coordinates_based_automation_root">#</a></span></h1>
<div class="api_stability api_stability_1"><a href="documentation.html#documentation_stability_index">Stability: 1</a> - Experimental </div><p>注意:本章节的函数在后续版本很可能有改动!请勿过分依赖本章节函数的副作用。推荐使用[RootAutomator][]代替本章节的触摸函数。</p>
<p>以下函数均需要root权限可以实现任意位置的点击、滑动等。</p>
<ul>
<li>这些函数通常首字母大写以表示其特殊的权限。 </li>
<li>这些函数均不返回任何值。 </li>
<li>并且这些函数的执行是异步的、非阻塞的在不同机型上所用的时间不同。脚本不会等待动作执行完成才继续执行。因此最好在每个函数之后加上适当的sleep来达到期望的效果。</li>
</ul>
<p>例如:</p>
<pre><code>Tap(100, 100);
sleep(500);
</code></pre><p>注意,动作的执行可能无法被停止,例如:</p>
<pre><code>for(var i = 0; i &lt; 100; i++){
Tap(100, 100);
}
</code></pre><p>这段代码执行后可能会出现在任务管理中停止脚本后点击仍然继续的情况。
因此,强烈建议在每个动作后加上延时:</p>
<pre><code>for(var i = 0; i &lt; 100; i++){
Tap(100, 100);
sleep(500);
}
</code></pre><h2>Tap(x, y)<span><a class="mark" href="#coordinates_based_automation_tap_x_y" id="coordinates_based_automation_tap_x_y">#</a></span></h2>
<div class="signature"><ul>
<li>x, y <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要点击的坐标。</li>
</ul>
</div><p>点击位置(x, y), 您可以通过&quot;开发者选项&quot;开启指针位置来确定点击坐标。</p>
<h2>Swipe(x1, y1, x2, y2, [duration])<span><a class="mark" href="#coordinates_based_automation_swipe_x1_y1_x2_y2_duration_1" id="coordinates_based_automation_swipe_x1_y1_x2_y2_duration_1">#</a></span></h2>
<div class="signature"><ul>
<li>x1, y1 <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动起点的坐标</li>
<li>x2, y2 <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动终点的坐标</li>
<li>duration <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 滑动动作所用的时间</li>
</ul>
</div><p>滑动。从(x1, y1)位置滑动到(x2, y2)位置。</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,139 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>About this Documentation | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/documentation.html">
</head>
<body class="alt apidoc" id="api-section-documentation">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation active" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="documentation" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_undefined"><a href="#documentation_about_this_documentation">About this Documentation</a></span><ul>
<li><span class="stability_undefined"><a href="#documentation_stability_index">Stability Index</a></span></li>
<li><span class="stability_1"><a href="#documentation_json_output">JSON Output</a></span></li>
<li><span class="stability_undefined"><a href="#documentation_syscalls_and_man_pages">Syscalls and man pages</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>About this Documentation<span><a class="mark" href="#documentation_about_this_documentation" id="documentation_about_this_documentation">#</a></span></h1>
<!-- type=misc -->
<p>The goal of this documentation is to comprehensively explain the Node.js
API, both from a reference as well as a conceptual point of view. Each
section describes a built-in module or high-level concept.</p>
<p>Where appropriate, property types, method arguments, and the arguments
provided to event handlers are detailed in a list underneath the topic
heading.</p>
<p>Every <code>.html</code> document has a corresponding <code>.json</code> document presenting
the same information in a structured manner. This feature is
experimental, and added for the benefit of IDEs and other utilities that
wish to do programmatic things with the documentation.</p>
<p>Every <code>.html</code> and <code>.json</code> file is generated based on the corresponding
<code>.md</code> file in the <code>doc/api/</code> folder in Node.js&#39;s source tree. The
documentation is generated using the <code>tools/doc/generate.js</code> program.
The HTML template is located at <code>doc/template.html</code>.</p>
<p>If errors are found in this documentation, please <a href="https://github.com/nodejs/node/issues/new">submit an issue</a>
or see <a href="https://github.com/nodejs/node/blob/master/CONTRIBUTING.md">the contributing guide</a> for directions on how to submit a patch.</p>
<h2>Stability Index<span><a class="mark" href="#documentation_stability_index" id="documentation_stability_index">#</a></span></h2>
<!--type=misc-->
<p>Throughout the documentation are indications of a section&#39;s
stability. The Node.js API is still somewhat changing, and as it
matures, certain parts are more reliable than others. Some are so
proven, and so relied upon, that they are unlikely to ever change at
all. Others are brand new and experimental, or known to be hazardous
and in the process of being redesigned.</p>
<p>The stability indices are as follows:</p>
<div class="api_stability api_stability_0"><a href="documentation.html#documentation_stability_index">Stability: 0</a> - Deprecated This feature is known to be problematic, and changes may be planned. Do not rely on it. Use of the feature may cause warnings to be emitted. Backwards compatibility across major versions should not be expected.</div><div class="api_stability api_stability_1"><a href="documentation.html#documentation_stability_index">Stability: 1</a> - Experimental This feature is still under active development and subject to non-backwards compatible changes, or even removal, in any future version. Use of the feature is not recommended in production environments. Experimental features are not subject to the Node.js Semantic Versioning model.</div><p><em>Note</em>: Caution must be used when making use of <code>Experimental</code> features,
particularly within modules that may be used as dependencies (or dependencies
of dependencies) within a Node.js application. End users may not be aware that
experimental features are being used, and therefore may experience unexpected
failures or behavioral changes when changes occur. To help avoid such surprises,
<code>Experimental</code> features may require a command-line flag to explicitly enable
them, or may cause a process warning to be emitted. By default, such warnings
are printed to <code>stderr</code> and may be handled by attaching a listener to the
<code>process.on(&#39;warning&#39;)</code> event.</p>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable The API has proven satisfactory. Compatibility with the npm ecosystem is a high priority, and will not be broken unless absolutely necessary.</div><h2>JSON Output<span><a class="mark" href="#documentation_json_output" id="documentation_json_output">#</a></span></h2>
<div class="api_stability api_stability_1"><a href="documentation.html#documentation_stability_index">Stability: 1</a> - Experimental</div><p>Every HTML file in the markdown has a corresponding JSON file with the
same data.</p>
<p>This feature was added in Node.js v0.6.12. It is experimental.</p>
<h2>Syscalls and man pages<span><a class="mark" href="#documentation_syscalls_and_man_pages" id="documentation_syscalls_and_man_pages">#</a></span></h2>
<p>System calls like <a href="http://man7.org/linux/man-pages/man2/open.2.html">open(2)</a> and <a href="http://man7.org/linux/man-pages/man2/read.2.html">read(2)</a> define the interface between user programs
and the underlying operating system. Node functions which simply wrap a syscall,
like <code>fs.open()</code>, will document that. The docs link to the corresponding man
pages (short for manual pages) which describe how the syscalls work.</p>
<p><strong>Note:</strong> some syscalls, like <a href="http://man7.org/linux/man-pages/man2/lchown.2.html">lchown(2)</a>, are BSD-specific. That means, for
example, that <code>fs.lchown()</code> only works on macOS and other BSD-derived systems,
and is not available on Linux.</p>
<p>Most Unix syscalls have Windows equivalents, but behavior may differ on Windows
relative to Linux and macOS. For an example of the subtle ways in which it&#39;s
sometimes impossible to replace Unix syscall semantics on Windows, see <a href="https://github.com/nodejs/node/issues/4760">Node
issue 4760</a>.</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,196 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Engines | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/engines.html">
</head>
<body class="alt apidoc" id="api-section-engines">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines active" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="engines" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#engines_engines">Engines</a></span><ul>
<li><span class="stability_undefined"><a href="#engines_engines_execscript_name_script_config">engines.execScript(name, script[, config])</a></span></li>
<li><span class="stability_undefined"><a href="#engines_engines_execscriptfile_path_config">engines.execScriptFile(path[, config])</a></span></li>
<li><span class="stability_undefined"><a href="#engines_engines_execautofile_path_config">engines.execAutoFile(path[, config])</a></span></li>
<li><span class="stability_undefined"><a href="#engines_engines_stopall">engines.stopAll()</a></span></li>
<li><span class="stability_undefined"><a href="#engines_engines_stopallandtoast">engines.stopAllAndToast()</a></span></li>
<li><span class="stability_undefined"><a href="#engines_engines_myengine">engines.myEngine()</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#engines_scriptexecution">ScriptExecution</a></span><ul>
<li><span class="stability_undefined"><a href="#engines_scriptexecution_getengine">ScriptExecution.getEngine()</a></span></li>
<li><span class="stability_undefined"><a href="#engines_scriptexecution_getconfig">ScriptExecution.getConfig()</a></span></li>
<li><span class="stability_undefined"><a href="#engines_scriptexecution_getsource">ScriptExecution.getSource()</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#engines_scriptengine">ScriptEngine</a></span><ul>
<li><span class="stability_undefined"><a href="#engines_scriptengine_forcestop">ScriptEngine.forceStop()</a></span></li>
<li><span class="stability_undefined"><a href="#engines_scriptengine_gettag_tagname">ScriptEngine.getTag(tagName)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#engines_scriptconfig">ScriptConfig</a></span><ul>
<li><span class="stability_undefined"><a href="#engines_delay">delay</a></span></li>
<li><span class="stability_undefined"><a href="#engines_interval">interval</a></span></li>
<li><span class="stability_undefined"><a href="#engines_looptimes">loopTimes</a></span></li>
<li><span class="stability_undefined"><a href="#engines_getpath">getPath()</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#engines_scriptsource">ScriptSource</a></span><ul>
<li><span class="stability_undefined"><a href="#engines_getname">getName()</a></span></li>
<li><span class="stability_undefined"><a href="#engines_getenginename">getEngineName()</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>Engines<span><a class="mark" href="#engines_engines" id="engines_engines">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>engines模块包含了一些与脚本引擎有关的函数包括运行其他脚本关闭脚本等。</p>
<h2>engines.execScript(name, script[, config])<span><a class="mark" href="#engines_engines_execscript_name_script_config" id="engines_engines_execscript_name_script_config">#</a></span></h2>
<div class="signature"><ul>
<li><code>name</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要运行的脚本名称。这个名称和文件名称无关,只是在任务管理中显示的名称。</li>
<li><code>script</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要运行的脚本内容。</li>
<li><code>config</code> \<Object\> 运行配置项<ul>
<li><code>delay</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 延迟执行的毫秒数默认为0</li>
<li><code>loopTimes</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 循环运行次数默认为1</li>
<li><code>interval</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 循环运行时两次运行之间的时间间隔默认为0</li>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 指定脚本运行的目录。这个路径会用于require时寻找模块文件。</li>
</ul>
</li>
</ul>
</div><p>在新线程中运行脚本script。返回一个<a href="#engines_scriptexecution">ScriptExectuion</a>对象。</p>
<h2>engines.execScriptFile(path[, config])<span><a class="mark" href="#engines_engines_execscriptfile_path_config" id="engines_engines_execscriptfile_path_config">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要运行的脚本路径。</li>
<li><code>config</code> \<Object\> 运行配置项<ul>
<li><code>delay</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 延迟执行的毫秒数默认为0</li>
<li><code>loopTimes</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 循环运行次数默认为1</li>
<li><code>interval</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 循环运行时两次运行之间的时间间隔默认为0</li>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 指定脚本运行的目录。这个路径会用于require时寻找模块文件。</li>
</ul>
</li>
</ul>
</div><p>在新线程中运行脚本文件path。返回一个<a href="#ScriptExecution">ScriptExecution</a>对象。</p>
<h2>engines.execAutoFile(path[, config])<span><a class="mark" href="#engines_engines_execautofile_path_config" id="engines_engines_execautofile_path_config">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要运行的录制文件路径。</li>
<li><code>config</code> \<Object\> 运行配置项<ul>
<li><code>delay</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 延迟执行的毫秒数默认为0</li>
<li><code>loopTimes</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 循环运行次数默认为1</li>
<li><code>interval</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 循环运行时两次运行之间的时间间隔默认为0</li>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 指定脚本运行的目录。这个路径会用于require时寻找模块文件。</li>
</ul>
</li>
</ul>
</div><p>在新线程中运行录制文件path。返回一个<a href="#ScriptExecution">ScriptExecution</a>对象。</p>
<h2>engines.stopAll()<span><a class="mark" href="#engines_engines_stopall" id="engines_engines_stopall">#</a></span></h2>
<p>停止所有正在运行的脚本。包括当前脚本自身。</p>
<h2>engines.stopAllAndToast()<span><a class="mark" href="#engines_engines_stopallandtoast" id="engines_engines_stopallandtoast">#</a></span></h2>
<p>停止所有正在运行的脚本并显示停止的脚本数量。包括当前脚本自身。</p>
<h2>engines.myEngine()<span><a class="mark" href="#engines_engines_myengine" id="engines_engines_myengine">#</a></span></h2>
<p>返回当前脚本的脚本引擎对象(<a href="#engines_scriptengine">ScriptEngine</a>)</p>
<h1>ScriptExecution<span><a class="mark" href="#engines_scriptexecution" id="engines_scriptexecution">#</a></span></h1>
<p>执行脚本时返回的对象,可以通过他获取执行的引擎、配置、源码等。</p>
<h2>ScriptExecution.getEngine()<span><a class="mark" href="#engines_scriptexecution_getengine" id="engines_scriptexecution_getengine">#</a></span></h2>
<p>返回执行该脚本的脚本引擎对象(<a href="#engines_scriptengine">ScriptEngine</a>)</p>
<h2>ScriptExecution.getConfig()<span><a class="mark" href="#engines_scriptexecution_getconfig" id="engines_scriptexecution_getconfig">#</a></span></h2>
<p>返回该脚本的运行配置(<a href="#engines_scriptconfig">ScriptConfig</a>)</p>
<h2>ScriptExecution.getSource()<span><a class="mark" href="#engines_scriptexecution_getsource" id="engines_scriptexecution_getsource">#</a></span></h2>
<p>返回该脚本的源码对象(<a href="#engines_scriptsource">ScriptSource</a>)</p>
<h1>ScriptEngine<span><a class="mark" href="#engines_scriptengine" id="engines_scriptengine">#</a></span></h1>
<h2>ScriptEngine.forceStop()<span><a class="mark" href="#engines_scriptengine_forcestop" id="engines_scriptengine_forcestop">#</a></span></h2>
<p>停止脚本引擎的执行。</p>
<h2>ScriptEngine.getTag(tagName)<span><a class="mark" href="#engines_scriptengine_gettag_tagname" id="engines_scriptengine_gettag_tagname">#</a></span></h2>
<div class="signature"><ul>
<li><code>tagName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 名称</li>
</ul>
</div><p>返回对应于tagName的附加在该脚本引擎上的额外信息。tagName包括</p>
<ul>
<li><code>source</code> 该脚本引擎当前正在执行的源码(<a href="#engines_scriptsource">ScriptSource</a>)</li>
<li><code>execute_path</code> 该脚本引擎当前执行的路径</li>
</ul>
<p>停止脚本引擎的执行。</p>
<h1>ScriptConfig<span><a class="mark" href="#engines_scriptconfig" id="engines_scriptconfig">#</a></span></h1>
<p>脚本执行时的配置。</p>
<h2>delay<span><a class="mark" href="#engines_delay" id="engines_delay">#</a></span></h2>
<p>延迟执行的毫秒数</p>
<h2>interval<span><a class="mark" href="#engines_interval" id="engines_interval">#</a></span></h2>
<p>循环运行时两次运行之间的时间间隔</p>
<h2>loopTimes<span><a class="mark" href="#engines_looptimes" id="engines_looptimes">#</a></span></h2>
<p>循环运行次数</p>
<h2>getPath()<span><a class="mark" href="#engines_getpath" id="engines_getpath">#</a></span></h2>
<p>返回一个字符串数组表示脚本运行时模块寻找的路径。</p>
<h1>ScriptSource<span><a class="mark" href="#engines_scriptsource" id="engines_scriptsource">#</a></span></h1>
<p>脚本执行时的源码对象。可以是字符串源码、文件源码等。</p>
<p>如果该源码是文件脚本,则可以通过<code>toString()</code>得到该文件的路径。</p>
<h2>getName()<span><a class="mark" href="#engines_getname" id="engines_getname">#</a></span></h2>
<p>返回该源码的名称。</p>
<h2>getEngineName()<span><a class="mark" href="#engines_getenginename" id="engines_getenginename">#</a></span></h2>
<p>返回执行该源码的脚本引擎的名称。</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,499 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Events | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/events.html">
</head>
<body class="alt apidoc" id="api-section-events">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events active" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="events" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#events_events">Events</a></span><ul>
<li><span class="stability_undefined"><a href="#events_events_emitter">events.emitter()</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_observekey">events.observeKey()</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_onkeydown_keyname_listener">events.onKeyDown(keyName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_onkeyup_keyname_listener">events.onKeyUp(keyName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_oncekeydown_keyname_listener">events.onceKeyDown(keyName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_oncekeyup_keyname_listener">events.onceKeyUp(keyName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_removeallkeydownlisteners_keyname">events.removeAllKeyDownListeners(keyName)</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_removeallkeyuplisteners_keyname">events.removeAllKeyUpListeners(keyName)</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_observetouch">events.observeTouch()</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_settoucheventtimeout_timeout">events.setTouchEventTimeout(timeout)</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_gettoucheventtimeout">events.getTouchEventTimeout()</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_ontouch_listener">events.onTouch(listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_events_removealltouchlisteners">events.removeAllTouchListeners()</a></span></li>
<li><span class="stability_undefined"><a href="#events_key">事件: &#39;key&#39;</a></span></li>
<li><span class="stability_undefined"><a href="#events_key_down">事件: &#39;key_down&#39;</a></span></li>
<li><span class="stability_undefined"><a href="#events_key_up">事件: &#39;key_up&#39;</a></span></li>
<li><span class="stability_undefined"><a href="#events_obversenotification">obverseNotification()</a></span></li>
<li><span class="stability_undefined"><a href="#events_toast">事件: &#39;toast&#39;</a></span></li>
<li><span class="stability_undefined"><a href="#events_notification">事件: &#39;notification&#39;</a></span></li>
</ul>
</li>
<li><span class="stability_2"><a href="#events_eventemitter">EventEmitter</a></span><ul>
<li><span class="stability_undefined"><a href="#events_eventemitter_defaultmaxlisteners">EventEmitter.defaultMaxListeners</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_addlistener_eventname_listener">EventEmitter.addListener(eventName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_emit_eventname_args">EventEmitter.emit(eventName[, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_eventnames">EventEmitter.eventNames()</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_getmaxlisteners">EventEmitter.getMaxListeners()</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_listenercount_eventname">EventEmitter.listenerCount(eventName)</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_listeners_eventname">EventEmitter.listeners(eventName)</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_on_eventname_listener">EventEmitter.on(eventName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_once_eventname_listener">EventEmitter.once(eventName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_prependlistener_eventname_listener">EventEmitter.prependListener(eventName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_prependoncelistener_eventname_listener">EventEmitter.prependOnceListener(eventName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_removealllisteners_eventname">EventEmitter.removeAllListeners([eventName])</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_removelistener_eventname_listener">EventEmitter.removeListener(eventName, listener)</a></span></li>
<li><span class="stability_undefined"><a href="#events_eventemitter_setmaxlisteners_n">EventEmitter.setMaxListeners(n)</a></span></li>
</ul>
</li>
<li><span class="stability_2"><a href="#events_keyevent">KeyEvent</a></span><ul>
<li><span class="stability_undefined"><a href="#events_keyevent_getaction">KeyEvent.getAction()</a></span></li>
<li><span class="stability_undefined"><a href="#events_keyevent_getkeycode">KeyEvent.getKeyCode()</a></span></li>
<li><span class="stability_undefined"><a href="#events_keyevent_geteventtime">KeyEvent.getEventTime()</a></span></li>
<li><span class="stability_undefined"><a href="#events_keyevent_getdowntime">KeyEvent.getDownTime()</a></span></li>
<li><span class="stability_undefined"><a href="#events_keyevent_keycodetostring_keycode">KeyEvent.keyCodeToString(keyCode)</a></span></li>
</ul>
</li>
<li><span class="stability_2"><a href="#events_keys">Keys</a></span></li>
</ul>
</div>
<div id="apicontent">
<h1>Events<span><a class="mark" href="#events_events" id="events_events">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>events模块提供了监听手机通知、按键、触摸的接口。您可以用他配合自动操作函数完成自动化工作。</p>
<p>events本身是一个<a href="#events_eventemitter">EventEmiiter</a>, 但内置了一些事件、包括按键事件、通知事件、Toast事件等。</p>
<h2>events.emitter()<span><a class="mark" href="#events_events_emitter" id="events_events_emitter">#</a></span></h2>
<p>返回一个新的[EventEmitter][]。这个EventEmitter没有内置任何事件。</p>
<h2>events.observeKey()<span><a class="mark" href="#events_events_observekey" id="events_events_observekey">#</a></span></h2>
<p>启用按键监听例如音量键、Home键。此函数使用无障碍服务实现因此此函数会调用auto()确保无障碍服务启用。</p>
<p>只有这个函数成功执行后, [onKeyDown][], [onKeyUp][]等按键事件的监听才有效。</p>
<p>该函数在安卓4.3以上才能使用。</p>
<h2>events.onKeyDown(keyName, listener)<span><a class="mark" href="#events_events_onkeydown_keyname_listener" id="events_events_onkeydown_keyname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要监听的按键名称</li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 按键监听器。参数为一个<a href="#events_keyevent">KeyEvent</a></li>
</ul>
</div><p>注册一个按键监听函数当有keyName对应的按键被按下会调用该函数。可用的按键名称参见[Keys][]。</p>
<p>例如:</p>
<pre><code>//启用按键监听
events.observeKey();
//监听音量上键按下
events.onKeyDown(&quot;volume_up&quot;, function(event){
toast(&quot;音量上键被按下了&quot;);
});
//监听菜单键按下
events.onKeyDown(&quot;menu&quot;, function(event){
toast(&quot;菜单键被按下了&quot;);
exit();
});
</code></pre><h2>events.onKeyUp(keyName, listener)<span><a class="mark" href="#events_events_onkeyup_keyname_listener" id="events_events_onkeyup_keyname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要监听的按键名称</li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 按键监听器。参数为一个<a href="#events_keyevent">KeyEvent</a></li>
</ul>
</div><p>注册一个按键监听函数当有keyName对应的按键弹起会调用该函数。可用的按键名称参见<a href="#events_keys">Keys</a></p>
<p>一次完整的按键动作包括了按键按下和弹起。按下事件会在手指按下一个按键的&quot;瞬间&quot;触发, 弹起事件则在手指放开这个按键时触发。</p>
<p>例如:</p>
<pre><code>//启用按键监听
events.observeKey();
//监听音量下键弹起
events.onKeyDown(&quot;volume_down&quot;, function(event){
toast(&quot;音量上键弹起&quot;);
});
//监听Home键弹起
events.onKeyDown(&quot;home&quot;, function(event){
toast(&quot;Home键弹起&quot;);
exit();
});
</code></pre><h2>events.onceKeyDown(keyName, listener)<span><a class="mark" href="#events_events_oncekeydown_keyname_listener" id="events_events_oncekeydown_keyname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要监听的按键名称</li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 按键监听器。参数为一个<a href="#events_keyevent">KeyEvent</a></li>
</ul>
</div><p>注册一个按键监听函数当有keyName对应的按键被按下时会调用该函数之后会注销该按键监听器。</p>
<p>也就是listener只有在onceKeyDown调用后的第一次按键事件被调用一次。</p>
<h2>events.onceKeyUp(keyName, listener)<span><a class="mark" href="#events_events_oncekeyup_keyname_listener" id="events_events_oncekeyup_keyname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要监听的按键名称</li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 按键监听器。参数为一个<a href="#events_keyevent">KeyEvent</a></li>
</ul>
</div><p>注册一个按键监听函数当有keyName对应的按键弹起时会调用该函数之后会注销该按键监听器。</p>
<p>也就是listener只有在onceKeyUp调用后的第一次按键事件被调用一次。</p>
<h2>events.removeAllKeyDownListeners(keyName)<span><a class="mark" href="#events_events_removeallkeydownlisteners_keyname" id="events_events_removeallkeydownlisteners_keyname">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 按键名称</li>
</ul>
</div><p>删除该按键的KeyDown(按下)事件的所有监听。</p>
<h2>events.removeAllKeyUpListeners(keyName)<span><a class="mark" href="#events_events_removeallkeyuplisteners_keyname" id="events_events_removeallkeyuplisteners_keyname">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 按键名称</li>
</ul>
</div><p>删除该按键的KeyUp(弹起)事件的所有监听。</p>
<h2>events.observeTouch()<span><a class="mark" href="#events_events_observetouch" id="events_events_observetouch">#</a></span></h2>
<p>启用屏幕触摸监听。需要root权限</p>
<p>只有这个函数被成功执行后, 触摸事件的监听才有效。</p>
<p>没有root权限调用该函数则什么也不会发生。(<strong>注意</strong>: 这个行为未来可能会更改为抛出异常)</p>
<h2>events.setTouchEventTimeout(timeout)<span><a class="mark" href="#events_events_settoucheventtimeout_timeout" id="events_events_settoucheventtimeout_timeout">#</a></span></h2>
<div class="signature"><ul>
<li><code>timeout</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 两个触摸事件的最小间隔。单位毫秒。默认为10毫秒。如果number小于0视为0处理。</li>
</ul>
</div><p>设置两个触摸事件分发的最小时间间隔。</p>
<p>例如间隔为10毫秒的话前一个触摸事件发生并被注册的监听器处理后至少要过10毫秒才能分发和处理下一个触摸事件这10毫秒之间的触摸将会被忽略。</p>
<p>建议在满足需要的情况下尽量提高这个间隔。一个简单滑动动作可能会连续触发上百个触摸事件如果timeout设置过低可能造成事件拥堵。强烈建议不要设置timeout为0。</p>
<h2>events.getTouchEventTimeout()<span><a class="mark" href="#events_events_gettoucheventtimeout" id="events_events_gettoucheventtimeout">#</a></span></h2>
<p>返回触摸事件的最小时间间隔。</p>
<h2>events.onTouch(listener)<span><a class="mark" href="#events_events_ontouch_listener" id="events_events_ontouch_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 参数为[Point][]的函数</li>
</ul>
</div><p>注册一个触摸监听函数。相当于<code>on(&quot;touch&quot;, listener)</code></p>
<p>例如:</p>
<pre><code>//启用触摸监听
events.observeTouch();
//注册触摸监听器
events.onTouch(function(p){
//触摸事件发生时, 打印出触摸的点的坐标
log(p.x + &quot;, &quot; + p.y);
});
</code></pre><h2>events.removeAllTouchListeners()<span><a class="mark" href="#events_events_removealltouchlisteners" id="events_events_removealltouchlisteners">#</a></span></h2>
<p>删除所有事件监听函数。</p>
<h2>事件: &#39;key&#39;<span><a class="mark" href="#events_key" id="events_key">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyCode</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 键值</li>
<li><code>event</code> <span class="type">&lt;KeyEvent&gt;</span> 事件</li>
</ul>
</div><p>当有按键被按下或弹起时会触发该事件。
例如:</p>
<pre><code>auto();
events.observeKey();
events.on(&quot;key&quot;, function(keyCode, event){
//处理按键事件
});
</code></pre><p>其中监听器的参数KeyCode包括</p>
<ul>
<li><code>KeyEvent.KEYCODE_HOME</code> 主页键</li>
<li><code>KeyEvent.KEYCODE_BACK</code> 返回键</li>
<li><code>KeyEvent.KEYCODE_MENU</code> 菜单键</li>
<li><code>KeyEvent.KEYCODE_VOLUMEUP</code> 音量上键</li>
<li><code>KeyEvent.KEYCODE_VOLUMEDOWN</code> 音量下键</li>
</ul>
<h2>事件: &#39;key_down&#39;<span><a class="mark" href="#events_key_down" id="events_key_down">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyCode</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 键值</li>
<li><code>event</code> <span class="type">&lt;KeyEvent&gt;</span> 事件</li>
</ul>
</div><p>当有按键被按下时会触发该事件。</p>
<pre><code>auto();
events.observeKey();
events.on(&quot;key_down&quot;, function(keyCode, event){
//处理按键按下事件
});
</code></pre><h2>事件: &#39;key_up&#39;<span><a class="mark" href="#events_key_up" id="events_key_up">#</a></span></h2>
<div class="signature"><ul>
<li><code>keyCode</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 键值</li>
<li><code>event</code> <span class="type">&lt;KeyEvent&gt;</span> 事件</li>
</ul>
</div><p>当有按键弹起时会触发该事件。</p>
<pre><code>auto();
events.observeKey();
events.on(&quot;key_up&quot;, function(keyCode, event){
//处理按键弹起事件
});
</code></pre><h2>obverseNotification()<span><a class="mark" href="#events_obversenotification" id="events_obversenotification">#</a></span></h2>
<p>开启通知(包括Toast)监听。</p>
<p>通知与Toast监听依赖于无障碍服务因此这个函数会调用<code>auto()</code>来确保无障碍服务启用。</p>
<p>例如:</p>
<pre><code>events.obverseNotification();
events.onNotification(function(notification){
log(notification.getText());
});
events.onToast(function(toast){
log(toast.getText());
});
</code></pre><h2>事件: &#39;toast&#39;<span><a class="mark" href="#events_toast" id="events_toast">#</a></span></h2>
<div class="signature"><ul>
<li><code>toast</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a><ul>
<li><code>getText()</code> 获取Toast的文本内容</li>
<li><code>getPackageName()</code> 获取发出Toast的应用包名</li>
</ul>
</li>
</ul>
</div><p>当有应用发出toast(气泡消息)时会触发该事件。但Auto.js软件本身的toast除外。
例如要记录发出所有toast的应用</p>
<pre><code>events.obverseNotification();
events.onToast(function(toast){
log(&quot;Toast内容: &quot; + toast.getText() + &quot; 包名: &quot; + toast.getPackageName());
});
</code></pre><h2>事件: &#39;notification&#39;<span><a class="mark" href="#events_notification" id="events_notification">#</a></span></h2>
<div class="signature"><ul>
<li><code>notification</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 通知</li>
</ul>
</div><p>当有应用发出通知时会触发该事件。</p>
<p>例如:</p>
<pre><code>events.observeNotification();
events.on(&quot;notification&quot;, function(notification){
log(notification);
});
</code></pre><p><strong>注意</strong>: 这是一个实验性功能。实测只有某些情况下的通知才能被正确捕捉。</p>
<h1>EventEmitter<span><a class="mark" href="#events_eventemitter" id="events_eventemitter">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><h2>EventEmitter.defaultMaxListeners<span><a class="mark" href="#events_eventemitter_defaultmaxlisteners" id="events_eventemitter_defaultmaxlisteners">#</a></span></h2>
<p>每个事件默认可以注册最多 10 个监听器。 单个 EventEmitter 实例的限制可以使用 emitter.setMaxListeners(n) 方法改变。 所有 EventEmitter 实例的默认值可以使用 EventEmitter.defaultMaxListeners 属性改变。 </p>
<p>设置 EventEmitter.defaultMaxListeners 要谨慎,因为会影响所有 EventEmitter 实例,包括之前创建的。 因而,调用 emitter.setMaxListeners(n) 优先于 EventEmitter.defaultMaxListeners。</p>
<p>注意与Node.js不同<strong>这是一个硬性限制</strong>。 EventEmitter 实例不允许添加更多的监听器监听器超过最大数量时会抛出TooManyListenersException。</p>
<pre><code>emitter.setMaxListeners(emitter.getMaxListeners() + 1);
emitter.once(&#39;event&#39;, () =&gt; {
// 做些操作
emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
});
</code></pre><h2>EventEmitter.addListener(eventName, listener)<span><a class="mark" href="#events_eventemitter_addlistener_eventname_listener" id="events_eventemitter_addlistener_eventname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <span class="type">&lt;any&gt;</span></li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a></li>
</ul>
</div><p>emitter.on(eventName, listener) 的别名。</p>
<h2>EventEmitter.emit(eventName[, ...args])<span><a class="mark" href="#events_eventemitter_emit_eventname_args" id="events_eventemitter_emit_eventname_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <span class="type">&lt;any&gt;</span></li>
<li><code>args</code> <span class="type">&lt;any&gt;</span></li>
</ul>
</div><p>按监听器的注册顺序,同步地调用每个注册到名为 eventName 事件的监听器,并传入提供的参数。</p>
<p>如果事件有监听器,则返回 true ,否则返回 false。</p>
<h2>EventEmitter.eventNames()<span><a class="mark" href="#events_eventemitter_eventnames" id="events_eventemitter_eventnames">#</a></span></h2>
<p>返回一个列出触发器已注册监听器的事件的数组。 数组中的值为字符串或符号。</p>
<pre><code>const myEE = events.emitter();
myEE.on(&#39;foo&#39;, () =&gt; {});
myEE.on(&#39;bar&#39;, () =&gt; {});
const sym = Symbol(&#39;symbol&#39;);
myEE.on(sym, () =&gt; {});
console.log(myEE.eventNames());
// 打印: [ &#39;foo&#39;, &#39;bar&#39;, Symbol(symbol) ]
</code></pre><h2>EventEmitter.getMaxListeners()<span><a class="mark" href="#events_eventemitter_getmaxlisteners" id="events_eventemitter_getmaxlisteners">#</a></span></h2>
<p>返回 EventEmitter 当前的最大监听器限制值,该值可以通过 emitter.setMaxListeners(n) 设置或默认为 EventEmitter.defaultMaxListeners。</p>
<h2>EventEmitter.listenerCount(eventName)<span><a class="mark" href="#events_eventemitter_listenercount_eventname" id="events_eventemitter_listenercount_eventname">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 正在被监听的事件名</li>
</ul>
</div><p>返回正在监听名为 eventName 的事件的监听器的数量。</p>
<h2>EventEmitter.listeners(eventName)<span><a class="mark" href="#events_eventemitter_listeners_eventname" id="events_eventemitter_listeners_eventname">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a></li>
</ul>
</div><p>返回名为 eventName 的事件的监听器数组的副本。</p>
<pre><code>server.on(&#39;connection&#39;, (stream) =&gt; {
console.log(&#39;someone connected!&#39;);
});
console.log(util.inspect(server.listeners(&#39;connection&#39;)));
// 打印: [ [Function] ]
</code></pre><h2>EventEmitter.on(eventName, listener)<span><a class="mark" href="#events_eventemitter_on_eventname_listener" id="events_eventemitter_on_eventname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <span class="type">&lt;any&gt;</span> 事件名</li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 回调函数</li>
</ul>
</div><p>添加 listener 函数到名为 eventName 的事件的监听器数组的末尾。 不会检查 listener 是否已被添加。 多次调用并传入相同的 eventName 和 listener 会导致 listener 被添加与调用多次。</p>
<pre><code>server.on(&#39;connection&#39;, (stream) =&gt; {
console.log(&#39;有连接!&#39;);
});
</code></pre><p>返回一个 EventEmitter 引用,可以链式调用。</p>
<p>默认情况下,事件监听器会按照添加的顺序依次调用。 emitter.prependListener() 方法可用于将事件监听器添加到监听器数组的开头。</p>
<pre><code>const myEE = events.emitter();
myEE.on(&#39;foo&#39;, () =&gt; console.log(&#39;a&#39;));
myEE.prependListener(&#39;foo&#39;, () =&gt; console.log(&#39;b&#39;));
myEE.emit(&#39;foo&#39;);
// 打印:
// b
// a
</code></pre><h2>EventEmitter.once(eventName, listener)<span><a class="mark" href="#events_eventemitter_once_eventname_listener" id="events_eventemitter_once_eventname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <span class="type">&lt;any&gt;</span> 事件名</li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 回调函数</li>
</ul>
</div><p>添加一个单次 listener 函数到名为 eventName 的事件。 下次触发 eventName 事件时,监听器会被移除,然后调用。</p>
<pre><code>server.once(&#39;connection&#39;, (stream) =&gt; {
console.log(&#39;首次调用!&#39;);
});
</code></pre><p>返回一个 EventEmitter 引用,可以链式调用。</p>
<p>默认情况下,事件监听器会按照添加的顺序依次调用。 emitter.prependOnceListener() 方法可用于将事件监听器添加到监听器数组的开头。</p>
<pre><code>const myEE = events.emitter();
myEE.once(&#39;foo&#39;, () =&gt; console.log(&#39;a&#39;));
myEE.prependOnceListener(&#39;foo&#39;, () =&gt; console.log(&#39;b&#39;));
myEE.emit(&#39;foo&#39;);
// 打印:
// b
// a
</code></pre><h2>EventEmitter.prependListener(eventName, listener)<span><a class="mark" href="#events_eventemitter_prependlistener_eventname_listener" id="events_eventemitter_prependlistener_eventname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <span class="type">&lt;any&gt;</span> 事件名</li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 回调函数</li>
</ul>
</div><p>添加 listener 函数到名为 eventName 的事件的监听器数组的开头。 不会检查 listener 是否已被添加。 多次调用并传入相同的 eventName 和 listener 会导致 listener 被添加与调用多次。</p>
<pre><code>server.prependListener(&#39;connection&#39;, (stream) =&gt; {
console.log(&#39;有连接!&#39;);
});
</code></pre><p>返回一个 EventEmitter 引用,可以链式调用。</p>
<h2>EventEmitter.prependOnceListener(eventName, listener)<span><a class="mark" href="#events_eventemitter_prependoncelistener_eventname_listener" id="events_eventemitter_prependoncelistener_eventname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <span class="type">&lt;any&gt;</span> 事件名</li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 回调函数</li>
</ul>
</div><p>添加一个单次 listener 函数到名为 eventName 的事件的监听器数组的开头。 下次触发 eventName 事件时,监听器会被移除,然后调用。</p>
<pre><code>server.prependOnceListener(&#39;connection&#39;, (stream) =&gt; {
console.log(&#39;首次调用!&#39;);
});
</code></pre><p>返回一个 EventEmitter 引用,可以链式调用。</p>
<h2>EventEmitter.removeAllListeners([eventName])<span><a class="mark" href="#events_eventemitter_removealllisteners_eventname" id="events_eventemitter_removealllisteners_eventname">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <span class="type">&lt;any&gt;</span></li>
</ul>
</div><p>移除全部或指定 eventName 的监听器。</p>
<p>注意,在代码中移除其他地方添加的监听器是一个不好的做法,尤其是当 EventEmitter 实例是其他组件或模块创建的。</p>
<p>返回一个 EventEmitter 引用,可以链式调用。</p>
<h2>EventEmitter.removeListener(eventName, listener)<span><a class="mark" href="#events_eventemitter_removelistener_eventname_listener" id="events_eventemitter_removelistener_eventname_listener">#</a></span></h2>
<div class="signature"><ul>
<li><code>eventName</code> <span class="type">&lt;any&gt;</span></li>
<li><code>listener</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a></li>
</ul>
</div><p>从名为 eventName 的事件的监听器数组中移除指定的 listener。</p>
<pre><code>const callback = (stream) =&gt; {
console.log(&#39;有连接!&#39;);
};
server.on(&#39;connection&#39;, callback);
// ...
server.removeListener(&#39;connection&#39;, callback);
</code></pre><p>removeListener 最多只会从监听器数组里移除一个监听器实例。 如果任何单一的监听器被多次添加到指定 eventName 的监听器数组中,则必须多次调用 removeListener 才能移除每个实例。</p>
<p>注意,一旦一个事件被触发,所有绑定到它的监听器都会按顺序依次触发。 这意味着,在事件触发后、最后一个监听器完成执行前,任何 removeListener() 或 removeAllListeners() 调用都不会从 emit() 中移除它们。 随后的事件会像预期的那样发生。</p>
<pre><code>const myEmitter = events.emitter();
const callbackA = () =&gt; {
console.log(&#39;A&#39;);
myEmitter.removeListener(&#39;event&#39;, callbackB);
};
const callbackB = () =&gt; {
console.log(&#39;B&#39;);
};
myEmitter.on(&#39;event&#39;, callbackA);
myEmitter.on(&#39;event&#39;, callbackB);
// callbackA 移除了监听器 callbackB但它依然会被调用。
// 触发是内部的监听器数组为 [callbackA, callbackB]
myEmitter.emit(&#39;event&#39;);
// 打印:
// A
// B
// callbackB 被移除了。
// 内部监听器数组为 [callbackA]
myEmitter.emit(&#39;event&#39;);
// 打印:
// A
</code></pre><p>因为监听器是使用内部数组进行管理的,所以调用它会改变在监听器被移除后注册的任何监听器的位置索引。 虽然这不会影响监听器的调用顺序,但意味着由 emitter.listeners() 方法返回的监听器数组副本需要被重新创建。</p>
<p>返回一个 EventEmitter 引用,可以链式调用。</p>
<h2>EventEmitter.setMaxListeners(n)<span><a class="mark" href="#events_eventemitter_setmaxlisteners_n" id="events_eventemitter_setmaxlisteners_n">#</a></span></h2>
<div class="signature"><ul>
<li><code>n</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a></li>
</ul>
</div><p>默认情况下,如果为特定事件添加了超过 10 个监听器,则 EventEmitter 会打印一个警告。 此限制有助于寻找内存泄露。 但是,并不是所有的事件都要被限为 10 个。 emitter.setMaxListeners() 方法允许修改指定的 EventEmitter 实例的限制。 值设为 Infinity或 0表明不限制监听器的数量。</p>
<p>返回一个 EventEmitter 引用,可以链式调用。</p>
<h1>KeyEvent<span><a class="mark" href="#events_keyevent" id="events_keyevent">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><h2>KeyEvent.getAction()<span><a class="mark" href="#events_keyevent_getaction" id="events_keyevent_getaction">#</a></span></h2>
<p>返回事件的动作。包括:</p>
<ul>
<li><code>KeyEvent.ACTION_DOWN</code> 按下事件</li>
<li><code>KeyEvent.ACTION_UP</code> 弹起事件</li>
</ul>
<h2>KeyEvent.getKeyCode()<span><a class="mark" href="#events_keyevent_getkeycode" id="events_keyevent_getkeycode">#</a></span></h2>
<p>返回按键的键值。包括:</p>
<ul>
<li><code>KeyEvent.KEYCODE_HOME</code> 主页键</li>
<li><code>KeyEvent.KEYCODE_BACK</code> 返回键</li>
<li><code>KeyEvent.KEYCODE_MENU</code> 菜单键</li>
<li><code>KeyEvent.KEYCODE_VOLUME_UP</code> 音量上键</li>
<li><code>KeyEvent.KEYCODE_VOLUME_DOWN</code> 音量下键</li>
</ul>
<h2>KeyEvent.getEventTime()<span><a class="mark" href="#events_keyevent_geteventtime" id="events_keyevent_geteventtime">#</a></span></h2>
<p>返回事件发生的时间戳。返回值的类型是number。</p>
<h2>KeyEvent.getDownTime()<span><a class="mark" href="#events_keyevent_getdowntime" id="events_keyevent_getdowntime">#</a></span></h2>
<p>返回最近一次按下事件的时间戳。如果本身是按下事件则与getEventTime()相同。</p>
<h2>KeyEvent.keyCodeToString(keyCode)<span><a class="mark" href="#events_keyevent_keycodetostring_keycode" id="events_keyevent_keycodetostring_keycode">#</a></span></h2>
<p>把键值转换为字符串。例如KEYCODE_HOME转换为&quot;KEYCODE_HOME&quot;</p>
<h1>Keys<span><a class="mark" href="#events_keys" id="events_keys">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>按键事件中所有可用的按键名称为:</p>
<ul>
<li><code>volume_up</code> 音量上键</li>
<li><code>volume_down</code> 音量下键</li>
<li><code>home</code> 主屏幕键</li>
<li><code>back</code> 返回键</li>
<li><code>menu</code> 菜单键</li>
</ul>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,297 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Files | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/files.html">
</head>
<body class="alt apidoc" id="api-section-files">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files active" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="files" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#files_files">Files</a></span><ul>
<li><span class="stability_undefined"><a href="#files_files_isfile_path">files.isFile(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_isdir_path">files.isDir(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_isemptydir_path">files.isEmptyDir(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_join_parent_child">files.join(parent, child)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_create_path">files.create(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_createifnotexists_path">files.createIfNotExists(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_exists_path">files.exists(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_ensuredir_path">files.ensureDir(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_read_path_encoding_utf_8">files.read(path[, encoding = &quot;utf-8&quot;])</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_write_path_text_encoding_utf_8">files.write(path, text[, encoding = &quot;utf-8&quot;])</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_copy_frompath_topath">files.copy(fromPath, toPath)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_move_frompath_topath">files.move(fromPath, toPath)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_rename_path_newname">files.rename(path, newName)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_renamewithoutextension_path_newname">files.renameWithoutExtension(path, newName)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_getname_path">files.getName(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_getnamewithoutextension_path">files.getNameWithoutExtension(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_getextension_path">files.getExtension(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_remove_path">files.remove(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_removedir_path">files.removeDir(path)</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_getsdcardpath">files.getSdcardPath()</a></span></li>
<li><span class="stability_undefined"><a href="#files_files_listdir_path_filter">files.listDir(path[, filter])</a></span></li>
<li><span class="stability_undefined"><a href="#files_open_path_mode_r_encoding_utf_8_buffersize_8192">open(path[, mode = &quot;r&quot;, encoding = &quot;utf-8&quot;, bufferSize = 8192])</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#files_readabletextfile">ReadableTextFile</a></span><ul>
<li><span class="stability_undefined"><a href="#files_readabletextfile_read">ReadableTextFile.read()</a></span></li>
<li><span class="stability_undefined"><a href="#files_readabletextfile_read_maxcount">ReadableTextFile.read(maxCount)</a></span></li>
<li><span class="stability_undefined"><a href="#files_readabletextfile_readline">ReadableTextFile.readline()</a></span></li>
<li><span class="stability_undefined"><a href="#files_readabletextfile_readlines">ReadableTextFile.readlines()</a></span></li>
<li><span class="stability_undefined"><a href="#files_close">close()</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#files_pwritabletextfile">PWritableTextFile</a></span><ul>
<li><span class="stability_undefined"><a href="#files_pwritabletextfile_write_text">PWritableTextFile.write(text)</a></span></li>
<li><span class="stability_undefined"><a href="#files_pwritabletextfile_writeline_line">PWritableTextFile.writeline(line)</a></span></li>
<li><span class="stability_undefined"><a href="#files_pwritabletextfile_writelines_lines">PWritableTextFile.writelines(lines)</a></span></li>
<li><span class="stability_undefined"><a href="#files_pwritabletextfile_flush">PWritableTextFile.flush()</a></span></li>
<li><span class="stability_undefined"><a href="#files_pwritabletextfile_close">PWritableTextFile.close()</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>Files<span><a class="mark" href="#files_files" id="files_files">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>files模块提供了一些常见的文件处理包括文件读写、移动、复制、删掉等。</p>
<h2>files.isFile(path)<span><a class="mark" href="#files_files_isfile_path" id="files_files_isfile_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>返回路径path是否是文件。</p>
<h2>files.isDir(path)<span><a class="mark" href="#files_files_isdir_path" id="files_files_isdir_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>返回路径path是否是文件夹。</p>
<h2>files.isEmptyDir(path)<span><a class="mark" href="#files_files_isemptydir_path" id="files_files_isemptydir_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>返回文件夹path是否为空文件夹。如果该路径并非文件夹则直接返回false。</p>
<h2>files.join(parent, child)<span><a class="mark" href="#files_files_join_parent_child" id="files_files_join_parent_child">#</a></span></h2>
<div class="signature"><ul>
<li><code>parent</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 父目录路径</li>
<li><code>child</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 子路径</li>
</ul>
</div><p>连接两个路径并返回,例如<code>files.join(&quot;/sdcard/&quot;, &quot;1.txt&quot;)</code>返回&quot;/sdcard/1.txt&quot;</p>
<h2>files.create(path)<span><a class="mark" href="#files_files_create_path" id="files_files_create_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>创建一个文件并返回是否创建成功。</p>
<h2>files.createIfNotExists(path)<span><a class="mark" href="#files_files_createifnotexists_path" id="files_files_createifnotexists_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>创建一个文件并返回是否创建成功。</p>
<h2>files.exists(path)<span><a class="mark" href="#files_files_exists_path" id="files_files_exists_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>返回在路径path处的文件是否存在。</p>
<h2>files.ensureDir(path)<span><a class="mark" href="#files_files_ensuredir_path" id="files_files_ensuredir_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>确保路径path所在的文件夹存在。</p>
<p>例如对于路径&quot;/sdcard/Download/ABC/1.txt&quot;,如果/Download/文件夹不存在则会先创建Download再创建ABC文件夹。</p>
<h2>files.read(path[, encoding = &quot;utf-8&quot;])<span><a class="mark" href="#files_files_read_path_encoding_utf_8" id="files_files_read_path_encoding_utf_8">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
<li><code>encoding</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 字符编码</li>
</ul>
</div><p>读取文件path的所有内容并返回。</p>
<h2>files.write(path, text[, encoding = &quot;utf-8&quot;])<span><a class="mark" href="#files_files_write_path_text_encoding_utf_8" id="files_files_write_path_text_encoding_utf_8">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
<li><code>text</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要写入的文本内容</li>
<li><code>encoding</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 字符编码</li>
</ul>
</div><p>把text写入到文件path中。如果文件存在则覆盖不存在则创建。</p>
<h2>files.copy(fromPath, toPath)<span><a class="mark" href="#files_files_copy_frompath_topath" id="files_files_copy_frompath_topath">#</a></span></h2>
<div class="signature"><ul>
<li><code>fromPath</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要复制的原文件路径</li>
<li><code>toPath</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 复制到的文件路径</li>
</ul>
</div><p>复制文件。例如<code>files.copy(&quot;/sdcard/1.txt&quot;, &quot;/sdcard/Download/1.txt&quot;)</code></p>
<h2>files.move(fromPath, toPath)<span><a class="mark" href="#files_files_move_frompath_topath" id="files_files_move_frompath_topath">#</a></span></h2>
<div class="signature"><ul>
<li><code>fromPath</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要移动的原文件路径</li>
<li><code>toPath</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 移动到的文件路径</li>
</ul>
</div><p>移动文件,返回是否移动成功。例如<code>files.move(&quot;/sdcard/1.txt&quot;, &quot;/sdcard/Download/1.txt&quot;)</code>会把1.txt文件从sd卡根目录移动到Download文件夹。</p>
<h2>files.rename(path, newName)<span><a class="mark" href="#files_files_rename_path_newname" id="files_files_rename_path_newname">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要重命名的原文件路径</li>
<li><code>newName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要重命名的新文件名</li>
</ul>
</div><p>重命名文件,并返回是否重命名成功。例如<code>files.rename(&quot;/sdcard/1.txt&quot;, &quot;2.txt&quot;)</code></p>
<h2>files.renameWithoutExtension(path, newName)<span><a class="mark" href="#files_files_renamewithoutextension_path_newname" id="files_files_renamewithoutextension_path_newname">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要重命名的原文件路径</li>
<li><code>newName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要重命名的新文件名</li>
</ul>
</div><p>重命名文件,不包含拓展名,并返回是否重命名成功。例如<code>files.rename(&quot;/sdcard/1.txt&quot;, &quot;2&quot;)</code>会把1.txt重命名为2.txt。</p>
<h2>files.getName(path)<span><a class="mark" href="#files_files_getname_path" id="files_files_getname_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>返回文件的文件名。例如<code>files.getName(&quot;/sdcard/1.txt&quot;)</code>返回&quot;1.txt&quot;</p>
<h2>files.getNameWithoutExtension(path)<span><a class="mark" href="#files_files_getnamewithoutextension_path" id="files_files_getnamewithoutextension_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>返回不含拓展名的文件的文件名。例如<code>files.getName(&quot;/sdcard/1.txt&quot;)</code>返回&quot;1&quot;</p>
<h2>files.getExtension(path)<span><a class="mark" href="#files_files_getextension_path" id="files_files_getextension_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>返回文件的拓展名。例如<code>files.getExtension(&quot;/sdcard/1.txt&quot;)</code>返回&quot;txt&quot;</p>
<h2>files.remove(path)<span><a class="mark" href="#files_files_remove_path" id="files_files_remove_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>删除文件或<strong>空文件夹</strong>,返回是否删除成功。</p>
<h2>files.removeDir(path)<span><a class="mark" href="#files_files_removedir_path" id="files_files_removedir_path">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
</ul>
</div><p>删除文件夹,如果文件夹不为空,则删除该文件夹的所有内容再删除该文件夹,返回是否全部删除成功。</p>
<h2>files.getSdcardPath()<span><a class="mark" href="#files_files_getsdcardpath" id="files_files_getsdcardpath">#</a></span></h2>
<p>返回SD卡路径。所谓SD卡即外部存储器。</p>
<h2>files.listDir(path[, filter])<span><a class="mark" href="#files_files_listdir_path_filter" id="files_files_listdir_path_filter">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路径</li>
<li><code>filter</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 过滤函数可选。接收一个String参数文件名返回一个Boolean值。</li>
</ul>
</div><p>列出文件夹path下的满足条件的文件和文件夹的名称的数组。如果不加filter参数则返回所有文件和文件夹。</p>
<p>例如获取sdcard目录下的txt文件为</p>
<pre><code>var txtFiles = files.listDir(&quot;/sdcard/&quot;, function(name){
return name.endsWith(&quot;.txt&quot;) &amp;&amp; files.isFile(&quot;/sdcard/&quot; + name);
});
</code></pre><h2>open(path[, mode = &quot;r&quot;, encoding = &quot;utf-8&quot;, bufferSize = 8192])<span><a class="mark" href="#files_open_path_mode_r_encoding_utf_8_buffersize_8192" id="files_open_path_mode_r_encoding_utf_8_buffersize_8192">#</a></span></h2>
<div class="signature"><ul>
<li><code>path</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 文件路径,例如&quot;/sdcard/1.txt&quot;</li>
<li><code>mode</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 文件打开模式,包括:<ul>
<li>&quot;r&quot;: 只读模式。该模式下只能对文件执行<strong>文本</strong>读取操作。</li>
<li>&quot;w&quot;: 只写模式。该模式下只能对文件执行<strong>文本</strong>覆盖写入操作。</li>
<li>&quot;a&quot;: 附加模式。该模式下将会把写入的文本附加到文件末尾。<br>目前暂不支持二进制模式,随机读写模式。</li>
</ul>
</li>
<li><code>encoding</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 字符编码。</li>
<li><code>bufferSize</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;Number&gt;</a> 文件读写的缓冲区大小。</li>
</ul>
</div><p>打开一个文件。根据打开模式返回不同的文件对象。包括:</p>
<ul>
<li>&quot;r&quot;: 返回一个ReadableTextFile对象。</li>
<li>&quot;w&quot;, &quot;a&quot;: 返回一个WritableTextFile对象。</li>
</ul>
<p>对于&quot;w&quot;模式如果文件并不存在则会创建一个已存在则会清空该文件内容其他模式文件不存在会抛出FileNotFoundException。</p>
<h1>ReadableTextFile<span><a class="mark" href="#files_readabletextfile" id="files_readabletextfile">#</a></span></h1>
<p>可读文件对象。</p>
<h2>ReadableTextFile.read()<span><a class="mark" href="#files_readabletextfile_read" id="files_readabletextfile_read">#</a></span></h2>
<p>返回该文件剩余的所有内容的字符串。</p>
<h2>ReadableTextFile.read(maxCount)<span><a class="mark" href="#files_readabletextfile_read_maxcount" id="files_readabletextfile_read_maxcount">#</a></span></h2>
<div class="signature"><ul>
<li><code>maxCount</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;Number&gt;</a> 最大读取的字符数量</li>
</ul>
</div><p>读取该文件接下来最长为maxCount的字符串并返回。即使文件剩余内容不足maxCount也不会出错。</p>
<h2>ReadableTextFile.readline()<span><a class="mark" href="#files_readabletextfile_readline" id="files_readabletextfile_readline">#</a></span></h2>
<p>读取一行并返回(不包含换行符)。</p>
<h2>ReadableTextFile.readlines()<span><a class="mark" href="#files_readabletextfile_readlines" id="files_readabletextfile_readlines">#</a></span></h2>
<p>读取剩余的所有行,并返回它们按顺序组成的字符串数组。</p>
<h2>close()<span><a class="mark" href="#files_close" id="files_close">#</a></span></h2>
<p>关闭该文件。</p>
<p><strong>打开一个文件不再使用时务必关闭</strong></p>
<h1>PWritableTextFile<span><a class="mark" href="#files_pwritabletextfile" id="files_pwritabletextfile">#</a></span></h1>
<p>可写文件对象。</p>
<h2>PWritableTextFile.write(text)<span><a class="mark" href="#files_pwritabletextfile_write_text" id="files_pwritabletextfile_write_text">#</a></span></h2>
<div class="signature"><ul>
<li><code>text</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 文本</li>
</ul>
</div><p>把文本内容text写入到文件中。</p>
<h2>PWritableTextFile.writeline(line)<span><a class="mark" href="#files_pwritabletextfile_writeline_line" id="files_pwritabletextfile_writeline_line">#</a></span></h2>
<div class="signature"><ul>
<li><code>text</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 文本</li>
</ul>
</div><p>把文本line写入到文件中并写入一个换行符。</p>
<h2>PWritableTextFile.writelines(lines)<span><a class="mark" href="#files_pwritabletextfile_writelines_lines" id="files_pwritabletextfile_writelines_lines">#</a></span></h2>
<div class="signature"><ul>
<li><code>lines</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> 字符串数组</li>
</ul>
</div><p>把很多行写入到文件中....</p>
<h2>PWritableTextFile.flush()<span><a class="mark" href="#files_pwritabletextfile_flush" id="files_pwritabletextfile_flush">#</a></span></h2>
<p>把缓冲区内容输出到文件中。</p>
<h2>PWritableTextFile.close()<span><a class="mark" href="#files_pwritabletextfile_close" id="files_pwritabletextfile_close">#</a></span></h2>
<p>关闭文件。同时会被缓冲区内容输出到文件。</p>
<p><strong>打开一个文件写入后,不再使用时务必关闭,否则文件可能会丢失</strong></p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,211 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>全局变量与函数 | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/globals.html">
</head>
<body class="alt apidoc" id="api-section-globals">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals active" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="globals" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_undefined"><a href="#globals">全局变量与函数</a></span><ul>
<li><span class="stability_undefined"><a href="#globals_sleep_n">sleep([n])</a></span></li>
<li><span class="stability_undefined"><a href="#globals_launchpackage_packagename">launchPackage(packageName)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_launchapp_appname">launchApp(appName)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_currentpackage">currentPackage()</a></span></li>
<li><span class="stability_undefined"><a href="#globals_currentactivity">currentActivity()</a></span></li>
<li><span class="stability_undefined"><a href="#globals_getpackagename_appname">getPackageName(appName)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_getappname_packagename">getAppName(packageName)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_openappsetting_packagename">openAppSetting(packageName)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_setclip_text">setClip(text)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_getclip">getClip()</a></span></li>
<li><span class="stability_undefined"><a href="#globals_toast_message">toast(message)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_toastlog_message">toastLog(message)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_waitforactivity_activity_period_200">waitForActivity(activity[, period = 200])</a></span></li>
<li><span class="stability_undefined"><a href="#globals_waitforpackage_package_period_200">waitForPackage(package[, period = 200])</a></span></li>
<li><span class="stability_undefined"><a href="#globals_exit">exit()</a></span></li>
<li><span class="stability_undefined"><a href="#globals_random_min_max">random(min, max)</a></span></li>
<li><span class="stability_undefined"><a href="#globals_random">random()</a></span></li>
<li><span class="stability_undefined"><a href="#globals_context">context</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>全局变量与函数<span><a class="mark" href="#globals" id="globals">#</a></span></h1>
<p>全局变量和函数在所有模块中均可使用。 但以下变量的作用域只在模块内,详见 module文档</p>
<ul>
<li>exports</li>
<li>module</li>
<li>require()
以下的对象是特定于 Auto.js 的。 有些内置对象是 JavaScript 语言本身的一部分,它们也是全局的。</li>
</ul>
<p>一些模块中的函数为了使用方便也可以直接全局使用这些函数在此不再赘述。例如timers模块的setInterval等函数。</p>
<h2>sleep([n])<span><a class="mark" href="#globals_sleep_n" id="globals_sleep_n">#</a></span></h2>
<div class="signature"><ul>
<li><code>n</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 毫秒数</li>
</ul>
</div><p>暂停运行n<strong>毫秒</strong>的时间。1秒等于1000毫秒。</p>
<h2>launchPackage(packageName)<span><a class="mark" href="#globals_launchpackage_packagename" id="globals_launchpackage_packagename">#</a></span></h2>
<div class="signature"><ul>
<li><code>packageName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 应用包名</li>
</ul>
</div><p>运行包名为packageName的应用主界面(Launcher)。例如,打开微信为:</p>
<pre><code>launchPackage(&quot;com.tencent.mm&quot;);
</code></pre><p>如果存在多个应用包名相同的情况如双开应用如何处理取决于操作系统。在MIUI中会弹出多开应用的选择界面。</p>
<h2>launchApp(appName)<span><a class="mark" href="#globals_launchapp_appname" id="globals_launchapp_appname">#</a></span></h2>
<div class="signature"><ul>
<li><code>appName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;String&gt;</a> 应用名称</li>
</ul>
</div><p>运行应用名称为appName的应用主界面。当有应用名称相同时只运行其中某一个。<br>例如,打开微信为:</p>
<pre><code>launchApp(&quot;微信&quot;);
</code></pre><h2>currentPackage()<span><a class="mark" href="#globals_currentpackage" id="globals_currentpackage">#</a></span></h2>
<p>返回最近一次监测到的正在运行的应用的包名,一般可以认为就是当前正在运行的应用的包名。</p>
<h2>currentActivity()<span><a class="mark" href="#globals_currentactivity" id="globals_currentactivity">#</a></span></h2>
<p>返回最近一次监测到的正在运行的Activity的名称一般可以认为就是当前正在运行的Activity的名称。</p>
<h2>getPackageName(appName)<span><a class="mark" href="#globals_getpackagename_appname" id="globals_getpackagename_appname">#</a></span></h2>
<div class="signature"><ul>
<li><code>appName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 应用名称</li>
</ul>
</div><p>获取应用的包名。例如getPackageName(&quot;QQ&quot;)为&quot;com.tencent.mobileqq&quot;。如果有相同名称的应用只返回其中某一个的包名。如果不存在这个名称的应用会返回null。</p>
<h2>getAppName(packageName)<span><a class="mark" href="#globals_getappname_packagename" id="globals_getappname_packagename">#</a></span></h2>
<div class="signature"><ul>
<li><code>packageName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 应用包名</li>
</ul>
</div><p>返回对应包名的应用的名称。如果应用不存在返回null。</p>
<h2>openAppSetting(packageName)<span><a class="mark" href="#globals_openappsetting_packagename" id="globals_openappsetting_packagename">#</a></span></h2>
<div class="signature"><ul>
<li><code>packageName</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 应用包名</li>
</ul>
</div><p>打开某个应用的应用详情页也就是管理应用权限和可以停止其运行的页面。如果应用包名不存在则返回false否则返回true。</p>
<h2>setClip(text)<span><a class="mark" href="#globals_setclip_text" id="globals_setclip_text">#</a></span></h2>
<div class="signature"><ul>
<li><code>text</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 文本</li>
</ul>
</div><p>设置剪贴板内容。此剪贴板即系统剪贴板,在一般应用的输入框中&quot;粘贴&quot;既可使用。</p>
<h2>getClip()<span><a class="mark" href="#globals_getclip" id="globals_getclip">#</a></span></h2>
<p>返回系统剪贴板的内容。</p>
<h2>toast(message)<span><a class="mark" href="#globals_toast_message" id="globals_toast_message">#</a></span></h2>
<div class="signature"><ul>
<li>message <span class="type">&lt;string>&gt;</span> | <span class="type">&lt;{Object&gt;</span> 要显示的信息</li>
</ul>
</div><p>以气泡显示信息message几秒。(具体时间取决于安卓系统一般都是2秒)</p>
<p>注意,信息的显示是&quot;异步&quot;执行的(不属于Looper循环),并且,不会等待信息消失程序才继续执行。如果在循环中执行该命令,可能出现脚本停止运行后仍然有不断的气泡信息出现的情况。
例如:</p>
<pre><code>for(var i = 0; i &lt; 100; i++){
toast(i);
}
</code></pre><p>运行这段程序以后,会很快执行完成,且不断弹出消息,在任务管理中关闭所有脚本也无法停止。
要保证气泡消息才继续执行可以用:</p>
<pre><code>for(var i = 0; i &lt; 100; i++){
toast(i);
sleep(2000);
}
</code></pre><p>或者修改toast函数</p>
<pre><code>var _toast_ = toast;
toast = function(message){
_toast_(message);
sleep(2000);
}
for(var i = 0; i &lt; 100; i++){
toast(i);
sleep(2000);
}
</code></pre><h2>toastLog(message)<span><a class="mark" href="#globals_toastlog_message" id="globals_toastlog_message">#</a></span></h2>
<div class="signature"><ul>
<li>message \<String\> | \<Object\> 要显示的信息</li>
</ul>
</div><p>相当于<code>toast(message);log(message)</code>。显示信息message并在控制台中输出。参见console.log。</p>
<h2>waitForActivity(activity[, period = 200])<span><a class="mark" href="#globals_waitforactivity_activity_period_200" id="globals_waitforactivity_activity_period_200">#</a></span></h2>
<div class="signature"><ul>
<li><code>activity</code> Activity名称</li>
<li><code>period</code> 轮询等待间隔(毫秒)</li>
</ul>
</div><p>等待指定的Activity出现period为检查Activity的间隔。</p>
<h2>waitForPackage(package[, period = 200])<span><a class="mark" href="#globals_waitforpackage_package_period_200" id="globals_waitforpackage_package_period_200">#</a></span></h2>
<div class="signature"><ul>
<li><code>package</code> 包名</li>
<li><code>period</code> 轮询等待间隔(毫秒)</li>
</ul>
</div><p>等待指定的应用出现。例如<code>waitForPackage(&quot;com.tencent.mm&quot;)</code>为等待当前界面为微信。</p>
<h2>exit()<span><a class="mark" href="#globals_exit" id="globals_exit">#</a></span></h2>
<p>立即停止脚本运行。</p>
<h2>random(min, max)<span><a class="mark" href="#globals_random_min_max" id="globals_random_min_max">#</a></span></h2>
<div class="signature"><ul>
<li><code>min</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 随机数产生的区间下界</li>
<li><code>max</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 随机数产生的区间上界</li>
</ul>
</div><p>返回一个在[min...max]之间的随机数。例如random(0, 2)可能产生0, 1, 2.</p>
<h2>random()<span><a class="mark" href="#globals_random" id="globals_random">#</a></span></h2>
<p>返回在[0, 1)的随机浮点数。</p>
<h2>context<span><a class="mark" href="#globals_context" id="globals_context">#</a></span></h2>
<p>全局变量。一个android.content.Context对象。</p>
<p>注意该对象为ApplicationContext因此不能用于界面、对话框等的创建。</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,256 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Images | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/images.html">
</head>
<body class="alt apidoc" id="api-section-images">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images active" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="images" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#images_images">Images</a></span><ul>
<li><span class="stability_undefined"><a href="#images_requestscreencapture_width_height">requestScreenCapture([width, height])</a></span></li>
<li><span class="stability_undefined"><a href="#images_capturescreen">captureScreen()</a></span></li>
<li><span class="stability_undefined"><a href="#images_capturescreen_path">captureScreen(path)</a></span></li>
<li><span class="stability_undefined"><a href="#images_images_pixel_image_x_y">images.pixel(image, x, y)</a></span></li>
<li><span class="stability_undefined"><a href="#images_images_saveimage_image_path">images.saveImage(image, path)</a></span></li>
<li><span class="stability_undefined"><a href="#images_images_findcolor_image_color_options">images.findColor(image, color, options)</a></span></li>
<li><span class="stability_undefined"><a href="#images_images_findcolorinregion_img_color_x_y_width_height_threads_algorithm_threshold">images.findColorInRegion(img, color, x, y[, width, height, threads, algorithm, threshold])</a></span></li>
<li><span class="stability_undefined"><a href="#images_images_findcolorequals_img_color_x_y_width_height_threads">images.findColorEquals(img, color, x, y, width, height, threads)</a></span></li>
<li><span class="stability_undefined"><a href="#images_images_detectscolor_image_color_x_y_threshold_16_algorithm_rgb">images.detectsColor(image, color, x, y[, threshold = 16, algorithm = &quot;rgb&quot;])</a></span></li>
</ul>
</li>
<li><span class="stability_2"><a href="#images_colors">colors</a></span><ul>
<li><span class="stability_undefined"><a href="#images_colors_tostring_color">colors.toString(color)</a></span></li>
<li><span class="stability_undefined"><a href="#images_colors_red_color">colors.red(color)</a></span></li>
<li><span class="stability_undefined"><a href="#images_colors_green_color">colors.green(color)</a></span></li>
<li><span class="stability_undefined"><a href="#images_colors_blue_color">colors.blue(color)</a></span></li>
<li><span class="stability_undefined"><a href="#images_colors_alpha_color">colors.alpha(color)</a></span></li>
<li><span class="stability_undefined"><a href="#images_colors_rgb_red_green_blue">colors.rgb(red, green, blue)</a></span></li>
<li><span class="stability_undefined"><a href="#images_colors_argb_alpha_red_green_blue">colors.argb(alpha, red, green, blue)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#images_image">Image</a></span><ul>
<li><span class="stability_undefined"><a href="#images_image_getwidth">Image.getWidth()</a></span></li>
<li><span class="stability_undefined"><a href="#images_image_getheight">Image.getHeight()</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#images_point">Point</a></span><ul>
<li><span class="stability_undefined"><a href="#images_point_x">Point.x</a></span></li>
<li><span class="stability_undefined"><a href="#images_point_y">Point.y</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>Images<span><a class="mark" href="#images_images" id="images_images">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>images模块提供了一些手机设备中常见的图片处理函数包括截图、读写图片、图片剪裁、找色、找图等。</p>
<h2>requestScreenCapture([width, height])<span><a class="mark" href="#images_requestscreencapture_width_height" id="images_requestscreencapture_width_height">#</a></span></h2>
<div class="signature"><ul>
<li>width <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 截图宽度</li>
<li>height <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 截图高度</li>
</ul>
</div><p>向系统申请屏幕截图权限,返回是否请求成功。</p>
<p>第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。</p>
<p>这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是[captureScreen][]都调用一次。</p>
<p>该函数在截图脚本中只需执行一次,而无需每次调用[captureScreen][]都调用一次。</p>
<p>不指定参数时默认为屏幕宽高。指定参数时并不会严格以width和height为截图宽度和高度而是以和width, height接近的最适合的宽高为截图宽高。例如在1920*1080屏幕中requestScreenCapture(600, 1000)请求的截图的高度一般是540*960。</p>
<p>如果在第一次权限请求时选择&quot;总是允许&quot;, 之后的脚本执行该函数通常耗时200毫秒以内(测试机型小米6)。</p>
<p>建议在本软件界面运行该函数,在其他软件界面运行时容易出现一闪而过的黑屏。 </p>
<p>如果要进行截图、找色的软件界面为横屏则requestScreenCapture函数需要在<strong>横屏状态</strong>下执行否则后续截图将会异常调用findColor等函数时坐标变换会出现错误。</p>
<h2>captureScreen()<span><a class="mark" href="#images_capturescreen" id="images_capturescreen">#</a></span></h2>
<p>截取当前屏幕并返回一个[Image][]对象。</p>
<p>没有截图权限时执行该函数会抛出SecurityException。</p>
<p>该函数不会返回null两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间短时间内几十ms连续调用则会返回同一张截图。</p>
<h2>captureScreen(path)<span><a class="mark" href="#images_capturescreen_path" id="images_capturescreen_path">#</a></span></h2>
<div class="signature"><ul>
<li>path <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 截图保存路径</li>
</ul>
</div><p>截取当前屏幕并以PNG格式保存到path中。如果文件不存在会被创建文件存在会被覆盖。</p>
<p>该函数不会返回任何值。</p>
<h2>images.pixel(image, x, y)<span><a class="mark" href="#images_images_pixel_image_x_y" id="images_images_pixel_image_x_y">#</a></span></h2>
<div class="signature"><ul>
<li>image <span class="type">&lt;Image&gt;</span> 图片</li>
<li>x <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要获取的像素的横坐标。</li>
<li>y <span class="type">&lt;y&gt;</span> 要获取的像素的纵坐标。</li>
</ul>
</div><p>返回图片image在点(x, y)处的像素的ARGB值。 </p>
<p>该值的格式为0xAARRGGBB是一个&quot;32位整数&quot;(虽然JavaScript中并不区分整数类型和其他数值类型。</p>
<p>坐标系以图片左上角为原点。以图片左侧边为y轴上侧边为x轴。</p>
<h2>images.saveImage(image, path)<span><a class="mark" href="#images_images_saveimage_image_path" id="images_images_saveimage_image_path">#</a></span></h2>
<div class="signature"><ul>
<li>image <span class="type">&lt;image&gt;</span> 图片</li>
<li>path <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 路劲</li>
</ul>
</div><p>把图片image以PNG格式保存到path中。如果文件不存在会被创建文件存在会被覆盖。</p>
<h2>images.findColor(image, color, options)<span><a class="mark" href="#images_images_findcolor_image_color_options" id="images_images_findcolor_image_color_options">#</a></span></h2>
<div class="signature"><ul>
<li>image <span class="type">&lt;image&gt;</span> 图片</li>
<li>color <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要寻找的颜色的RGB值。如果是一个整数则以0xRRGGBB的形式代表RGB值A通道会被忽略如果是字符串则以&quot;#RRGGBB&quot;代表其RGB值。</li>
<li>options <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 选项</li>
</ul>
</div><p>在图片中寻找颜色color。找到时返回找到的点[Point][]找不到时返回null。</p>
<p>选项包括:</p>
<ul>
<li>region <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" class="type">&lt;Array&gt;</a> 找色区域。是一个两个或四个元素的数组。(region[0], region[1])表示找色区域的左上角region[2]*region[3]表示找色区域的宽高。如果只有region只有两个元素则找色区域为(region[0], region[1])到屏幕右下角。如果不指定region选项则找色区域为整张图片。</li>
<li>threads <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 指定找色使用的线程数。不能超过16。最适合的线程数取决于设备。默认线程数为2。</li>
<li>algorithm <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 指定颜色匹配算法。包括:<ul>
<li>&quot;equal&quot;: 相等匹配只有与给定颜色color完全相等时才匹配。 </li>
<li>&quot;diff&quot;: 差值匹配。与给定颜色的R、G、B差的绝对值之和小于threshold时匹配。</li>
<li>&quot;rgb&quot;: rgb欧拉距离相似度。与给定颜色color的rgb欧拉距离小于等于threshold时匹配。</li>
<li>&quot;rgb+&quot;: 加权rgb欧拉距离匹配(<a href="https://en.wikipedia.org/wiki/Color_difference">LAB Delta E</a>)。</li>
<li>&quot;hs&quot;: hs欧拉距离匹配。hs为HSV空间的色调值。</li>
</ul>
</li>
<li>threshold <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 找色时颜色相似度的临界值范围为0~255越小越相似0为颜色相等255为任何颜色都能匹配。默认为16。threshold和浮点数相似度(0.0~1.0)的换算为 similarity = (255 - threshold) / 255.</li>
</ul>
<p>该函数也可以作为全局函数使用。</p>
<h2>images.findColorInRegion(img, color, x, y[, width, height, threads, algorithm, threshold])<span><a class="mark" href="#images_images_findcolorinregion_img_color_x_y_width_height_threads_algorithm_threshold" id="images_images_findcolorinregion_img_color_x_y_width_height_threads_algorithm_threshold">#</a></span></h2>
<p>相当于</p>
<pre><code>images.findColor(img, color, {
region: [x, y, width, height],
algorithm: algorithm,
threshold: threshold,
threads: threads
});
</code></pre><p>该函数也可以作为全局函数使用。</p>
<h2>images.findColorEquals(img, color, x, y, width, height, threads)<span><a class="mark" href="#images_images_findcolorequals_img_color_x_y_width_height_threads" id="images_images_findcolorequals_img_color_x_y_width_height_threads">#</a></span></h2>
<p>相当于</p>
<pre><code>images.findColor(img, color, {
region: [x, y, width, height],
algorithm: &quot;equal&quot;,
threads: threads
});
</code></pre><p>该函数也可以作为全局函数使用。</p>
<h2>images.detectsColor(image, color, x, y[, threshold = 16, algorithm = &quot;rgb&quot;])<span><a class="mark" href="#images_images_detectscolor_image_color_x_y_threshold_16_algorithm_rgb" id="images_images_detectscolor_image_color_x_y_threshold_16_algorithm_rgb">#</a></span></h2>
<div class="signature"><ul>
<li>image <span class="type">&lt;Image&gt;</span> 图片</li>
<li>color <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要检测的颜色</li>
<li>x <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要检测的位置横坐标</li>
<li>y <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要检测的位置纵坐标</li>
<li>threshold <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 颜色相似度临界值默认为16</li>
<li>algorithm <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 颜色匹配算法默认为rgb欧式距离</li>
</ul>
</div><p>返回图片image在位置(x, y)处是否匹配到颜色color。有关threshold和algorithm的信息参考findColor函数。</p>
<h1>colors<span><a class="mark" href="#images_colors" id="images_colors">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>colors是颜色处理的工具对象。包含一些常用方法包括android.graphics.Color的所有方法以及toString方法。</p>
<h2>colors.toString(color)<span><a class="mark" href="#images_colors_tostring_color" id="images_colors_tostring_color">#</a></span></h2>
<div class="signature"><ul>
<li>color <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 整数RGB颜色值</li>
</ul>
</div><p>返回颜色值的字符串,格式为 #AARRGGBB。</p>
<h2>colors.red(color)<span><a class="mark" href="#images_colors_red_color" id="images_colors_red_color">#</a></span></h2>
<div class="signature"><ul>
<li>color <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 整数RGB颜色值</li>
</ul>
</div><p>返回颜色color的R通道的值范围0~255.</p>
<h2>colors.green(color)<span><a class="mark" href="#images_colors_green_color" id="images_colors_green_color">#</a></span></h2>
<div class="signature"><ul>
<li>color <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 整数RGB颜色值</li>
</ul>
</div><p>返回颜色color的G通道的值范围0~255.</p>
<h2>colors.blue(color)<span><a class="mark" href="#images_colors_blue_color" id="images_colors_blue_color">#</a></span></h2>
<div class="signature"><ul>
<li>color <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 整数RGB颜色值</li>
</ul>
</div><p>返回颜色color的B通道的值范围0~255.</p>
<h2>colors.alpha(color)<span><a class="mark" href="#images_colors_alpha_color" id="images_colors_alpha_color">#</a></span></h2>
<div class="signature"><ul>
<li>color <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 整数RGB颜色值</li>
</ul>
</div><p>返回颜色color的Alpha通道的值范围0~255.</p>
<h2>colors.rgb(red, green, blue)<span><a class="mark" href="#images_colors_rgb_red_green_blue" id="images_colors_rgb_red_green_blue">#</a></span></h2>
<div class="signature"><ul>
<li>red <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 颜色的R通道的值</li>
<li>blue <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 颜色的G通道的值</li>
<li>green <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 颜色的B通道的值</li>
</ul>
</div><p>返回这些颜色通道构成的整数颜色值。Alpha通道将是255不透明</p>
<h2>colors.argb(alpha, red, green, blue)<span><a class="mark" href="#images_colors_argb_alpha_red_green_blue" id="images_colors_argb_alpha_red_green_blue">#</a></span></h2>
<div class="signature"><ul>
<li>alpha <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 颜色的Alpha通道的值</li>
<li>red <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 颜色的R通道的值</li>
<li>green <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 颜色的G通道的值</li>
<li>blue <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 颜色的B通道的值</li>
</ul>
</div><p>返回这些颜色通道构成的整数颜色值。</p>
<h1>Image<span><a class="mark" href="#images_image" id="images_image">#</a></span></h1>
<p>[captureScreen][] 返回的对象。</p>
<h2>Image.getWidth()<span><a class="mark" href="#images_image_getwidth" id="images_image_getwidth">#</a></span></h2>
<p>返回以像素为单位图片宽度。</p>
<h2>Image.getHeight()<span><a class="mark" href="#images_image_getheight" id="images_image_getheight">#</a></span></h2>
<p>返回以像素为单位的图片高度。</p>
<h1>Point<span><a class="mark" href="#images_point" id="images_point">#</a></span></h1>
<p>findColor返回的对象。</p>
<h2>Point.x<span><a class="mark" href="#images_point_x" id="images_point_x">#</a></span></h2>
<p>横坐标。</p>
<h2>Point.y<span><a class="mark" href="#images_point_y" id="images_point_y">#</a></span></h2>
<p>纵坐标。</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,109 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>Index | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/_toc.html">
</head>
<body class="alt apidoc" id="api-section-_toc">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="_toc" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
</div>
<div id="apicontent">
<ul>
<li><a href="documentation.html">关于本文档</a></li>
<li><a href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a href="overview.html">Overview - 综述</a></li>
<li><a href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a href="globals.html">Globals - 一般全局函数</a></li>
<li><a href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a href="images.html">Images - 图片与图色处理</a></li>
<li><a href="console.html">Console - 控制台</a></li>
<li><a href="events.html">Events - 事件与监听</a></li>
<li><a href="timers.html">Timers - 定时器</a></li>
<li><a href="shell.html">Shell - Shell命令</a></li>
<li><a href="ui.html">UI - 用户界面</a></li>
<li><a href="files.html">Files - 文件系统</a></li>
<li><a href="app.html">App - 应用</a></li>
<li><a href="engines.html">Engines - 脚本引擎</a></li>
<li><a href="modules.html">Modules - 模块</a></li>
<li><a href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,263 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Keys | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/keys.html">
</head>
<body class="alt apidoc" id="api-section-keys">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="keys" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_undefined"><a href="#keys_keys">Keys</a></span><ul>
<li><span class="stability_undefined"><a href="#keys_back">back()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_home">home()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_powerdialog">powerDialog()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_notifications">notifications()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_quicksettings">quickSettings()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_recents">recents()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_splitscreen">splitScreen()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_home_1">Home()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_back_1">Back()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_power">Power()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_menu">Menu()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_volumeup">VolumeUp()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_volumedown">VolumeDown()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_camera">Camera()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_up">Up()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_down">Down()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_left">Left()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_right">Right()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_ok">OK()</a></span></li>
<li><span class="stability_undefined"><a href="#keys_text_text">Text(text)</a></span></li>
<li><span class="stability_undefined"><a href="#keys_keycode_code">KeyCode(code)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#keys_keycode">附录: KeyCode对照表</a></span></li>
</ul>
</div>
<div id="apicontent">
<h1>Keys<span><a class="mark" href="#keys_keys" id="keys_keys">#</a></span></h1>
<p>按键模拟部分提供了一些模拟物理按键的全局函数包括Home、音量键、照相键等有的函数依赖于无障碍服务有的函数依赖于root权限。</p>
<h2>back()<span><a class="mark" href="#keys_back" id="keys_back">#</a></span></h2>
<p>模拟按下返回键。返回是否执行成功。
此函数依赖于无障碍服务。</p>
<h2>home()<span><a class="mark" href="#keys_home" id="keys_home">#</a></span></h2>
<p>模拟按下Home键。返回是否执行成功。
此函数依赖于无障碍服务。</p>
<h2>powerDialog()<span><a class="mark" href="#keys_powerdialog" id="keys_powerdialog">#</a></span></h2>
<p>弹出电源键菜单。返回是否执行成功。
此函数依赖于无障碍服务。</p>
<h2>notifications()<span><a class="mark" href="#keys_notifications" id="keys_notifications">#</a></span></h2>
<p>弹出通知栏。返回是否执行成功。
此函数依赖于无障碍服务。</p>
<h2>quickSettings()<span><a class="mark" href="#keys_quicksettings" id="keys_quicksettings">#</a></span></h2>
<p>显示快速设置(下拉通知栏到底)。返回是否执行成功。
此函数依赖于无障碍服务。</p>
<h2>recents()<span><a class="mark" href="#keys_recents" id="keys_recents">#</a></span></h2>
<p>显示最近任务。返回是否执行成功。
此函数依赖于无障碍服务。</p>
<h2>splitScreen()<span><a class="mark" href="#keys_splitscreen" id="keys_splitscreen">#</a></span></h2>
<p>分屏。返回是否执行成功。
此函数依赖于无障碍服务。</p>
<h2>Home()<span><a class="mark" href="#keys_home_1" id="keys_home_1">#</a></span></h2>
<p>模拟按下Home键。
此函数依赖于root权限。</p>
<h2>Back()<span><a class="mark" href="#keys_back_1" id="keys_back_1">#</a></span></h2>
<p>模拟按下返回键。
此函数依赖于root权限。</p>
<h2>Power()<span><a class="mark" href="#keys_power" id="keys_power">#</a></span></h2>
<p>模拟按下电源键。
此函数依赖于root权限。</p>
<h2>Menu()<span><a class="mark" href="#keys_menu" id="keys_menu">#</a></span></h2>
<p>模拟按下菜单键。
此函数依赖于root权限。</p>
<h2>VolumeUp()<span><a class="mark" href="#keys_volumeup" id="keys_volumeup">#</a></span></h2>
<p>按下音量上键。
此函数依赖于root权限。</p>
<h2>VolumeDown()<span><a class="mark" href="#keys_volumedown" id="keys_volumedown">#</a></span></h2>
<p>按键音量上键。
此函数依赖于root权限。</p>
<h2>Camera()<span><a class="mark" href="#keys_camera" id="keys_camera">#</a></span></h2>
<p>模拟按下照相键。</p>
<h2>Up()<span><a class="mark" href="#keys_up" id="keys_up">#</a></span></h2>
<p>模拟按下物理按键上。
此函数依赖于root权限。</p>
<h2>Down()<span><a class="mark" href="#keys_down" id="keys_down">#</a></span></h2>
<p>模拟按下物理按键下。
此函数依赖于root权限。</p>
<h2>Left()<span><a class="mark" href="#keys_left" id="keys_left">#</a></span></h2>
<p>模拟按下物理按键左。
此函数依赖于root权限。</p>
<h2>Right()<span><a class="mark" href="#keys_right" id="keys_right">#</a></span></h2>
<p>模拟按下物理按键右。
此函数依赖于root权限。</p>
<h2>OK()<span><a class="mark" href="#keys_ok" id="keys_ok">#</a></span></h2>
<p>模拟按下物理按键确定。
此函数依赖于root权限。</p>
<h2>Text(text)<span><a class="mark" href="#keys_text_text" id="keys_text_text">#</a></span></h2>
<div class="signature"><ul>
<li>text <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要输入的文字,只能为英文或英文符号
输入文字text。例如<code>Text(&quot;aaa&quot;);</code></li>
</ul>
</div><h2>KeyCode(code)<span><a class="mark" href="#keys_keycode_code" id="keys_keycode_code">#</a></span></h2>
<div class="signature"><ul>
<li>code <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> | <String> 要按下的按键的数字代码或名称。参见下表。
模拟物理按键。例如<code>KeyCode(29)</code><code>KeyCode(&quot;KEYCODE_A&quot;)</code>是按下A键。</li>
</ul>
</div><h1>附录: KeyCode对照表<span><a class="mark" href="#keys_keycode" id="keys_keycode">#</a></span></h1>
<p>KeyCode KeyEvent Value </p>
<ul>
<li>KEYCODE_MENU 1 </li>
<li>KEYCODE_SOFT_RIGHT 2 </li>
<li>KEYCODE_HOME 3 </li>
<li>KEYCODE_BACK 4 </li>
<li>KEYCODE_CALL 5 </li>
<li>KEYCODE_ENDCALL 6 </li>
<li>KEYCODE_0 7 </li>
<li>KEYCODE_1 8 </li>
<li>KEYCODE_2 9 </li>
<li>KEYCODE_3 10 </li>
<li>KEYCODE_4 11 </li>
<li>KEYCODE_5 12 </li>
<li>KEYCODE_6 13 </li>
<li>KEYCODE_7 14 </li>
<li>KEYCODE_8 15 </li>
<li>KEYCODE_9 16 </li>
<li>KEYCODE_STAR 17 </li>
<li>KEYCODE_POUND 18 </li>
<li>KEYCODE_DPAD_UP 19 </li>
<li>KEYCODE_DPAD_DOWN 20 </li>
<li>KEYCODE_DPAD_LEFT 21 </li>
<li>KEYCODE_DPAD_RIGHT 22 </li>
<li>KEYCODE_DPAD_CENTER 23 </li>
<li>KEYCODE_VOLUME_UP 24 </li>
<li>KEYCODE_VOLUME_DOWN 25 </li>
<li>KEYCODE_POWER 26 </li>
<li>KEYCODE_CAMERA 27 </li>
<li>KEYCODE_CLEAR 28 </li>
<li>KEYCODE_A 29 </li>
<li>KEYCODE_B 30 </li>
<li>KEYCODE_C 31 </li>
<li>KEYCODE_D 32 </li>
<li>KEYCODE_E 33 </li>
<li>KEYCODE_F 34 </li>
<li>KEYCODE_G 35 </li>
<li>KEYCODE_H 36 </li>
<li>KEYCODE_I 37 </li>
<li>KEYCODE_J 38 </li>
<li>KEYCODE_K 39 </li>
<li>KEYCODE_L 40 </li>
<li>KEYCODE_M 41 </li>
<li>KEYCODE_N 42 </li>
<li>KEYCODE_O 43 </li>
<li>KEYCODE_P 44 </li>
<li>KEYCODE_Q 45 </li>
<li>KEYCODE_R 46 </li>
<li>KEYCODE_S 47 </li>
<li>KEYCODE_T 48 </li>
<li>KEYCODE_U 49 </li>
<li>KEYCODE_V 50 </li>
<li>KEYCODE_W 51 </li>
<li>KEYCODE_X 52 </li>
<li>KEYCODE_Y 53 </li>
<li>KEYCODE_Z 54 </li>
<li>KEYCODE_COMMA 55 </li>
<li>KEYCODE_PERIOD 56 </li>
<li>KEYCODE_ALT_LEFT 57 </li>
<li>KEYCODE_ALT_RIGHT 58 </li>
<li>KEYCODE_SHIFT_LEFT 59 </li>
<li>KEYCODE_SHIFT_RIGHT 60 </li>
<li>KEYCODE_TAB 61 </li>
<li>KEYCODE_SPACE 62 </li>
<li>KEYCODE_SYM 63 </li>
<li>KEYCODE_EXPLORER 64 </li>
<li>KEYCODE_ENVELOPE 65 </li>
<li>KEYCODE_ENTER 66 </li>
<li>KEYCODE_DEL 67 </li>
<li>KEYCODE_GRAVE 68 </li>
<li>KEYCODE_MINUS 69 </li>
<li>KEYCODE_EQUALS 70 </li>
<li>KEYCODE_LEFT_BRACKET 71 </li>
<li>KEYCODE_RIGHT_BRACKET 72 </li>
<li>KEYCODE_BACKSLASH 73 </li>
<li>KEYCODE_SEMICOLON 74 </li>
<li>KEYCODE_APOSTROPHE 75 </li>
<li>KEYCODE_SLASH 76 </li>
<li>KEYCODE_AT 77 </li>
<li>KEYCODE_NUM 78 </li>
<li>KEYCODE_HEADSETHOOK 79 </li>
<li>KEYCODE_FOCUS 80 </li>
<li>KEYCODE_PLUS 81 </li>
<li>KEYCODE_MENU 82 </li>
<li>KEYCODE_NOTIFICATION 83 </li>
<li>KEYCODE_SEARCH 84 </li>
<li>TAG<em>LAST</em> KEYCODE 85 </li>
</ul>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,109 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>module (模块) | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/modules.html">
</head>
<body class="alt apidoc" id="api-section-modules">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules active" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="modules" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#modules_module">module (模块)</a></span></li>
</ul>
</div>
<div id="apicontent">
<h1>module (模块)<span><a class="mark" href="#modules_module" id="modules_module">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>Auto.js 有一个简单的模块加载系统。 在 Auto.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块)。</p>
<p>例子,假设有一个名为 foo.js 的文件:</p>
<pre><code>const circle = require(&#39;./circle.js&#39;);
console.log(`半径为 4 的圆的面积是 ${circle.area(4)}`);
</code></pre><p>在第一行中foo.js 加载了同一目录下的 circle.js 模块。</p>
<p>circle.js 文件的内容为:</p>
<pre><code>const { PI } = Math;
exports.area = (r) =&gt; PI * r ** 2;
exports.circumference = (r) =&gt; 2 * PI * r;
</code></pre><p>circle.js 模块导出了 area() 和 circumference() 两个函数。 通过在特殊的 exports 对象上指定额外的属性,函数和对象可以被添加到模块的根部。</p>
<p>模块内的本地变量是私有的,因为模块被 Node.js 包装在一个函数中(详见模块包装器)。 在这个例子中,变量 PI 是 circle.js 私有的。</p>
<p>module.exports属性可以被赋予一个新的值例如函数或对象</p>
<p>如下bar.js 会用到 square 模块square 导出一个构造函数:</p>
<pre><code>const square = require(&#39;./square.js&#39;);
const mySquare = square(2);
console.log(`正方形的面积是 ${mySquare.area()}`);
square 模块定义在 square.js 中:
// 赋值给 `exports` 不会修改模块,必须使用 `module.exports`
module.exports = function(width) {
return {
area: () =&gt; width ** 2
};
};
</code></pre>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,79 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Index | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/overview.html">
</head>
<body class="alt apidoc" id="api-section-overview">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview active" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="overview" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
</div>
<div id="apicontent">
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,79 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Index | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/qa.html">
</head>
<body class="alt apidoc" id="api-section-qa">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa active" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="qa" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
</div>
<div id="apicontent">
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,459 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>shell函数 | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/shell.html">
</head>
<body class="alt apidoc" id="api-section-shell">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell active" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="shell" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#shell_shell">shell函数</a></span><ul>
<li><span class="stability_undefined"><a href="#shell_shell_cmd_root_false">shell(cmd[, root = false])</a></span></li>
</ul>
</li>
<li><span class="stability_2"><a href="#shell_shell_1">Shell</a></span><ul>
<li><span class="stability_undefined"><a href="#shell_shell_root_false">Shell(root = false)</a></span></li>
<li><span class="stability_undefined"><a href="#shell_shell_exec_cmd">Shell.exec(cmd)</a></span></li>
<li><span class="stability_undefined"><a href="#shell_shell_exit">Shell.exit()</a></span></li>
<li><span class="stability_undefined"><a href="#shell_shell_exitandwaitfor">Shell.exitAndWaitFor()</a></span></li>
<li><span class="stability_undefined"><a href="#shell_shell_setcallback_callback">Shell.setCallback(callback)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#shell_shell_2">附录: shell命令简介</a></span><ul>
<li><span class="stability_undefined"><a href="#shell_am">am命令</a></span><ul>
<li><span class="stability_undefined"><a href="#shell_start_options_intent">start [options] intent</a></span></li>
<li><span class="stability_undefined"><a href="#shell_startservice_options_intent">startservice [options] intent</a></span></li>
<li><span class="stability_undefined"><a href="#shell_force_stop_package">force-stop package</a></span></li>
<li><span class="stability_undefined"><a href="#shell_kill_options_package">kill [options] package</a></span></li>
<li><span class="stability_undefined"><a href="#shell_kill_all">kill-all</a></span></li>
<li><span class="stability_undefined"><a href="#shell_broadcast_options_intent">broadcast [options] intent</a></span></li>
<li><span class="stability_undefined"><a href="#shell_instrument_options_component">instrument [options] component</a></span></li>
<li><span class="stability_undefined"><a href="#shell_dumpheap_options_process_file">dumpheap [options] process file</a></span></li>
<li><span class="stability_undefined"><a href="#shell_monitor_options_anr">monitor [options] 启动对崩溃或 ANR 的监控。</a></span></li>
<li><span class="stability_undefined"><a href="#shell_screen_compat_span_class_type_lt_on_gt_span_span_class_type_lt_off_gt_span_package">screen-compat <span class="type">&lt;on&gt;</span> | <span class="type">&lt;off&gt;</span> package</a></span></li>
<li><span class="stability_undefined"><a href="#shell_display_size_reset_widthxheight">display-size [reset|widthxheight]</a></span></li>
<li><span class="stability_undefined"><a href="#shell_display_density_dpi">display-density dpi</a></span></li>
<li><span class="stability_undefined"><a href="#shell_to_uri_intent">to-uri intent</a></span></li>
<li><span class="stability_undefined"><a href="#shell_to_intent_uri_intent">to-intent-uri intent</a></span></li>
<li><span class="stability_undefined"><a href="#shell_intent">intent参数的规范</a></span><ul>
<li><span class="stability_undefined"><a href="#shell_uri_component_package">URI component package</a></span></li>
</ul>
</li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#shell">应用包名</a></span></li>
<li><span class="stability_undefined"><a href="#shell_pm">pm命令</a></span><ul>
<li><span class="stability_undefined"><a href="#shell_list_packages_options_filter">list packages [options] filter</a></span></li>
<li><span class="stability_undefined"><a href="#shell_list_permission_groups">list permission-groups</a></span></li>
<li><span class="stability_undefined"><a href="#shell_list_permissions_options_group">list permissions [options] group</a></span></li>
<li><span class="stability_undefined"><a href="#shell_list_instrumentation_options">list instrumentation [options]</a></span></li>
<li><span class="stability_undefined"><a href="#shell_list_features">list features</a></span></li>
<li><span class="stability_undefined"><a href="#shell_list_libraries">list libraries</a></span></li>
<li><span class="stability_undefined"><a href="#shell_list_users">list users</a></span></li>
<li><span class="stability_undefined"><a href="#shell_path_package">path package</a></span></li>
<li><span class="stability_undefined"><a href="#shell_install_options_path">install [options] path</a></span></li>
<li><span class="stability_undefined"><a href="#shell_uninstall_options_package">uninstall [options] package</a></span></li>
<li><span class="stability_undefined"><a href="#shell_clear_package">clear package</a></span></li>
<li><span class="stability_undefined"><a href="#shell_enable_package_or_component">enable package_or_component</a></span></li>
<li><span class="stability_undefined"><a href="#shell_disable_package_or_component">disable package_or_component</a></span></li>
<li><span class="stability_undefined"><a href="#shell_disable_user_options_package_or_component">disable-user [options] package_or_component</a></span></li>
<li><span class="stability_undefined"><a href="#shell_grant_package_name_permission">grant package_name permission</a></span></li>
<li><span class="stability_undefined"><a href="#shell_revoke_package_name_permission">revoke package_name permission</a></span></li>
<li><span class="stability_undefined"><a href="#shell_set_install_location_location">set-install-location location</a></span></li>
<li><span class="stability_undefined"><a href="#shell_get_install_location">get-install-location</a></span></li>
<li><span class="stability_undefined"><a href="#shell_set_permission_enforced_permission_true_false">set-permission-enforced permission [true|false]</a></span></li>
<li><span class="stability_undefined"><a href="#shell_trim_caches_desired_free_space">trim-caches desired_free_space</a></span></li>
<li><span class="stability_undefined"><a href="#shell_create_user_user_name">create-user user_name</a></span></li>
<li><span class="stability_undefined"><a href="#shell_remove_user_user_id">remove-user user_id</a></span></li>
<li><span class="stability_undefined"><a href="#shell_get_max_users">get-max-users</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#shell_1">其他命令</a></span><ul>
<li><span class="stability_undefined"><a href="#shell_2">进行屏幕截图</a></span></li>
<li><span class="stability_undefined"><a href="#shell_3">列表文件</a></span></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<p>shell即Unix Shell在类Unix系统提供与操作系统交互的一系列命令。</p>
<p>很多程序可以用来执行shell命令例如终端模拟器。</p>
<p>在Auto.js大致等同于用adb执行命令&quot;adb shell&quot;。其实现包括两种方式:</p>
<ul>
<li>通过<code>java.lang.Runtime.exec</code>执行(shell, Tap, Home等函数)</li>
<li>通过内嵌终端模拟器执行(RootAutomator, Shell等对象)</li>
</ul>
<h1>shell函数<span><a class="mark" href="#shell_shell" id="shell_shell">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><h2>shell(cmd[, root = false])<span><a class="mark" href="#shell_shell_cmd_root_false" id="shell_shell_cmd_root_false">#</a></span></h2>
<div class="signature"><ul>
<li>cmd <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要执行的命令</li>
<li>root <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 是否以root权限运行默认为false。</li>
</ul>
</div><p>返回运行一个对象表示命令的执行结果。其属性如下:</p>
<ul>
<li>code <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 返回码。执行成功时为0失败时为非0的数字。</li>
<li>result <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 运行结果(stdout输出结果)</li>
<li>error \<String\> 运行的错误信息(stderr输出结果)。例如执行需要root权限的命令但没有授予root权限会返回错误信息&quot;Permission denied&quot;</li>
</ul>
<p>示例(强制停止微信) </p>
<pre><code>var result = shell(&quot;am force-stop com.tencent.mm&quot;, true);
log(result);
console.show();
if(result.code == 0){
toast(&quot;执行成功&quot;);
}else{
toast(&quot;执行失败!请到控制台查看错误信息&quot;);
}
</code></pre><h1>Shell<span><a class="mark" href="#shell_shell_1" id="shell_shell_1">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>shell函数通过用来一次性执行单条命令并获取结果。如果有多条命令需要执行用Shell对象的效率更高。这是因为每次运行shell函数都会打开一个单独的shell进程并在运行结束后关闭他这个过程需要一定的时间而Shell对象自始至终使用同一个shell进程。</p>
<h2>Shell(root = false)<span><a class="mark" href="#shell_shell_root_false" id="shell_shell_root_false">#</a></span></h2>
<div class="signature"><ul>
<li>root <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 是否以root权限运行一个shell进程。这将会影响其后使用该Shell对象执行的命令的权限</li>
</ul>
</div><p>Shell对象的&quot;构造函数&quot;</p>
<pre><code>var sh = new Shell(true);
sh.exec(&quot;am force-stop com.tencent.mm&quot;);
sh.exit();
</code></pre><h2>Shell.exec(cmd)<span><a class="mark" href="#shell_shell_exec_cmd" id="shell_shell_exec_cmd">#</a></span></h2>
<div class="signature"><ul>
<li><code>cmd</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要执行的命令</li>
</ul>
</div><p>执行命令cmd。该函数不会返回任何值。</p>
<p>注意,命令执行是&quot;异步&quot;的、非阻塞的。也就是不会等待命令完成后才继续向下执行。</p>
<p>尽管这样的设计使用起来有很多不便之处,但受限于终端模拟器,暂时没有解决方式;如果后续能找到解决方案,则将提供<code>Shell.execAndWaitFor</code>函数。</p>
<h2>Shell.exit()<span><a class="mark" href="#shell_shell_exit" id="shell_shell_exit">#</a></span></h2>
<p>直接退出shell。这意味着正在执行的命令会被强制退出。</p>
<h2>Shell.exitAndWaitFor()<span><a class="mark" href="#shell_shell_exitandwaitfor" id="shell_shell_exitandwaitfor">#</a></span></h2>
<p>执行&quot;exit&quot;命令并等待执行命令执行完成、退出shell。</p>
<p>此函数会执行exit命令来正常退出shell。</p>
<h2>Shell.setCallback(callback)<span><a class="mark" href="#shell_shell_setcallback_callback" id="shell_shell_setcallback_callback">#</a></span></h2>
<div class="signature"><ul>
<li>callback <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type">&lt;Object&gt;</a> 回调函数</li>
</ul>
</div><p>设置该Shell的回调函数以便监听Shell的输出。可以包括以下属性</p>
<ul>
<li>onOutput <span class="type">&lt;function&gt;</span> 每当shell有新的输出时便会调用该函数。其参数是一个字符串。</li>
<li>onNewLine <span class="type">&lt;function&gt;</span> 每当shell有新的一行输出时便会调用该函数。其参数是一个字符串(不包括最后的换行符)。</li>
</ul>
<p>例如:</p>
<pre><code>var sh = new Shell();
sh.setCallback({
onNewLine: function(line){
log(line);
}
})
while(true){
var cmd = dialogs.rawInput(&quot;请输入要执行的命令输入exit退出&quot;);
if(cmd == &quot;exit&quot;){
break;
}
sh.exec(cmd);
}
sh.exit();
</code></pre><h1>附录: shell命令简介<span><a class="mark" href="#shell_shell_2" id="shell_shell_2">#</a></span></h1>
<p>以下关于shell命令的资料来自<a href="https://developer.android.com/studio/command-line/adb.html#shellcommands">AndroidStudio用户指南Shell命令</a></p>
<h2>am命令<span><a class="mark" href="#shell_am" id="shell_am">#</a></span></h2>
<p>am命令即Activity Manager命令用于管理应用程序活动、服务等。</p>
<p><strong>以下命令均以&quot;am &quot;开头,例如&quot;shell(\&quot;am start -p com.tencent.mm\&quot;);&quot;(启动微信)</strong></p>
<h3>start [options] intent<span><a class="mark" href="#shell_start_options_intent" id="shell_start_options_intent">#</a></span></h3>
<p>启动 intent 指定的 Activity(应用程序活动)。<br>请参阅 <a href="#shell_intent">intent 参数的规范</a></p>
<p>选项包括:</p>
<ul>
<li>-D启用调试。</li>
<li>-W等待启动完成。</li>
<li>--start-profiler file启动分析器并将结果发送到 file。</li>
<li>-P file类似于 --start-profiler但当应用进入空闲状态时分析停止。</li>
<li>-R count重复 Activity 启动 count 次数。在每次重复前,将完成顶部 Activity。</li>
<li>-S启动 Activity 前强行停止目标应用。</li>
<li>--opengl-trace启用 OpenGL 函数的跟踪。</li>
<li>--user user_id | current指定要作为哪个用户运行如果未指定则作为当前用户运行。</li>
</ul>
<h3>startservice [options] intent<span><a class="mark" href="#shell_startservice_options_intent" id="shell_startservice_options_intent">#</a></span></h3>
<p>启动 intent 指定的 Service(服务)。<br>请参阅 <a href="#shell_intent">intent 参数的规范</a><br>选项包括:</p>
<ul>
<li>--user user_id | current指定要作为哪个用户运行如果未指定则作为当前用户运行。</li>
</ul>
<h3>force-stop package<span><a class="mark" href="#shell_force_stop_package" id="shell_force_stop_package">#</a></span></h3>
<p>强行停止与 package<a href="#应用包名">应用包名</a>)关联的所有应用。 </p>
<h3>kill [options] package<span><a class="mark" href="#shell_kill_options_package" id="shell_kill_options_package">#</a></span></h3>
<p>终止与 package<a href="#应用包名">应用包名</a>)关联的所有进程。此命令仅终止可安全终止且不会影响用户体验的进程。<br>选项包括:</p>
<ul>
<li>--user user_id | all | current指定将终止其进程的用户如果未指定则终止所有用户的进程。</li>
</ul>
<h3>kill-all<span><a class="mark" href="#shell_kill_all" id="shell_kill_all">#</a></span></h3>
<p>终止所有后台进程。</p>
<h3>broadcast [options] intent<span><a class="mark" href="#shell_broadcast_options_intent" id="shell_broadcast_options_intent">#</a></span></h3>
<p>发出广播 intent。
请参阅 <a href="#shell_intent">intent 参数的规范</a></p>
<p>选项包括:</p>
<ul>
<li>[--user user_id | all | current]:指定要发送到的用户;如果未指定,则发送到所有用户。</li>
</ul>
<h3>instrument [options] component<span><a class="mark" href="#shell_instrument_options_component" id="shell_instrument_options_component">#</a></span></h3>
<p>使用 Instrumentation 实例启动监控。通常,目标 component 是表单 test_package/runner_class。<br>选项包括:</p>
<ul>
<li>-r输出原始结果否则对 report_key_streamresult 进行解码)。与 [-e perf true] 结合使用以生成性能测量的原始输出。</li>
<li>-e name value将参数 name 设为 value。对于测试运行器通用表单为 -e testrunner_flag value[,value...]。</li>
<li>-p file将分析数据写入 file。</li>
<li>-w先等待仪器完成然后再返回。测试运行器需要使用此选项。</li>
<li>--no-window-animation运行时关闭窗口动画。</li>
<li>--user user_id | current指定仪器在哪个用户中运行如果未指定则在当前用户中运行。</li>
<li>profile start process file 启动 process 的分析器,将结果写入 file。</li>
<li>profile stop process 停止 process 的分析器。</li>
</ul>
<h3>dumpheap [options] process file<span><a class="mark" href="#shell_dumpheap_options_process_file" id="shell_dumpheap_options_process_file">#</a></span></h3>
<p>转储 process 的堆,写入 file。</p>
<p>选项包括:</p>
<ul>
<li>--user [user_id|current]:提供进程名称时,指定要转储的进程用户;如果未指定,则使用当前用户。</li>
<li>-n转储原生堆而非托管堆。</li>
<li>set-debug-app [options] package 将应用 package 设为调试。</li>
</ul>
<p>选项包括:</p>
<ul>
<li>-w应用启动时等待调试程序。</li>
<li>--persistent保留此值。</li>
<li>clear-debug-app 使用 set-debug-app 清除以前针对调试用途设置的软件包。</li>
</ul>
<h3>monitor [options] 启动对崩溃或 ANR 的监控。<span><a class="mark" href="#shell_monitor_options_anr" id="shell_monitor_options_anr">#</a></span></h3>
<p>选项包括:</p>
<ul>
<li>--gdb在崩溃/ANR 时在给定端口上启动 gdbserv。<h3>screen-compat <span class="type">&lt;on&gt;</span> | <span class="type">&lt;off&gt;</span> package<span><a class="mark" href="#shell_screen_compat_span_class_type_lt_on_gt_span_span_class_type_lt_off_gt_span_package" id="shell_screen_compat_span_class_type_lt_on_gt_span_span_class_type_lt_off_gt_span_package">#</a></span></h3>
控制 package 的屏幕兼容性模式。</li>
</ul>
<h3>display-size [reset|widthxheight]<span><a class="mark" href="#shell_display_size_reset_widthxheight" id="shell_display_size_reset_widthxheight">#</a></span></h3>
<p>替换模拟器/设备显示尺寸。此命令对于在不同尺寸的屏幕上测试您的应用非常有用,它支持使用大屏设备模仿小屏幕分辨率(反之亦然)。<br>示例:</p>
<pre><code>shell(&quot;am display-size 1280x800&quot;, true);
</code></pre><h3>display-density dpi<span><a class="mark" href="#shell_display_density_dpi" id="shell_display_density_dpi">#</a></span></h3>
<p>替换模拟器/设备显示密度。此命令对于在不同密度的屏幕上测试您的应用非常有用,它支持使用低密度屏幕在高密度环境环境上进行测试(反之亦然)。<br>示例:</p>
<pre><code>shell(&quot;am display-density 480&quot;, true);
</code></pre><h3>to-uri intent<span><a class="mark" href="#shell_to_uri_intent" id="shell_to_uri_intent">#</a></span></h3>
<p>将给定的 intent 规范以 URI 的形式输出。
请参阅 <a href="#shell_intent">intent 参数的规范</a></p>
<h3>to-intent-uri intent<span><a class="mark" href="#shell_to_intent_uri_intent" id="shell_to_intent_uri_intent">#</a></span></h3>
<p>将给定的 intent 规范以 intent:URI 的形式输出。
请参阅 intent 参数的规范。</p>
<h3>intent参数的规范<span><a class="mark" href="#shell_intent" id="shell_intent">#</a></span></h3>
<p>对于采用 intent 参数的 am 命令,您可以使用以下选项指定 intent</p>
<ul>
<li>-a action<br>指定 intent 操作如“android.intent.action.VIEW”。此指定只能声明一次。</li>
<li>-d data_uri<br>指定 intent 数据 URI如“content://contacts/people/1”。此指定只能声明一次。</li>
<li>-t mime_type<br>指定 intent MIME 类型如“image/png”。此指定只能声明一次。</li>
<li>-c category<br>指定 intent 类别如“android.intent.category.APP_CONTACTS”。</li>
<li>-n component<br>指定带有软件包名称前缀的组件名称以创建显式 intent如“com.example.app/.ExampleActivity”。</li>
<li>-f flags<br>将标志添加到 setFlags() 支持的 intent。</li>
<li>--esn extra_key<br>添加一个 null extra。URI intent 不支持此选项。</li>
<li>-e|--es extra_key extra_string_value<br>添加字符串数据作为键值对。</li>
<li>--ez extra_key extra_boolean_value<br>添加布尔型数据作为键值对。</li>
<li>--ei extra_key extra_int_value<br>添加整数型数据作为键值对。</li>
<li>--el extra_key extra_long_value<br>添加长整型数据作为键值对。</li>
<li>--ef extra_key extra_float_value<br>添加浮点型数据作为键值对。</li>
<li>--eu extra_key extra_uri_value<br>添加 URI 数据作为键值对。</li>
<li>--ecn extra_key extra_component_name_value<br>添加组件名称,将其作为 ComponentName 对象进行转换和传递。</li>
<li>--eia extra_key extra_int_value[,extra_int_value...]<br>添加整数数组。</li>
<li>--ela extra_key extra_long_value[,extra_long_value...]<br>添加长整型数组。</li>
<li>--efa extra_key extra_float_value[,extra_float_value...]<br>添加浮点型数组。</li>
<li>--grant-read-uri-permission<br>包含标志 FLAG_GRANT_READ_URI_PERMISSION。</li>
<li>--grant-write-uri-permission<br>包含标志 FLAG_GRANT_WRITE_URI_PERMISSION。</li>
<li>--debug-log-resolution<br>包含标志 FLAG_DEBUG_LOG_RESOLUTION。</li>
<li>--exclude-stopped-packages<br>包含标志 FLAG_EXCLUDE_STOPPED_PACKAGES。</li>
<li>--include-stopped-packages<br>包含标志 FLAG_INCLUDE_STOPPED_PACKAGES。</li>
<li>--activity-brought-to-front<br>包含标志 FLAG_ACTIVITY_BROUGHT_TO_FRONT。</li>
<li>--activity-clear-top<br>包含标志 FLAG_ACTIVITY_CLEAR_TOP。</li>
<li>--activity-clear-when-task-reset<br>包含标志 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET。</li>
<li>--activity-exclude-from-recents<br>包含标志 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS。</li>
<li>--activity-launched-from-history<br>包含标志 FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY。</li>
<li>--activity-multiple-task<br>包含标志 FLAG_ACTIVITY_MULTIPLE_TASK。</li>
<li>--activity-no-animation<br>包含标志 FLAG_ACTIVITY_NO_ANIMATION。</li>
<li>--activity-no-history<br>包含标志 FLAG_ACTIVITY_NO_HISTORY。</li>
<li>--activity-no-user-action<br>包含标志 FLAG_ACTIVITY_NO_USER_ACTION。</li>
<li>--activity-previous-is-top<br>包含标志 FLAG_ACTIVITY_PREVIOUS_IS_TOP。</li>
<li>--activity-reorder-to-front<br>包含标志 FLAG_ACTIVITY_REORDER_TO_FRONT。</li>
<li>--activity-reset-task-if-needed<br>包含标志 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED。</li>
<li>--activity-single-top<br>包含标志 FLAG_ACTIVITY_SINGLE_TOP。</li>
<li>--activity-clear-task<br>包含标志 FLAG_ACTIVITY_CLEAR_TASK。</li>
<li>--activity-task-on-home<br>包含标志 FLAG_ACTIVITY_TASK_ON_HOME。</li>
<li>--receiver-registered-only<br>包含标志 FLAG_RECEIVER_REGISTERED_ONLY。</li>
<li>--receiver-replace-pending<br>包含标志 FLAG_RECEIVER_REPLACE_PENDING。</li>
<li>--selector<br>需要使用 -d 和 -t 选项以设置 intent 数据和类型。<h4>URI component package<span><a class="mark" href="#shell_uri_component_package" id="shell_uri_component_package">#</a></span></h4>
如果不受上述某一选项的限制,您可以直接指定 URI、软件包名称和组件名称。当参数不受限制时如果参数包含一个“:”(冒号),则此工具假定参数是一个 URI如果参数包含一个“/”(正斜杠),则此工具假定参数是一个组件名称;否则,此工具假定参数是一个软件包名称。</li>
</ul>
<h2>应用包名<span><a class="mark" href="#shell" id="shell">#</a></span></h2>
<p>所谓应用包名,是唯一确定应用的标识。例如微信的包名是&quot;com.tencent.mm&quot;, QQ的包名是&quot;com.tencent.mobileqq&quot;<br>要获取一个应用的包名,可以通过函数<code>getPackageName(appName)</code>获取。参见帮助-&gt;其他一般函数。</p>
<h2>pm命令<span><a class="mark" href="#shell_pm" id="shell_pm">#</a></span></h2>
<p>pm命令用于管理应用程序例如卸载应用、冻结应用等。<br><strong>以下命令均以&quot;pm &quot;开头,例如&quot;shell(\&quot;pm disable com.tencent.mm\&quot;);&quot;(冻结微信)</strong></p>
<h3>list packages [options] filter<span><a class="mark" href="#shell_list_packages_options_filter" id="shell_list_packages_options_filter">#</a></span></h3>
<p>输出所有软件包,或者,仅输出包名称包含 filter 中的文本的软件包。<br>选项:</p>
<ul>
<li>-f查看它们的关联文件。</li>
<li>-d进行过滤以仅显示已停用的软件包。</li>
<li>-e进行过滤以仅显示已启用的软件包。</li>
<li>-s进行过滤以仅显示系统软件包。</li>
<li>-3进行过滤以仅显示第三方软件包。</li>
<li>-i查看软件包的安装程序。</li>
<li>-u也包括卸载的软件包。</li>
<li>--user user_id要查询的用户空间。</li>
</ul>
<h3>list permission-groups<span><a class="mark" href="#shell_list_permission_groups" id="shell_list_permission_groups">#</a></span></h3>
<p>输出所有已知的权限组。</p>
<h3>list permissions [options] group<span><a class="mark" href="#shell_list_permissions_options_group" id="shell_list_permissions_options_group">#</a></span></h3>
<p>输出所有已知权限,或者,仅输出 group 中的权限。<br>选项:</p>
<ul>
<li>-g按组加以组织。</li>
<li>-f输出所有信息。</li>
<li>-s简短摘要。</li>
<li>-d仅列出危险权限。</li>
<li>-u仅列出用户将看到的权限。</li>
</ul>
<h3>list instrumentation [options]<span><a class="mark" href="#shell_list_instrumentation_options" id="shell_list_instrumentation_options">#</a></span></h3>
<p>列出所有测试软件包。<br>选项:</p>
<ul>
<li>-f列出用于测试软件包的 APK 文件。</li>
<li>target_package列出仅用于此应用的测试软件包。</li>
</ul>
<h3>list features<span><a class="mark" href="#shell_list_features" id="shell_list_features">#</a></span></h3>
<p>输出系统的所有功能。</p>
<h3>list libraries<span><a class="mark" href="#shell_list_libraries" id="shell_list_libraries">#</a></span></h3>
<p>输出当前设备支持的所有库。</p>
<h3>list users<span><a class="mark" href="#shell_list_users" id="shell_list_users">#</a></span></h3>
<p>输出系统上的所有用户。</p>
<h3>path package<span><a class="mark" href="#shell_path_package" id="shell_path_package">#</a></span></h3>
<p>输出给定 package 的 APK 的路径。 </p>
<h3>install [options] path<span><a class="mark" href="#shell_install_options_path" id="shell_install_options_path">#</a></span></h3>
<p>将软件包(通过 path 指定)安装到系统。<br>选项:</p>
<ul>
<li>-l安装具有转发锁定功能的软件包。</li>
<li>-r重新安装现有应用保留其数据。</li>
<li>-t允许安装测试 APK。</li>
<li>-i installer_package_name指定安装程序软件包名称。</li>
<li>-s在共享的大容量存储如 sdcard上安装软件包。</li>
<li>-f在内部系统内存上安装软件包。</li>
<li>-d允许版本代码降级。</li>
<li>-g授予应用清单文件中列出的所有权限。</li>
</ul>
<h3>uninstall [options] package<span><a class="mark" href="#shell_uninstall_options_package" id="shell_uninstall_options_package">#</a></span></h3>
<p>从系统中卸载软件包。<br>选项:</p>
<ul>
<li>-k移除软件包后保留数据和缓存目录。<h3>clear package<span><a class="mark" href="#shell_clear_package" id="shell_clear_package">#</a></span></h3>
删除与软件包关联的所有数据。</li>
</ul>
<h3>enable package_or_component<span><a class="mark" href="#shell_enable_package_or_component" id="shell_enable_package_or_component">#</a></span></h3>
<p>启用给定软件包或组件作为“package/class”写入</p>
<h3>disable package_or_component<span><a class="mark" href="#shell_disable_package_or_component" id="shell_disable_package_or_component">#</a></span></h3>
<p>停用给定软件包或组件作为“package/class”写入</p>
<h3>disable-user [options] package_or_component<span><a class="mark" href="#shell_disable_user_options_package_or_component" id="shell_disable_user_options_package_or_component">#</a></span></h3>
<p>选项:</p>
<ul>
<li>--user user_id要停用的用户。<h3>grant package_name permission<span><a class="mark" href="#shell_grant_package_name_permission" id="shell_grant_package_name_permission">#</a></span></h3>
向应用授予权限。在运行 Android 6.0API 级别 23及更高版本的设备上可以是应用清单中声明的任何权限。在运行 Android 5.1API 级别 22和更低版本的设备上必须是应用定义的可选权限。</li>
</ul>
<h3>revoke package_name permission<span><a class="mark" href="#shell_revoke_package_name_permission" id="shell_revoke_package_name_permission">#</a></span></h3>
<p>从应用中撤销权限。在运行 Android 6.0API 级别 23及更高版本的设备上可以是应用清单中声明的任何权限。在运行 Android 5.1API 级别 22和更低版本的设备上必须是应用定义的可选权限。</p>
<h3>set-install-location location<span><a class="mark" href="#shell_set_install_location_location" id="shell_set_install_location_location">#</a></span></h3>
<p>更改默认安装位置。位置值: </p>
<ul>
<li>0自动—让系统决定最佳位置。</li>
<li>1内部—安装在内部设备存储上。</li>
<li>2外部—安装在外部介质上。</li>
</ul>
<blockquote>
<p>注:此命令仅用于调试目的;使用此命令会导致应用中断和其他意外行为。</p>
</blockquote>
<h3>get-install-location<span><a class="mark" href="#shell_get_install_location" id="shell_get_install_location">#</a></span></h3>
<p>返回当前安装位置。返回值:</p>
<ul>
<li>0 [auto]:让系统决定最佳位置。</li>
<li>1 [internal]:安装在内部设备存储上</li>
<li>2 [external]:安装在外部介质上</li>
</ul>
<h3>set-permission-enforced permission [true|false]<span><a class="mark" href="#shell_set_permission_enforced_permission_true_false" id="shell_set_permission_enforced_permission_true_false">#</a></span></h3>
<p>指定是否应强制执行给定的权限。</p>
<h3>trim-caches desired_free_space<span><a class="mark" href="#shell_trim_caches_desired_free_space" id="shell_trim_caches_desired_free_space">#</a></span></h3>
<p>减少缓存文件以达到给定的可用空间。</p>
<h3>create-user user_name<span><a class="mark" href="#shell_create_user_user_name" id="shell_create_user_user_name">#</a></span></h3>
<p>使用给定的 user_name 创建新用户,输出新用户的标识符。</p>
<h3>remove-user user_id<span><a class="mark" href="#shell_remove_user_user_id" id="shell_remove_user_user_id">#</a></span></h3>
<p>移除具有给定的 user_id 的用户,删除与该用户关联的所有数据。</p>
<h3>get-max-users<span><a class="mark" href="#shell_get_max_users" id="shell_get_max_users">#</a></span></h3>
<p>输出设备支持的最大用户数。</p>
<h2>其他命令<span><a class="mark" href="#shell_1" id="shell_1">#</a></span></h2>
<h3>进行屏幕截图<span><a class="mark" href="#shell_2" id="shell_2">#</a></span></h3>
<p>screencap 命令是一个用于对设备显示屏进行屏幕截图的 shell 实用程序。在 shell 中,此语法为:</p>
<pre><code>screencap filename
</code></pre><p>例如:</p>
<pre><code>$ shell(&quot;screencap /sdcard/screen.png&quot;);
</code></pre><h3>列表文件<span><a class="mark" href="#shell_3" id="shell_3">#</a></span></h3>
<pre><code>ls filepath
</code></pre><p>例如:</p>
<pre><code>log(shell(&quot;ls /system/bin&quot;).result);
</code></pre>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,133 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Timers | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/timers.html">
</head>
<body class="alt apidoc" id="api-section-timers">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers active" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="timers" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#timers_timers">Timers</a></span><ul>
<li><span class="stability_undefined"><a href="#timers_setimmediate_callback_args">setImmediate(callback[, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#timers_setinterval_callback_delay_args">setInterval(callback, delay[, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#timers_settimeout_callback_delay_args">setTimeout(callback, delay[, ...args])</a></span></li>
<li><span class="stability_undefined"><a href="#timers_clearimmediate_id">clearImmediate(id)</a></span></li>
<li><span class="stability_undefined"><a href="#timers_clearinterval_id">clearInterval(id)</a></span></li>
<li><span class="stability_undefined"><a href="#timers_cleartimeout_id">clearTimeout(id)</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>Timers<span><a class="mark" href="#timers_timers" id="timers_timers">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>timers 模块暴露了一个全局的 API用于在某个未来时间段调用调度函数。 因为定时器函数是全局的,所以使用该 API 无需调用 timers.<em>*</em></p>
<p>Auto.js 中的计时器函数实现了与 Web 浏览器提供的定时器类似的 API除了它使用了一个不同的内部实现它是基于 Android Looper-Handler消息循环机制构建的。其实现机制与Node.js比较相似。</p>
<h2>setImmediate(callback[, ...args])<span><a class="mark" href="#timers_setimmediate_callback_args" id="timers_setimmediate_callback_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>callback</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 在Looper循环的当前回合结束时要调用的函数。</li>
<li><code>...args</code> <span class="type">&lt;any&gt;</span> 当调用 callback 时要传入的可选参数。</li>
</ul>
</div><p>预定立即执行的 callback它是在 I/O 事件的回调之后被触发。 返回一个用于 clearImmediate() 的 id。</p>
<p>当多次调用 setImmediate() 时callback 函数会按照它们被创建的顺序依次执行。 每次事件循环迭代都会处理整个回调队列。 如果一个立即定时器是被一个正在执行的回调排入队列的,则该定时器直到下一次事件循环迭代才会被触发。</p>
<h2>setInterval(callback, delay[, ...args])<span><a class="mark" href="#timers_setinterval_callback_delay_args" id="timers_setinterval_callback_delay_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>callback</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 当定时器到点时要调用的函数。</li>
<li><code>delay</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 调用 callback 之前要等待的毫秒数。</li>
<li><code>...args</code> <span class="type">&lt;any&gt;</span> 当调用 callback 时要传入的可选参数。</li>
</ul>
</div><p>预定每隔 delay 毫秒重复执行的 callback。 返回一个用于 clearInterval() 的 id。</p>
<p>当 delay 小于 0 时delay 会被设为 0。</p>
<h2>setTimeout(callback, delay[, ...args])<span><a class="mark" href="#timers_settimeout_callback_delay_args" id="timers_settimeout_callback_delay_args">#</a></span></h2>
<div class="signature"><ul>
<li><code>callback</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function" class="type">&lt;Function&gt;</a> 当定时器到点时要调用的函数。</li>
<li><code>delay</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 调用 callback 之前要等待的毫秒数。</li>
<li><code>...args</code> <span class="type">&lt;any&gt;</span> 当调用 callback 时要传入的可选参数。</li>
</ul>
</div><p>预定在 delay 毫秒之后执行的单次 callback。 返回一个用于 clearTimeout() 的 id。</p>
<p>callback 可能不会精确地在 delay 毫秒被调用。 Auto.js 不能保证回调被触发的确切时间,也不能保证它们的顺序。 回调会在尽可能接近所指定的时间上调用。</p>
<p>当 delay 小于 0 时delay 会被设为 0。</p>
<p>setImmediate()、setInterval() 和 setTimeout() 方法每次都会返回表示预定的计时器的id。 它们可用于取消定时器并防止触发。</p>
<h2>clearImmediate(id)<span><a class="mark" href="#timers_clearimmediate_id" id="timers_clearimmediate_id">#</a></span></h2>
<div class="signature"><ul>
<li><code>id</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 一个 setImmediate() 返回的 id。</li>
</ul>
</div><p>取消一个由 setImmediate() 创建的 Immediate 对象。</p>
<h2>clearInterval(id)<span><a class="mark" href="#timers_clearinterval_id" id="timers_clearinterval_id">#</a></span></h2>
<div class="signature"><ul>
<li><code>id</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 一个 setInterval() 返回的 id。</li>
</ul>
</div><p>取消一个由 setInterval() 创建的 Timeout 对象。</p>
<h2>clearTimeout(id)<span><a class="mark" href="#timers_cleartimeout_id" id="timers_cleartimeout_id">#</a></span></h2>
<div class="signature"><ul>
<li><code>id</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 一个 setTimeout() 返回的 id。</li>
</ul>
</div><p>取消一个由 setTimeout() 创建的 Timeout 对象。</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,79 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Index | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/ui.html">
</head>
<body class="alt apidoc" id="api-section-ui">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui active" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="ui" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
</div>
<div id="apicontent">
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,727 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>SimpleActionAutomator | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/widgets-based-automation.html">
</head>
<body class="alt apidoc" id="api-section-widgets-based-automation">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation active" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="widgets-based-automation" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
<ul>
<li><span class="stability_2"><a href="#widgets_based_automation_simpleactionautomator">SimpleActionAutomator</a></span><ul>
<li><span class="stability_undefined"><a href="#widgets_based_automation_click_text_i">click(text[, i])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_click_left_top_bottom_right">click(left, top, bottom, right)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_longclick_text_i">longClick(text[, i]))</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrollup_i">scrollUp([i])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrolldown_i">scrollDown([i])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_settext_i_text">setText([i, ]text)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_input_i_text">input([i, ]text)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uiselector">UiSelector</a></span><ul>
<li><span class="stability_undefined"><a href="#widgets_based_automation_id_resid">id(resId)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_idcontains_str">idContains(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_idstartswith_prefix">idStartsWith(prefix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_idendswith_suffix">idEndsWith(suffix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_idmatches_string">idMatches(String)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_text_str">text(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_textcontains_str">textContains(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_textstartswith_prefix">textStartsWith(prefix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_textendswith_suffix">textEndsWith(suffix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_textmatches_str">textMatches(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_desc_str">desc(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_desccontains_str">descContains(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_descstartswith_prefix">descStartsWith(prefix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_descendswith_suffix">descEndsWith(suffix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_descmatches_str">descMatches(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_classname_str">className(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_classnamecontains_str">classNameContains(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_classnamestartswith_prefix">classNameStartsWith(prefix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_classnameendswith_suffix">classNameEndsWith(suffix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_classnamematches_str">classNameMatches(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_packagename_str">packageName(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_packagenamecontains_str">packageNameContains(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_packagenamestartswith_prefix">packageNameStartsWith(prefix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_packagenameendswith_suffix">packageNameEndsWith(suffix)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_packagenamematches_str">packageNameMatches(str)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_bounds_l_t_r_b">bounds(l, t, r, b)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_boundsinside_l_t_r_b">boundsInside(l, t, r, b)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_boundscontains_l_t_r_b">boundsContains(l, t, r, b)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_drawingorder_order">drawingOrder(order)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_checkable_b_true">checkable([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_selected_b_true">selected([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_clickable_b_true">clickable([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_longclickable_b_true">longClickable([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_enabled_b_true">enabled([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrollable_b_true">scrollable([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_editable_b_true">editable([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_contentinvalid_b_true">contentInvalid([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_contextclickable_b_true">contextClickable([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_multiline_b_true">multiLine([b = true])</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_findone">findOne()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_find">find()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_untilfind">untilFind()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_exists">exists()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_waitfor">waitFor()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_click">click()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_longclick">longClick()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_copy">copy()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_paste">paste()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_select">select()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_cut">cut()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_collapse">collapse()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_expand">expand()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_show">show()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrollforward">scrollForward()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrollbackward">scrollBackward()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrollup">scrollUp()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrolldown">scrollDown()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrollleft">scrollLeft()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_scrollright">scrollRight()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_contextclick">contextClick()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_setselection_start_end">setSelection(start, end)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_settext_text">setText(text)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection">UiCollection</a></span><ul>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_size">UiCollection.size()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_get_i">UiCollection.get(i)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_each_func">UiCollection.each(func)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_empty">empty()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_nonempty">nonEmpty()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_filter_filter">UiCollection.filter(filter)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_find_selector">UiCollection.find(selector)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_findone_selector">UiCollection.findOne(selector)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_click">UiCollection.click()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_longclick">UiCollection.longClick()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_copy">UiCollection.copy()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_paste">UiCollection.paste()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_select">UiCollection.select()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_cut">UiCollection.cut()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_collapse">UiCollection.collapse()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_expand">UiCollection.expand()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_show">UiCollection.show()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_scrollforward">UiCollection.scrollForward()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_scrollbackward">UiCollection.scrollBackward()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_scrollup">UiCollection.scrollUp()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_scrolldown">UiCollection.scrollDown()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_scrollleft">UiCollection.scrollLeft()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_scrollright">UiCollection.scrollRight()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_contextclick">UiCollection.contextClick()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_setselection_start_end">UiCollection.setSelection(start, end)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uicollection_settext_text">UiCollection.setText(text)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_uiobject">UiObject</a></span><ul>
<li><span class="stability_undefined"><a href="#widgets_based_automation_child_i">child(i)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_parent">parent()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_children">children()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_childcount">childCount()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_bounds">bounds()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_boundsinparent">boundsInParent()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_drawingorder">drawingOrder()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_id">id()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_text">text()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_findbytext_text">findByText(text)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_find_selector">find(selector)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_findone_1">findOne</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_find_selector_1">find(selector)</a></span></li>
</ul>
</li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect">Rect</a></span><ul>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_left">Rect.left</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_right">Rect.right</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_top">Rect.top</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_bottom">Rect.bottom</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_centerx">Rect.centerX()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_centery">Rect.centerY()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_width">Rect.width()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_height">Rect.height()</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_contains_r">Rect.contains(r)</a></span></li>
<li><span class="stability_undefined"><a href="#widgets_based_automation_rect_intersect_r">Rect.intersect(r)</a></span></li>
</ul>
</li>
</ul>
</div>
<div id="apicontent">
<h1>SimpleActionAutomator<span><a class="mark" href="#widgets_based_automation_simpleactionautomator" id="widgets_based_automation_simpleactionautomator">#</a></span></h1>
<div class="api_stability api_stability_2"><a href="documentation.html#documentation_stability_index">Stability: 2</a> - Stable</div><p>SimpleActionAutomator提供了一些模拟简单操作的函数例如点击文字、模拟按键等。这些函数可以直接作为全局函数使用。</p>
<h2>click(text[, i])<span><a class="mark" href="#widgets_based_automation_click_text_i" id="widgets_based_automation_click_text_i">#</a></span></h2>
<div class="signature"><ul>
<li><code>text</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要点击的文本</li>
<li><code>i</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 如果相同的文本在屏幕中出现多次则i表示要点击第几个文本, i从0开始计算</li>
</ul>
</div><p>返回是否点击成功。当屏幕中并未包含该文本或者该文本所在区域不能点击时返回false否则返回true。</p>
<p>该函数可以点击大部分包含文字的按钮。例如微信主界面下方的&quot;微信&quot;, &quot;联系人&quot;, &quot;发现&quot;, &quot;&quot;的按钮。<br>通常与while同时使用以便点击按钮直至成功。例如:</p>
<pre><code>while(!click(&quot;扫一扫&quot;));
</code></pre><p>当不指定参数i时则会尝试点击屏幕上出现的所有文字text并返回是否全部点击成功。</p>
<p>i是从0开始计算的, 也就是, <code>click(&quot;啦啦啦&quot;, 0)</code>表示点击屏幕上第一个&quot;啦啦啦&quot;, <code>click(&quot;啦啦啦&quot;, 1)</code>表示点击屏幕上第二个&quot;啦啦啦&quot;</p>
<blockquote>
<p>文本所在区域指的是,从文本处向其父视图寻找,直至发现一个可点击的部件为止。</p>
</blockquote>
<h2>click(left, top, bottom, right)<span><a class="mark" href="#widgets_based_automation_click_left_top_bottom_right" id="widgets_based_automation_click_left_top_bottom_right">#</a></span></h2>
<div class="signature"><ul>
<li><code>left</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要点击的长方形区域左边与屏幕左边的像素距离</li>
<li><code>top</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要点击的长方形区域上边与屏幕上边的像素距离</li>
<li><code>bottom</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要点击的长方形区域下边与屏幕下边的像素距离</li>
<li><code>right</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要点击的长方形区域右边与屏幕右边的像素距离</li>
</ul>
</div><p><strong>注意,该函数一般只用于录制的脚本中使用,在自己写的代码中使用该函数一般不要使用该函数。</strong></p>
<p>点击在指定区域的控件。当屏幕中并未包含与该区域严格匹配的区域或者该区域不能点击时返回false否则返回true。 </p>
<p>有些按钮或者部件是图标而不是文字例如发送朋友圈的照相机图标以及QQ下方的消息、联系人、动态图标这时不能通过<code>click(text, i)</code>来点击可以通过描述图标所在的区域来点击。left, bottom, top, right描述的就是点击的区域。 </p>
<p>至于要定位点击的区域可以在悬浮窗使用布局分析工具查看控件的bounds属性。</p>
<p>通过无障碍服务录制脚本会生成该语句。</p>
<h2>longClick(text[, i]))<span><a class="mark" href="#widgets_based_automation_longclick_text_i" id="widgets_based_automation_longclick_text_i">#</a></span></h2>
<div class="signature"><ul>
<li><code>text</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要长按的文本</li>
<li><code>i</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 如果相同的文本在屏幕中出现多次则i表示要长按第几个文本, i从0开始计算</li>
</ul>
</div><p>返回是否点击成功。当屏幕中并未包含该文本或者该文本所在区域不能点击时返回false否则返回true。</p>
<p>当不指定参数i时则会尝试点击屏幕上出现的所有文字text并返回是否全部长按成功。</p>
<h2>scrollUp([i])<span><a class="mark" href="#widgets_based_automation_scrollup_i" id="widgets_based_automation_scrollup_i">#</a></span></h2>
<div class="signature"><ul>
<li><code>i</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要滑动的控件序号</li>
</ul>
</div><p>找到第i+1个可滑动控件上滑或<strong>左滑</strong>。返回是否操作成功。屏幕上没有可滑动的控件时返回false。</p>
<p>另外不加参数时<code>scrollUp()</code>会寻找面积最大的可滑动的控件上滑或左滑,例如微信消息列表等。 </p>
<p>参数为一个整数i时会找到第i + 1个可滑动控件滑动。例如<code>scrollUp(0)</code>为滑动第一个可滑动控件。</p>
<h2>scrollDown([i])<span><a class="mark" href="#widgets_based_automation_scrolldown_i" id="widgets_based_automation_scrolldown_i">#</a></span></h2>
<div class="signature"><ul>
<li><code>i</code> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 要滑动的控件序号</li>
</ul>
</div><p>找到第i+1个可滑动控件下滑或<strong>右滑</strong>。返回是否操作成功。屏幕上没有可滑动的控件时返回false。</p>
<p>另外不加参数时<code>scrollUp()</code>会寻找面积最大的可滑动的控件下滑或右滑。 </p>
<p>参数为一个整数i时会找到第i + 1个可滑动控件滑动。例如<code>scrollUp(0)</code>为滑动第一个可滑动控件。</p>
<h2>setText([i, ]text)<span><a class="mark" href="#widgets_based_automation_settext_i_text" id="widgets_based_automation_settext_i_text">#</a></span></h2>
<div class="signature"><ul>
<li>i <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 表示要输入的为第i + 1个输入框</li>
<li>text <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要输入的文本</li>
</ul>
</div><p>返回是否输入成功。当找不到对应的文本框时返回false。</p>
<p>不加参数i则会把所有输入框的文本都置为text。例如<code>setText(&quot;测试&quot;)</code></p>
<p>这里的输入文本的意思是把输入框的文本置为text而不是在原来的文本上追加。</p>
<h2>input([i, ]text)<span><a class="mark" href="#widgets_based_automation_input_i_text" id="widgets_based_automation_input_i_text">#</a></span></h2>
<div class="signature"><ul>
<li>i <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 表示要输入的为第i + 1个输入框</li>
<li>text <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要输入的文本</li>
</ul>
</div><p>返回是否输入成功。当找不到对应的文本框时返回false。</p>
<p>不加参数i则会把所有输入框的文本追加内容text。例如<code>input(&quot;测试&quot;)</code></p>
<h1>UiSelector<span><a class="mark" href="#widgets_based_automation_uiselector" id="widgets_based_automation_uiselector">#</a></span></h1>
<p>选择器(UiSelector)是稍微复杂的自动操作脚本所必须。使用选择器的一般步骤是:</p>
<ol>
<li>用各种筛选条件找出想要的控件,如某个文本控件、列表控件、图片控件</li>
<li>对找出的控件执行想要的操作,如点击、滑动、设置文字、长按</li>
</ol>
<p>问题的关键在于如何找出想要的控件。对于文本控件一般通过他的文字来定位他图片控件则通过id或者图片描述(desc)。选择器所做的就是提供这些筛选条件并给出筛选结果。</p>
<p>选择器提供了更强大的定位界面控件与对其进行操作的功能,可以用他们完成更多的自动操作和提取界面信息。<br>选择器通过附加筛选条件,筛选出符合条件的控件或控件集合,之后可以对这些控件这些操作。<br>可供选择的筛选条件包括:</p>
<ul>
<li>id</li>
<li>text 文本</li>
<li>desc 描述(Content-Description)</li>
<li>className 类名</li>
<li>packageName 包名</li>
<li>bounds 在屏幕上的范围</li>
<li>drawingOrder 绘制顺序</li>
<li>各种属性,主要包括:<ul>
<li>clickable 可点击</li>
<li>longClickable 可长按</li>
<li>checkable 可勾选</li>
<li>checked 被勾选</li>
<li>scrollable 可滑动</li>
<li>selected 被选择</li>
<li>editable 可编辑</li>
<li>visibleToUser 可见</li>
<li>enabled 已启用</li>
</ul>
</li>
</ul>
<p>要对选择器所确定的筛选条件对屏幕上的控件进行筛选调用方法find(), findOne(), untilFind()。其中find(), untilFind()返回控件的集合findOne()返回一个控件。untilFind和findOne函数会一直寻找直到屏幕上出现满足条件的控件为止。<br>一个完整的选择器示例如下:</p>
<pre><code>var emoj = id(&quot;name&quot;).packageName(&quot;com.tencent.mobileqq&quot;).clickable()
.className(&quot;ImageView&quot;).drawingOrder(5).findOne();
emoj.click();
</code></pre><p>上述代码是找到QQ聊天界面下面的表情按钮(第5个按钮)并点击。也可以简化为:</p>
<pre><code>id(&quot;name&quot;).packageName(&quot;com.tencent.mobileqq&quot;).clickable()
.className(&quot;ImageView&quot;).click();
</code></pre><p>这段代码意思是找出id为&quot;name&quot;, 包名为&quot;com.tentcent.mobileqq&quot;类名为ImageView的所有可点击控件对他们执行点击动作。</p>
<p>最后的click()函数相当于untilFind().click()。也就是如果只需要在找到控件以后立即进行操作只需要调用相应的操作函数而不需要先调用find等函数等到控件再操作。<br>要获取屏幕上的控件的信息(例如id, text, desc, bounds等),可以开启悬浮窗,使用界面层次查看和界面范围查看。 </p>
<p>选择器部分内容如果有安卓开发经验会更容易掌握。</p>
<h2>id(resId)<span><a class="mark" href="#widgets_based_automation_id_resid" id="widgets_based_automation_id_resid">#</a></span></h2>
<div class="signature"><ul>
<li>resId <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 控件的id&quot;包名:id/&quot;开头,例如&quot;com.tencent.mm:id/send_btn&quot;。也可以不指定包名这时会以当前正在运行的应用的包名来补全id。例如id(&quot;send_btn&quot;),在QQ界面想当于id(&quot;com.tencent.mobileqq:id/send_btn&quot;)。 </li>
</ul>
</div><p>附加id严格匹配筛选条件。</p>
<p>控件的id属性通常是可以用来确定控件的唯一标识如果一个控件有id那么使用id来找到他是最好的方法。要查看屏幕上的控件的id可以开启悬浮窗并使用界面工具点击相应控件即可查看。若查看到的控件id为null, 表示该控件没有id。另外在列表中会出现多个控件的id相同的情况。例如微信的联系人列表每个头像的id都是一样的。此时不能用id来唯一确定控件。</p>
<p>在QQ界面经常会出现多个id为&quot;name&quot;的控件在微信上则每个版本的id都会变化。对于这些软件而言比较难用id定位控件。</p>
<h2>idContains(str)<span><a class="mark" href="#widgets_based_automation_idcontains_str" id="widgets_based_automation_idcontains_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> id要包含的字符串</li>
</ul>
</div><p>附加控件id包含字符串str的筛选条件。</p>
<h2>idStartsWith(prefix)<span><a class="mark" href="#widgets_based_automation_idstartswith_prefix" id="widgets_based_automation_idstartswith_prefix">#</a></span></h2>
<div class="signature"><ul>
<li>prefix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> id前缀</li>
</ul>
</div><p>附加id需要以prefix开头的筛选条件。</p>
<h2>idEndsWith(suffix)<span><a class="mark" href="#widgets_based_automation_idendswith_suffix" id="widgets_based_automation_idendswith_suffix">#</a></span></h2>
<div class="signature"><ul>
<li>suffix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> id后缀</li>
</ul>
</div><p>附加id需要以suffix结束的筛选条件。</p>
<h2>idMatches(String)<span><a class="mark" href="#widgets_based_automation_idmatches_string" id="widgets_based_automation_idmatches_string">#</a></span></h2>
<div class="signature"><ul>
<li>String <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> id要满足的正则表达式</li>
</ul>
</div><p>附加id需要满足正则表达式。有关正则表达式可以查看<a href="http://www.runoob.com/Stringp/Stringp-example.html">菜鸟教程</a></p>
<p>这里的正则表达式是Java的正则表达式不能直接使用JavaScript的正则表达式。</p>
<pre><code>idMatches(&quot;[a-zA-Z]+&quot;)
</code></pre><h2>text(str)<span><a class="mark" href="#widgets_based_automation_text_str" id="widgets_based_automation_text_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 控件文本</li>
</ul>
</div><p>附加控件文本等于字符串str的筛选条件。</p>
<p>控件的text(文本)属性是控件上的显示的文字,例如微信左上角的&quot;微信&quot;文本。对于图片或者其他控件通常text属性为null。</p>
<h2>textContains(str)<span><a class="mark" href="#widgets_based_automation_textcontains_str" id="widgets_based_automation_textcontains_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要包含的字符串</li>
</ul>
</div><p>附加控件文本需要以prefix开头的筛选条件。</p>
<h2>textStartsWith(prefix)<span><a class="mark" href="#widgets_based_automation_textstartswith_prefix" id="widgets_based_automation_textstartswith_prefix">#</a></span></h2>
<div class="signature"><ul>
<li>prefix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 前缀</li>
</ul>
</div><p>附加控件文本需要以prefix开头的筛选条件。</p>
<h2>textEndsWith(suffix)<span><a class="mark" href="#widgets_based_automation_textendswith_suffix" id="widgets_based_automation_textendswith_suffix">#</a></span></h2>
<div class="signature"><ul>
<li>suffix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 后缀</li>
</ul>
</div><p>附加控件文本需要以suffix结束的筛选条件。</p>
<h2>textMatches(str)<span><a class="mark" href="#widgets_based_automation_textmatches_str" id="widgets_based_automation_textmatches_str">#</a></span></h2>
<div class="signature"><ul>
<li>String <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要满足的正则表达式</li>
</ul>
</div><p>附加控件文本需要满足正则表达式的条件。</p>
<h2>desc(str)<span><a class="mark" href="#widgets_based_automation_desc_str" id="widgets_based_automation_desc_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 控件描述</li>
</ul>
</div><p>附加控件描述等于字符串str的筛选条件。</p>
<p>控件的desc(描述全称为Content-Description)属性是对一个控件的描述,例如网易云音乐右上角的放大镜图标的描述为搜索。要查看一个控件的描述,同样地可以借助悬浮窗查看。</p>
<p>desc属性同样是定位控件的利器。</p>
<h2>descContains(str)<span><a class="mark" href="#widgets_based_automation_desccontains_str" id="widgets_based_automation_desccontains_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要包含的字符串</li>
</ul>
</div><p>附加控件描述需要以prefix开头的筛选条件。</p>
<h2>descStartsWith(prefix)<span><a class="mark" href="#widgets_based_automation_descstartswith_prefix" id="widgets_based_automation_descstartswith_prefix">#</a></span></h2>
<div class="signature"><ul>
<li>prefix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 前缀</li>
</ul>
</div><p>附加控件描述需要以prefix开头的筛选条件。</p>
<h2>descEndsWith(suffix)<span><a class="mark" href="#widgets_based_automation_descendswith_suffix" id="widgets_based_automation_descendswith_suffix">#</a></span></h2>
<div class="signature"><ul>
<li>suffix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 后缀</li>
</ul>
</div><p>附加控件描述需要以suffix结束的筛选条件。</p>
<h2>descMatches(str)<span><a class="mark" href="#widgets_based_automation_descmatches_str" id="widgets_based_automation_descmatches_str">#</a></span></h2>
<div class="signature"><ul>
<li>String <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要满足的正则表达式</li>
</ul>
</div><p>附加控件描述需要满足正则表达式的条件。</p>
<h2>className(str)<span><a class="mark" href="#widgets_based_automation_classname_str" id="widgets_based_automation_classname_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 控件类名</li>
</ul>
</div><p>附加控件类名等于字符串str的筛选条件。</p>
<p>控件的className属性是一个控件的具体类型例如图片控件通常为ImageView文本控件通常为TextView, 输入框通常为EditText。(若一个控件是在android.widget包里的那么android.widget可以省略。但除此之外的其他控件必须是类的全名例如&quot;com.stardust.theme.ThemeColorImageView&quot;)。</p>
<h2>classNameContains(str)<span><a class="mark" href="#widgets_based_automation_classnamecontains_str" id="widgets_based_automation_classnamecontains_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要包含的字符串</li>
</ul>
</div><p>附加控件类名需要以prefix开头的筛选条件。</p>
<h2>classNameStartsWith(prefix)<span><a class="mark" href="#widgets_based_automation_classnamestartswith_prefix" id="widgets_based_automation_classnamestartswith_prefix">#</a></span></h2>
<div class="signature"><ul>
<li>prefix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 前缀</li>
</ul>
</div><p>附加控件类名需要以prefix开头的筛选条件。</p>
<h2>classNameEndsWith(suffix)<span><a class="mark" href="#widgets_based_automation_classnameendswith_suffix" id="widgets_based_automation_classnameendswith_suffix">#</a></span></h2>
<div class="signature"><ul>
<li>suffix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 后缀</li>
</ul>
</div><p>附加控件类名需要以suffix结束的筛选条件。</p>
<h2>classNameMatches(str)<span><a class="mark" href="#widgets_based_automation_classnamematches_str" id="widgets_based_automation_classnamematches_str">#</a></span></h2>
<div class="signature"><ul>
<li>String <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要满足的正则表达式</li>
</ul>
</div><p>附加控件类名需要满足正则表达式的条件。</p>
<h2>packageName(str)<span><a class="mark" href="#widgets_based_automation_packagename_str" id="widgets_based_automation_packagename_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 包名</li>
</ul>
</div><p>附加包名等于字符串str的筛选条件。</p>
<p>packageName属性也即控件所属的应用的包名(参见《shell命令:应用包名》),通常用来保证当前运行的应用是想要的应用。</p>
<h2>packageNameContains(str)<span><a class="mark" href="#widgets_based_automation_packagenamecontains_str" id="widgets_based_automation_packagenamecontains_str">#</a></span></h2>
<div class="signature"><ul>
<li>str <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要包含的字符串</li>
</ul>
</div><p>附加包名需要以prefix开头的筛选条件。</p>
<h2>packageNameStartsWith(prefix)<span><a class="mark" href="#widgets_based_automation_packagenamestartswith_prefix" id="widgets_based_automation_packagenamestartswith_prefix">#</a></span></h2>
<div class="signature"><ul>
<li>prefix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 前缀</li>
</ul>
</div><p>附加包名需要以prefix开头的筛选条件。</p>
<h2>packageNameEndsWith(suffix)<span><a class="mark" href="#widgets_based_automation_packagenameendswith_suffix" id="widgets_based_automation_packagenameendswith_suffix">#</a></span></h2>
<div class="signature"><ul>
<li>suffix <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 后缀</li>
</ul>
</div><p>附加包名需要以suffix结束的筛选条件。</p>
<h2>packageNameMatches(str)<span><a class="mark" href="#widgets_based_automation_packagenamematches_str" id="widgets_based_automation_packagenamematches_str">#</a></span></h2>
<div class="signature"><ul>
<li>String <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要满足的正则表达式</li>
</ul>
</div><p>附加包名需要满足正则表达式的条件。</p>
<h2>bounds(l, t, r, b)<span><a class="mark" href="#widgets_based_automation_bounds_l_t_r_b" id="widgets_based_automation_bounds_l_t_r_b">#</a></span></h2>
<div class="signature"><ul>
<li>l, t, r, b 用来定位控件在屏幕上的范围的四个整数</li>
</ul>
</div><h2>boundsInside(l, t, r, b)<span><a class="mark" href="#widgets_based_automation_boundsinside_l_t_r_b" id="widgets_based_automation_boundsinside_l_t_r_b">#</a></span></h2>
<h2>boundsContains(l, t, r, b)<span><a class="mark" href="#widgets_based_automation_boundscontains_l_t_r_b" id="widgets_based_automation_boundscontains_l_t_r_b">#</a></span></h2>
<h2>drawingOrder(order)<span><a class="mark" href="#widgets_based_automation_drawingorder_order" id="widgets_based_automation_drawingorder_order">#</a></span></h2>
<div class="signature"><ul>
<li>order <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 控件在父视图中的绘制顺序,在一些</li>
</ul>
</div><h2>checkable([b = true])<span><a class="mark" href="#widgets_based_automation_checkable_b_true" id="widgets_based_automation_checkable_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否可勾选, 默认为true</li>
</ul>
</div><p>附加控件是否可勾选的条件。可勾选指的是例如QQ和微信发送图片时图片的勾选。</p>
<h2>selected([b = true])<span><a class="mark" href="#widgets_based_automation_selected_b_true" id="widgets_based_automation_selected_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否被选中默认为true</li>
</ul>
</div><p>附加控件是否被选中的条件。被选中指的是例如QQ聊天界面点击下方的表情按钮时会出现自己收藏的表情这时表情按钮便处于选中状态。</p>
<h2>clickable([b = true])<span><a class="mark" href="#widgets_based_automation_clickable_b_true" id="widgets_based_automation_clickable_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否可点击, 默认为true</li>
</ul>
</div><p>附加控件是否可点击的条件。但并非所有clickable为false的控件都真的不能点击这取决于控件的实现。因而要确定一个控件的clickable属性可以开启悬浮窗工具。</p>
<h2>longClickable([b = true])<span><a class="mark" href="#widgets_based_automation_longclickable_b_true" id="widgets_based_automation_longclickable_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否可长按, 默认为true</li>
</ul>
</div><p>附加控件是否可长按的条件。</p>
<h2>enabled([b = true])<span><a class="mark" href="#widgets_based_automation_enabled_b_true" id="widgets_based_automation_enabled_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否已启用, 默认为true</li>
</ul>
</div><p>附加控件是否已启用的条件。大多数控件都是启用的状态,处于“禁用”状态通常是灰色并且不可点击。</p>
<h2>scrollable([b = true])<span><a class="mark" href="#widgets_based_automation_scrollable_b_true" id="widgets_based_automation_scrollable_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否可滑动, 默认为true</li>
</ul>
</div><p>附加控件是否可滑动的条件。</p>
<h2>editable([b = true])<span><a class="mark" href="#widgets_based_automation_editable_b_true" id="widgets_based_automation_editable_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否可编辑, 默认为true</li>
</ul>
</div><p>附加控件是否可编辑的条件。一般来说可编辑的控件为输入框(EditText)。</p>
<h2>contentInvalid([b = true])<span><a class="mark" href="#widgets_based_automation_contentinvalid_b_true" id="widgets_based_automation_contentinvalid_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否是contentInvalid, 默认为true</li>
</ul>
</div><p>我也不知道是什么,下次再补充吧。</p>
<h2>contextClickable([b = true])<span><a class="mark" href="#widgets_based_automation_contextclickable_b_true" id="widgets_based_automation_contextclickable_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示控件是否是contextClickable, 默认为true</li>
</ul>
</div><p>我也不知道是什么,下次再补充吧。</p>
<h2>multiLine([b = true])<span><a class="mark" href="#widgets_based_automation_multiline_b_true" id="widgets_based_automation_multiline_b_true">#</a></span></h2>
<div class="signature"><ul>
<li>b <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type">&lt;Boolean&gt;</a> 表示文本或输入框控件是否是多行显示的, 默认为true</li>
</ul>
</div><p>附加控件是否文本或输入框控件是否是多行显示的条件。</p>
<h2>findOne()<span><a class="mark" href="#widgets_based_automation_findone" id="widgets_based_automation_findone">#</a></span></h2>
<p>根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,直到屏幕上出现满足条件的一个控件为止,并返回该控件。如果找不到控件,当屏幕内容发生变化时会重新寻找,直至找到。参见<a href="#控件">控件</a></p>
<h2>find()<span><a class="mark" href="#widgets_based_automation_find" id="widgets_based_automation_find">#</a></span></h2>
<p>根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,找到所有满足条件的控件集合并返回。这个搜索只进行一次,并不保证一直会找到,因而会出现返回的控件集合为空的情况。参见<a href="#控件集合">控件集合</a></p>
<p>可以通过empty()或nonEmpty()函数判断找到的是否为空。例如:</p>
<pre><code>var c = className(&quot;AbsListView&quot;).find();
if(c.empty()){
toast(&quot;找到啦&quot;);
}else{
toast(&quot;没找到╭(╯^╰)╮&quot;);
}
</code></pre><h2>untilFind()<span><a class="mark" href="#widgets_based_automation_untilfind" id="widgets_based_automation_untilfind">#</a></span></h2>
<p>根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,直到找到至少一个满足条件的控件为止,并返回所有满足条件的控件集合。参见<a href="#控件集合">控件集合</a></p>
<h2>exists()<span><a class="mark" href="#widgets_based_automation_exists" id="widgets_based_automation_exists">#</a></span></h2>
<p>判断屏幕上是否存在控件符合选择器所确定的条件。例如要判断某个文本出现就执行某个动作,可以用:</p>
<pre><code>if(text(&quot;嘿嘿嘿&quot;).exists()){
//嘿嘿嘿
}
</code></pre><h2>waitFor()<span><a class="mark" href="#widgets_based_automation_waitfor" id="widgets_based_automation_waitfor">#</a></span></h2>
<p>等待屏幕上出现符合条件的控件。</p>
<pre><code>text(&quot;嘿嘿嘿&quot;).waitFor();
</code></pre><h2>click()<span><a class="mark" href="#widgets_based_automation_click" id="widgets_based_automation_click">#</a></span></h2>
<p>找到所有符合条件的控件并点击。相当于untilFind().click()。参见<a href="#UiCollection.click(">click</a>)。</p>
<h2>longClick()<span><a class="mark" href="#widgets_based_automation_longclick" id="widgets_based_automation_longclick">#</a></span></h2>
<p>找到所有符合条件的控件并长按。相当于untilFind().longClick()。参见<a href="#UiCollection.longClick(">longClick</a>)。</p>
<h2>copy()<span><a class="mark" href="#widgets_based_automation_copy" id="widgets_based_automation_copy">#</a></span></h2>
<p>找到所有符合条件的控件并复制其内容只对文本框或输入框控件有文字选中时有效。相当于untilFind().copy()。参见<a href="#UiCollection.copy(">copy</a>)。</p>
<h2>paste()<span><a class="mark" href="#widgets_based_automation_paste" id="widgets_based_automation_paste">#</a></span></h2>
<p>找到所有符合条件的控件并粘贴只对输入框控件有效。相当于untilFind().paste()。参见<a href="#UiCollection.paste(">paste</a>)。</p>
<h2>select()<span><a class="mark" href="#widgets_based_automation_select" id="widgets_based_automation_select">#</a></span></h2>
<p>找到所有符合条件的控件并选中。相当于untilFind().select()。参见<a href="#UiCollection.select(">select</a>)。</p>
<h2>cut()<span><a class="mark" href="#widgets_based_automation_cut" id="widgets_based_automation_cut">#</a></span></h2>
<p>找到所有符合条件的控件并剪切其内容只对文本框或输入框控件有文字选中时有效。相当于untilFind().cut()。参见<a href="#UiCollection.cut(">cut</a>)。</p>
<h2>collapse()<span><a class="mark" href="#widgets_based_automation_collapse" id="widgets_based_automation_collapse">#</a></span></h2>
<p>找到所有符合条件的控件并折叠。相当于untilFind().collapse()。参见<a href="#UiCollection.collapse(">collapse</a>)。</p>
<h2>expand()<span><a class="mark" href="#widgets_based_automation_expand" id="widgets_based_automation_expand">#</a></span></h2>
<p>找到所有符合条件的控件并展开。相当于untilFind().expand()。参见<a href="#UiCollection.expand(">expand</a>)。</p>
<h2>show()<span><a class="mark" href="#widgets_based_automation_show" id="widgets_based_automation_show">#</a></span></h2>
<p>找到所有符合条件的控件并使其出现在屏幕上。相当于untilFind().show()。参见<a href="#UiCollection.show(">show</a>)。</p>
<h2>scrollForward()<span><a class="mark" href="#widgets_based_automation_scrollforward" id="widgets_based_automation_scrollforward">#</a></span></h2>
<p>找到所有符合条件的控件并向前滑。相当于untilFind().scrollForward()。参见<a href="#UiCollection.scrollForward(">scrollForward</a>)。<br>向前滑指的是,对于左右滑动的控件向右滑,上下滑动的控件向下滑。</p>
<h2>scrollBackward()<span><a class="mark" href="#widgets_based_automation_scrollbackward" id="widgets_based_automation_scrollbackward">#</a></span></h2>
<p>找到所有符合条件的控件并向后滑。相当于untilFind().scrollBackward()。参见<a href="#UiCollection.scrollBackward(">scrollBackward</a>)。<br>向后滑指的是,对于左右滑动的控件向左滑,上下滑动的控件向上滑。</p>
<h2>scrollUp()<span><a class="mark" href="#widgets_based_automation_scrollup" id="widgets_based_automation_scrollup">#</a></span></h2>
<p>找到所有符合条件的控件并向上滑。相当于untilFind().scrollUp()。参见<a href="#UiCollection.scrollUp(">scrollUp</a>)。</p>
<h2>scrollDown()<span><a class="mark" href="#widgets_based_automation_scrolldown" id="widgets_based_automation_scrolldown">#</a></span></h2>
<p>找到所有符合条件的控件并向下滑。相当于untilFind().scrollDown()。参见<a href="#UiCollection.scrollDown(">scrollDown</a>)。</p>
<h2>scrollLeft()<span><a class="mark" href="#widgets_based_automation_scrollleft" id="widgets_based_automation_scrollleft">#</a></span></h2>
<p>找到所有符合条件的控件并向左滑。相当于untilFind().scrollLeft()。参见<a href="#UiCollection.scrollLeft(">scrollLeft</a>)。</p>
<h2>scrollRight()<span><a class="mark" href="#widgets_based_automation_scrollright" id="widgets_based_automation_scrollright">#</a></span></h2>
<p>找到所有符合条件的控件并向右滑。相当于untilFind().scrollRight()。参见<a href="#UiCollection.scrollRight(">scrollRight</a>)。</p>
<h2>contextClick()<span><a class="mark" href="#widgets_based_automation_contextclick" id="widgets_based_automation_contextclick">#</a></span></h2>
<p>文档缺失</p>
<h2>setSelection(start, end)<span><a class="mark" href="#widgets_based_automation_setselection_start_end" id="widgets_based_automation_setselection_start_end">#</a></span></h2>
<div class="signature"><ul>
<li>start <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 文字选中开始位置</li>
<li>end <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 文字选中结束位置</li>
</ul>
</div><p>找到所有符合条件的控件并设置文字选中区域只对文本控件和输入框有效。相当于untilFind().setSelection()。参见<a href="#UiCollection.setSelection">setSelection</a></p>
<h2>setText(text)<span><a class="mark" href="#widgets_based_automation_settext_text" id="widgets_based_automation_settext_text">#</a></span></h2>
<div class="signature"><ul>
<li>text <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要设置的文本
找到所有符合条件的控件并设置文字只对输入框有效。相当于untilFind().setText()。参见<a href="#UiCollection.setText">setText</a></li>
</ul>
</div><h1>UiCollection<span><a class="mark" href="#widgets_based_automation_uicollection" id="widgets_based_automation_uicollection">#</a></span></h1>
<p>UiCollection, 控件集合, 通过选择器的find(), untilFind()方法返回的对象。可以对其进行操作或者获取其信息。</p>
<h2>UiCollection.size()<span><a class="mark" href="#widgets_based_automation_uicollection_size" id="widgets_based_automation_uicollection_size">#</a></span></h2>
<p>返回集合中的控件数。</p>
<h2>UiCollection.get(i)<span><a class="mark" href="#widgets_based_automation_uicollection_get_i" id="widgets_based_automation_uicollection_get_i">#</a></span></h2>
<div class="signature"><ul>
<li>i <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 索引</li>
</ul>
</div><p>返回集合中第i+1个控件(UiObject)。</p>
<h2>UiCollection.each(func)<span><a class="mark" href="#widgets_based_automation_uicollection_each_func" id="widgets_based_automation_uicollection_each_func">#</a></span></h2>
<div class="signature"><ul>
<li>func \<Function\> 遍历函数</li>
</ul>
</div><p>遍历集合。例如:</p>
<pre><code>var c = clickable();
c.each(function(o){
log(o.text());
});
</code></pre><h2>empty()<span><a class="mark" href="#widgets_based_automation_empty" id="widgets_based_automation_empty">#</a></span></h2>
<p>返回控件集合是否为空。</p>
<h2>nonEmpty()<span><a class="mark" href="#widgets_based_automation_nonempty" id="widgets_based_automation_nonempty">#</a></span></h2>
<p>返回控件集合是否非空。</p>
<h2>UiCollection.filter(filter)<span><a class="mark" href="#widgets_based_automation_uicollection_filter_filter" id="widgets_based_automation_uicollection_filter_filter">#</a></span></h2>
<div class="signature"><ul>
<li>filter \<Function\> 过滤函数。参数为UiObject返回值为Boolean。</li>
</ul>
</div><p>过滤出控件集合中符合条件的子控件。例如要过滤出所有子控件数目为1的控件为</p>
<pre><code>var newCollection = collection.filter(function(obj){
return obj.childCount() == 1;
});
</code></pre><h2>UiCollection.find(selector)<span><a class="mark" href="#widgets_based_automation_uicollection_find_selector" id="widgets_based_automation_uicollection_find_selector">#</a></span></h2>
<div class="signature"><ul>
<li>selector \<UiSelector\> 选择器</li>
</ul>
</div><p>根据selector所确定的条件在该控件集合的控件和<strong>子控件</strong>找到所有符合条件的控件并返回控件集合。</p>
<p>注意这会递归地遍历控件集合里所有的控件以及他们的子控件。和filter函数不同。</p>
<p>例如:</p>
<pre><code>var names = id(&quot;name&quot;);
var clickableNames = names.find(clickable());
</code></pre><h2>UiCollection.findOne(selector)<span><a class="mark" href="#widgets_based_automation_uicollection_findone_selector" id="widgets_based_automation_uicollection_findone_selector">#</a></span></h2>
<div class="signature"><ul>
<li>selector \<UiSelector\> 选择器</li>
</ul>
</div><p>根据selector所确定的条件在该控件集合中找到一个符合条件的控件并返回控件。若找不到则返回null。</p>
<h2>UiCollection.click()<span><a class="mark" href="#widgets_based_automation_uicollection_click" id="widgets_based_automation_uicollection_click">#</a></span></h2>
<p>点击集合中所有控件,并返回是否全部点击成功。</p>
<h2>UiCollection.longClick()<span><a class="mark" href="#widgets_based_automation_uicollection_longclick" id="widgets_based_automation_uicollection_longclick">#</a></span></h2>
<p>长按集合中所有控件,并返回是否全部操作成功。</p>
<h2>UiCollection.copy()<span><a class="mark" href="#widgets_based_automation_uicollection_copy" id="widgets_based_automation_uicollection_copy">#</a></span></h2>
<p>对集合中所有控件执行复制操作,并返回是否全部操作成功。</p>
<h2>UiCollection.paste()<span><a class="mark" href="#widgets_based_automation_uicollection_paste" id="widgets_based_automation_uicollection_paste">#</a></span></h2>
<p>对集合中所有控件执行粘贴操作,并返回是否全部操作成功。</p>
<h2>UiCollection.select()<span><a class="mark" href="#widgets_based_automation_uicollection_select" id="widgets_based_automation_uicollection_select">#</a></span></h2>
<p>对集合中所有控件执行选中操作,并返回是否全部操作成功。</p>
<h2>UiCollection.cut()<span><a class="mark" href="#widgets_based_automation_uicollection_cut" id="widgets_based_automation_uicollection_cut">#</a></span></h2>
<p>对集合中所有控件执行剪切操作,并返回是否全部操作成功。</p>
<h2>UiCollection.collapse()<span><a class="mark" href="#widgets_based_automation_uicollection_collapse" id="widgets_based_automation_uicollection_collapse">#</a></span></h2>
<p>对集合中所有控件执行折叠操作,并返回是否全部操作成功。</p>
<h2>UiCollection.expand()<span><a class="mark" href="#widgets_based_automation_uicollection_expand" id="widgets_based_automation_uicollection_expand">#</a></span></h2>
<p>对集合中所有控件执行展开操作,并返回是否全部操作成功。</p>
<h2>UiCollection.show()<span><a class="mark" href="#widgets_based_automation_uicollection_show" id="widgets_based_automation_uicollection_show">#</a></span></h2>
<p>对集合中所有控件执行显示操作,并返回是否全部操作成功。</p>
<h2>UiCollection.scrollForward()<span><a class="mark" href="#widgets_based_automation_uicollection_scrollforward" id="widgets_based_automation_uicollection_scrollforward">#</a></span></h2>
<p>对集合中所有控件执行向前滑的操作,并返回是否全部操作成功。</p>
<h2>UiCollection.scrollBackward()<span><a class="mark" href="#widgets_based_automation_uicollection_scrollbackward" id="widgets_based_automation_uicollection_scrollbackward">#</a></span></h2>
<p>对集合中所有控件执行向后滑的操作,并返回是否全部操作成功。</p>
<h2>UiCollection.scrollUp()<span><a class="mark" href="#widgets_based_automation_uicollection_scrollup" id="widgets_based_automation_uicollection_scrollup">#</a></span></h2>
<p>对集合中所有控件执行向上滑的操作,并返回是否全部操作成功。</p>
<h2>UiCollection.scrollDown()<span><a class="mark" href="#widgets_based_automation_uicollection_scrolldown" id="widgets_based_automation_uicollection_scrolldown">#</a></span></h2>
<p>对集合中所有控件执行向下滑的操作,并返回是否全部操作成功。</p>
<h2>UiCollection.scrollLeft()<span><a class="mark" href="#widgets_based_automation_uicollection_scrollleft" id="widgets_based_automation_uicollection_scrollleft">#</a></span></h2>
<p>对集合中所有控件执行向左滑的操作,并返回是否全部操作成功。</p>
<h2>UiCollection.scrollRight()<span><a class="mark" href="#widgets_based_automation_uicollection_scrollright" id="widgets_based_automation_uicollection_scrollright">#</a></span></h2>
<p>对集合中所有控件执行向右滑的操作,并返回是否全部操作成功。</p>
<h2>UiCollection.contextClick()<span><a class="mark" href="#widgets_based_automation_uicollection_contextclick" id="widgets_based_automation_uicollection_contextclick">#</a></span></h2>
<h2>UiCollection.setSelection(start, end)<span><a class="mark" href="#widgets_based_automation_uicollection_setselection_start_end" id="widgets_based_automation_uicollection_setselection_start_end">#</a></span></h2>
<div class="signature"><ul>
<li>start <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 文字选中开始位置</li>
<li>end <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 文字选中结束位置</li>
</ul>
</div><p>对集合中所有控件设置文字选中区域,并返回是否全部操作成功。</p>
<h2>UiCollection.setText(text)<span><a class="mark" href="#widgets_based_automation_uicollection_settext_text" id="widgets_based_automation_uicollection_settext_text">#</a></span></h2>
<div class="signature"><ul>
<li>text <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 要设置的文本
对集合中所有控件设置文本,并返回是否全部操作成功。</li>
</ul>
</div><h1>UiObject<span><a class="mark" href="#widgets_based_automation_uiobject" id="widgets_based_automation_uiobject">#</a></span></h1>
<p>控件, 选择器的findOne方法返回的对象。和UiCollection有相似的方法不再赘述。除此之外还有以下方法。</p>
<h2>child(i)<span><a class="mark" href="#widgets_based_automation_child_i" id="widgets_based_automation_child_i">#</a></span></h2>
<div class="signature"><ul>
<li>i <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type">&lt;number&gt;</a> 子控件索引</li>
</ul>
</div><p>返回第i+1个子控件(UiObject)。</p>
<h2>parent()<span><a class="mark" href="#widgets_based_automation_parent" id="widgets_based_automation_parent">#</a></span></h2>
<p>返回父控件(UiObject)。</p>
<h2>children()<span><a class="mark" href="#widgets_based_automation_children" id="widgets_based_automation_children">#</a></span></h2>
<p>返回该控件的所有子控件组成的控件集合。</p>
<h2>childCount()<span><a class="mark" href="#widgets_based_automation_childcount" id="widgets_based_automation_childcount">#</a></span></h2>
<p>返回子控件数目。</p>
<h2>bounds()<span><a class="mark" href="#widgets_based_automation_bounds" id="widgets_based_automation_bounds">#</a></span></h2>
<p>返回控件在屏幕上的范围,其值是一个[Rect]对象。</p>
<h2>boundsInParent()<span><a class="mark" href="#widgets_based_automation_boundsinparent" id="widgets_based_automation_boundsinparent">#</a></span></h2>
<p>返回控件在父控件中的范围,其值是一个[Rect]对象。</p>
<h2>drawingOrder()<span><a class="mark" href="#widgets_based_automation_drawingorder" id="widgets_based_automation_drawingorder">#</a></span></h2>
<p>返回控件的绘制次序。</p>
<h2>id()<span><a class="mark" href="#widgets_based_automation_id" id="widgets_based_automation_id">#</a></span></h2>
<p>返回控件的id可能为null。</p>
<h2>text()<span><a class="mark" href="#widgets_based_automation_text" id="widgets_based_automation_text">#</a></span></h2>
<p>返回控件的文本,如果控件没有文本,返回&quot;&quot;</p>
<h2>findByText(text)<span><a class="mark" href="#widgets_based_automation_findbytext_text" id="widgets_based_automation_findbytext_text">#</a></span></h2>
<div class="signature"><ul>
<li>text <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type">&lt;string&gt;</a> 文本</li>
</ul>
</div><p>根据文本text在子控件中递归地寻找并返回文本或描述(desc)<strong>包含</strong>这段文本text的控件返回它们组成的集合。。</p>
<h2>find(selector)<span><a class="mark" href="#widgets_based_automation_find_selector" id="widgets_based_automation_find_selector">#</a></span></h2>
<div class="signature"><ul>
<li>selector \<UiSelector\> 选择器</li>
</ul>
</div><p>根据选择器selector在子控件中递归地寻找符合条件的控件返回它们组成的集合。</p>
<h2>findOne<span><a class="mark" href="#widgets_based_automation_findone_1" id="widgets_based_automation_findone_1">#</a></span></h2>
<h2>find(selector)<span><a class="mark" href="#widgets_based_automation_find_selector_1" id="widgets_based_automation_find_selector_1">#</a></span></h2>
<div class="signature"><ul>
<li>selector \<UiSelector\> 选择器</li>
</ul>
</div><p>根据选择器selector在子控件中递归地寻找一个符合条件的控件。找不到则返回null。</p>
<h1>Rect<span><a class="mark" href="#widgets_based_automation_rect" id="widgets_based_automation_rect">#</a></span></h1>
<p>UiObject.bounds(), UiObject.boundsInParent()返回的对象。表示一个长方形。</p>
<h2>Rect.left<span><a class="mark" href="#widgets_based_automation_rect_left" id="widgets_based_automation_rect_left">#</a></span></h2>
<p>长方形左边界的x坐标、</p>
<h2>Rect.right<span><a class="mark" href="#widgets_based_automation_rect_right" id="widgets_based_automation_rect_right">#</a></span></h2>
<p>长方形左边界的x坐标、</p>
<h2>Rect.top<span><a class="mark" href="#widgets_based_automation_rect_top" id="widgets_based_automation_rect_top">#</a></span></h2>
<p>长方形上边界的y坐标、</p>
<h2>Rect.bottom<span><a class="mark" href="#widgets_based_automation_rect_bottom" id="widgets_based_automation_rect_bottom">#</a></span></h2>
<p>长方形下边界的y坐标、</p>
<h2>Rect.centerX()<span><a class="mark" href="#widgets_based_automation_rect_centerx" id="widgets_based_automation_rect_centerx">#</a></span></h2>
<p>长方形中点x坐标。</p>
<h2>Rect.centerY()<span><a class="mark" href="#widgets_based_automation_rect_centery" id="widgets_based_automation_rect_centery">#</a></span></h2>
<p>长方形中点y坐标。</p>
<h2>Rect.width()<span><a class="mark" href="#widgets_based_automation_rect_width" id="widgets_based_automation_rect_width">#</a></span></h2>
<p>长方形宽度。通常可以作为控件宽度。</p>
<h2>Rect.height()<span><a class="mark" href="#widgets_based_automation_rect_height" id="widgets_based_automation_rect_height">#</a></span></h2>
<p>长方形高度。通常可以作为控件高度。</p>
<h2>Rect.contains(r)<span><a class="mark" href="#widgets_based_automation_rect_contains_r" id="widgets_based_automation_rect_contains_r">#</a></span></h2>
<div class="signature"><ul>
<li>r \<Rect\> </li>
</ul>
</div><p>返回是否包含另一个长方形r。</p>
<h2>Rect.intersect(r)<span><a class="mark" href="#widgets_based_automation_rect_intersect_r" id="widgets_based_automation_rect_intersect_r">#</a></span></h2>
<div class="signature"><ul>
<li>r \<Rect\> </li>
</ul>
</div><p>返回是否和另一个长方形相交。</p>
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -0,0 +1,79 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Index | Auto.js 2.0.16 文档</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
<link rel="stylesheet" href="assets/style.css">
<link rel="stylesheet" href="assets/sh.css">
<link rel="canonical" href="https://nodejs.org/api/work-with-java.html">
</head>
<body class="alt apidoc" id="api-section-work-with-java">
<div id="content" class="clearfix">
<div id="column2" class="interior">
<div id="intro" class="interior">
<a href="/" title="返回首页">
Auto.js
</a>
</div>
<ul>
<li><a class="nav-documentation" href="documentation.html">关于本文档</a></li>
<li><a class="nav-synopsis" href="synopsis.html">如何阅读本文档</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-overview" href="overview.html">Overview - 综述</a></li>
<li><a class="nav-qa" href="qa.html">Q&amp;A - 常见问题</a></li>
<li><a class="nav-globals" href="globals.html">Globals - 一般全局函数</a></li>
<li><a class="nav-widgets-based-automation" href="widgets-based-automation.html">WidgetsBasedAutomation - 基于控件的触摸模拟</a></li>
<li><a class="nav-coordinates-based-automation" href="coordinates-based-automation.html">CoordinatesBasedAutomation - 基于坐标的触摸模拟</a></li>
<li><a class="nav-images" href="images.html">Images - 图片与图色处理</a></li>
<li><a class="nav-console" href="console.html">Console - 控制台</a></li>
<li><a class="nav-events" href="events.html">Events - 事件与监听</a></li>
<li><a class="nav-timers" href="timers.html">Timers - 定时器</a></li>
<li><a class="nav-shell" href="shell.html">Shell - Shell命令</a></li>
<li><a class="nav-ui" href="ui.html">UI - 用户界面</a></li>
<li><a class="nav-files" href="files.html">Files - 文件系统</a></li>
<li><a class="nav-app" href="app.html">App - 应用</a></li>
<li><a class="nav-engines" href="engines.html">Engines - 脚本引擎</a></li>
<li><a class="nav-modules" href="modules.html">Modules - 模块</a></li>
<li><a class="nav-work-with-java active" href="work-with-java.html">Work with Java - 调用Java API</a></li>
</ul>
<div class="line"></div>
<ul>
<li><a class="nav-https-github-com-hyb1996-NoRootScriptDroid" href="https://github.com/hyb1996/NoRootScriptDroid">GitHub项目 &amp; Issue提交</a></li>
<li><a class="nav-http-autojs-org" href="http://autojs.org">Auto.js交流社区</a></li>
</ul>
</div>
<div id="column1" data-id="work-with-java" class="interior">
<header>
<h1>Auto.js 2.0.16 文档</h1>
<div id="gtoc">
<p>
<a href="index.html" name="toc">索引</a> |
<a href="all.html">查看全部</a>
</p>
</div>
<hr>
</header>
<div id="toc">
<h2>目录</h2>
</div>
<div id="apicontent">
</div>
</div>
</div>
<script src="assets/sh_main.js"></script>
<script src="assets/sh_javascript.min.js"></script>
<script>highlight(undefined, undefined, 'pre');</script>
<!-- __TRACKING__ -->
</body>
</html>

View File

@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.ui.doc;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
@@ -33,16 +34,19 @@ public class OnlineDocsFragment extends ViewPagerFragment implements BackPressed
public OnlineDocsFragment() {
super(ROTATION_GONE);
setArguments(new Bundle());
}
@AfterViews
void setUpViews() {
mWebView = mEWebView.getWebView();
String url = Pref.getDocumentationUrl() + "index.html";
if (getArguments() != null) {
url = getArguments().getString(ARGUMENT_URL, url);
Bundle savedWebViewState = getArguments().getBundle("savedWebViewState");
if (savedWebViewState != null) {
mWebView.restoreState(savedWebViewState);
} else {
mWebView.loadUrl(getArguments().getString(ARGUMENT_URL, url));
}
mWebView.loadUrl(url);
}
@@ -57,6 +61,9 @@ public class OnlineDocsFragment extends ViewPagerFragment implements BackPressed
@Override
public void onPause() {
super.onPause();
Bundle savedWebViewState = new Bundle();
mWebView.saveState(savedWebViewState);
getArguments().putBundle("savedWebViewState", savedWebViewState);
((BackPressedHandler.HostActivity) getActivity())
.getBackPressedObserver()
.unregisterHandler(this);

View File

@@ -1,6 +1,8 @@
package com.stardust.scriptdroid.ui.main;
import android.Manifest;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
@@ -10,17 +12,22 @@ import android.support.annotation.RequiresApi;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.qq.e.comm.DownloadService;
import com.stardust.app.FragmentPagerAdapterBuilder;
import com.stardust.app.OnActivityResultDelegate;
import com.stardust.enhancedfloaty.FloatyService;
import com.stardust.pio.PFile;
import com.stardust.pio.PFiles;
import com.stardust.scriptdroid.BuildConfig;
import com.stardust.scriptdroid.Pref;
@@ -43,11 +50,13 @@ import com.stardust.scriptdroid.ui.update.VersionGuard;
import com.stardust.util.BackPressedHandler;
import com.stardust.view.DrawerAutoClose;
import com.stardust.widget.CommonMarkdownView;
import com.stardust.widget.SearchViewItem;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import org.greenrobot.eventbus.EventBus;
import java.util.Arrays;
@@ -233,7 +242,6 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
return mActivityResultMediator;
}
@Override
public void onBackPressed() {
if (!mBackPressObserver.onBackPressed(this)) {
@@ -246,4 +254,25 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
return mBackPressObserver;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
setUpSearchMenuItem(searchMenuItem);
return true;
}
private void setUpSearchMenuItem(MenuItem searchMenuItem) {
SearchViewItem searchViewItem = new SearchViewItem(this, searchMenuItem);
searchViewItem.setQueryCallback(this::submitQuery);
}
private void submitQuery(String query) {
if (query == null) {
EventBus.getDefault().post(QueryEvent.CLEAR);
return;
}
EventBus.getDefault().post(new QueryEvent(query));
}
}

View File

@@ -0,0 +1,20 @@
package com.stardust.scriptdroid.ui.main;
/**
* Created by Stardust on 2017/10/25.
*/
public class QueryEvent {
public static final QueryEvent CLEAR = new QueryEvent(null);
private final String mQuery;
public QueryEvent(String query) {
mQuery = query;
}
public String getQuery() {
return mQuery;
}
}

View File

@@ -1,5 +1,6 @@
package com.stardust.scriptdroid.ui.main;
import android.support.annotation.CallSuper;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
@@ -15,12 +16,8 @@ public abstract class ViewPagerFragment extends Fragment {
private int mFabRotation;
private FloatingActionButton mFab;
private View.OnClickListener mOnFabClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
onFabClick((FloatingActionButton) v);
}
};
private boolean mShown;
private View.OnClickListener mOnFabClickListener = v -> onFabClick((FloatingActionButton) v);
public ViewPagerFragment(int fabRotation) {
mFabRotation = fabRotation;
@@ -32,7 +29,9 @@ public abstract class ViewPagerFragment extends Fragment {
protected abstract void onFabClick(FloatingActionButton fab);
@CallSuper
public void onPageShow() {
mShown = true;
if (mFabRotation == ROTATION_GONE) {
if (mFab.getVisibility() == View.VISIBLE) {
mFab.hide();
@@ -54,7 +53,12 @@ public abstract class ViewPagerFragment extends Fragment {
}
@CallSuper
public void onPageHide() {
mShown = false;
}
public boolean isShown() {
return mShown;
}
}

View File

@@ -1,10 +1,14 @@
package com.stardust.scriptdroid.ui.main.community;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.webkit.WebView;
import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.ui.main.QueryEvent;
import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
import com.stardust.util.BackPressedHandler;
import com.stardust.widget.EWebView;
@@ -12,7 +16,10 @@ import com.stardust.widget.EWebView;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.net.URLEncoder;
import java.util.regex.Pattern;
/**
@@ -30,12 +37,25 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH
public CommunityFragment() {
super(0);
setArguments(new Bundle());
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@AfterViews
void setUpViews() {
mWebView = mEWebView.getWebView();
mWebView.loadUrl("http://www.autojs.org/");
String url = "http://www.autojs.org/";
Bundle savedWebViewState = getArguments().getBundle("savedWebViewState");
if (savedWebViewState != null) {
mWebView.restoreState(savedWebViewState);
} else {
mWebView.loadUrl(url);
}
}
@Override
@@ -49,6 +69,9 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH
@Override
public void onPause() {
super.onPause();
Bundle savedWebViewState = new Bundle();
mWebView.saveState(savedWebViewState);
getArguments().putBundle("savedWebViewState", savedWebViewState);
((BackPressedHandler.HostActivity) getActivity())
.getBackPressedObserver()
.unregisterHandler(this);
@@ -73,8 +96,24 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH
}
}
@Subscribe
public void submitQuery(QueryEvent event) {
if (!isShown() || event == QueryEvent.CLEAR) {
return;
}
String query = URLEncoder.encode(event.getQuery());
String url = String.format("http://www.autojs.org/search?term=%s&in=titlesposts", query);
mWebView.loadUrl(url);
}
private boolean isInPostsPage() {
String url = mWebView.getUrl();
return url.matches(POSTS_PAGE_PATTERN);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}

View File

@@ -1,6 +1,8 @@
package com.stardust.scriptdroid.ui.main.scripts;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.view.View;
@@ -11,12 +13,15 @@ import com.stardust.scriptdroid.io.StorageFileProvider;
import com.stardust.scriptdroid.tool.SimpleObserver;
import com.stardust.scriptdroid.ui.common.ScriptOperations;
import com.stardust.scriptdroid.ui.main.FloatingActionMenu;
import com.stardust.scriptdroid.ui.main.QueryEvent;
import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
import com.stardust.util.BackPressedHandler;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -37,15 +42,17 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
private FloatingActionMenu mFloatingActionMenu;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@AfterViews
void setUpViews() {
mScriptFileList.setStorageFileProvider(StorageFileProvider.getDefault());
mScriptFileList.setOnScriptFileClickListener(new ScriptListView.OnScriptFileClickListener() {
@Override
public void onScriptFileClick(View view, ScriptFile file) {
Scripts.edit(file);
//EditorFloaty.floatingEdit(getContext(), file);
}
mScriptFileList.setOnScriptFileClickListener((view, file) -> {
Scripts.edit(file);
});
}
@@ -109,11 +116,25 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
@Override
public void onPageHide() {
super.onPageHide();
if (mFloatingActionMenu != null && mFloatingActionMenu.isExpanded()) {
mFloatingActionMenu.collapse();
}
}
@Subscribe
public void onQuerySummit(QueryEvent event) {
if (!isShown()) {
return;
}
if (event == QueryEvent.CLEAR) {
mScriptFileList.setFilter(null);
return;
}
String query = event.getQuery();
mScriptFileList.setFilter((file -> file.getSimplifiedName().contains(query)));
}
@Override
public void onDetach() {
super.onDetach();
@@ -121,6 +142,12 @@ public class MyScriptListFragment extends ViewPagerFragment implements BackPress
mFloatingActionMenu.setOnFloatingActionButtonClickListener(null);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
public void onClick(FloatingActionButton button, int pos) {
switch (pos) {

View File

@@ -17,6 +17,7 @@ import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
import com.stardust.pio.PFile;
import com.stardust.pio.PFiles;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.model.script.ScriptFile;
@@ -34,6 +35,7 @@ import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
/**
@@ -64,6 +66,7 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
private ScriptListAdapter mScriptListAdapter = new ScriptListAdapter();
private ScriptFile mCurrentDirectory;
private OnScriptFileClickListener mOnScriptFileClickListener;
private Function<PFile, Boolean> mFilter;
private OnItemOperatedListener mOnItemOperatedListener;
private ScriptFile mSelectedScriptFile;
private StorageFileProvider mStorageFileProvider;
@@ -126,6 +129,15 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
mDirectorySpanSize = directorySpanSize;
}
public void setFilter(Function<PFile, Boolean> filter) {
mFilter = filter;
reload();
}
public void reload() {
loadScriptList();
}
private void init() {
setOnRefreshListener(this);
mScriptListView = new RecyclerView(getContext());
@@ -160,6 +172,7 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
setRefreshing(true);
mStorageFileProvider.getDirectoryFiles(mCurrentDirectory)
.subscribeOn(Schedulers.io())
.filter(f -> mFilter == null ? true : mFilter.apply(f))
.collectInto(mScriptList.cloneConfig(), (list, file) ->
list.add(new ScriptFile(file))
)

View File

@@ -1,5 +1,6 @@
package com.stardust.scriptdroid.ui.main.task;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.MenuItem;
@@ -50,6 +51,7 @@ public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.
public TaskManagerFragment() {
super(45);
setArguments(new Bundle());
}
@@ -60,6 +62,9 @@ public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.
mNoRunningScriptNotice.setVisibility(noRunningScript ? View.VISIBLE : View.GONE);
mStardustConsole = (StardustConsole) AutoJs.getInstance().getGlobalConsole();
mConsoleView.setConsole(mStardustConsole);
if (getArguments().getBoolean("console_shown", false)) {
showLog();
}
}
private void init() {
@@ -104,6 +109,7 @@ public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.
return true;
}
private void showLog() {
mTaskManagerView.setVisibility(View.GONE);
mConsoleView.setVisibility(View.VISIBLE);
@@ -125,4 +131,10 @@ public class TaskManagerFragment extends ViewPagerFragment implements PopupMenu.
AutoJs.getInstance().getScriptEngineService().stopAll();
}
}
@Override
public void onPause() {
super.onPause();
getArguments().putBoolean("console_shown", mConsoleView.getVisibility() == View.VISIBLE);
}
}

View File

@@ -0,0 +1,72 @@
package com.stardust.widget;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Context;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.view.MenuItem;
import com.stardust.scriptdroid.ui.main.MainActivity;
/**
* Created by Stardust on 2017/10/25.
*/
public class SearchViewItem implements MenuItemCompat.OnActionExpandListener, SearchView.OnQueryTextListener {
public interface QueryCallback {
void summitQuery(String query);
}
private QueryCallback mQueryCallback;
private MenuItem mSearchMenuItem;
public SearchViewItem(Activity activity, MenuItem searchMenuItem) {
mSearchMenuItem = searchMenuItem;
SearchManager searchManager = (SearchManager) activity.getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
if (searchView == null) {
return;
}
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity.getComponentName()));
MenuItemCompat.setOnActionExpandListener(searchMenuItem, this);
searchView.setOnQueryTextListener(this);
}
public void setQueryCallback(QueryCallback queryCallback) {
mQueryCallback = queryCallback;
}
public void setVisible(boolean visible) {
mSearchMenuItem.setVisible(visible);
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
if (mQueryCallback == null) {
return true;
}
mQueryCallback.summitQuery(null);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
if (mQueryCallback == null) {
return true;
}
mQueryCallback.summitQuery(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search_white_36dp"
android:imeOptions="actionSearch"
android:inputType="text"
android:title="@string/text_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView"/>
</menu>

View File

@@ -262,6 +262,7 @@
<string name="apk_builder_package">打包中</string>
<string name="apk_builder_clean">清理临时文件</string>
<string name="text_source_file_path">脚本文件路径</string>
<string name="text_search">搜索</string>
<string-array name="ad_showing_mode_keys">