Globals - 一般全局函数
<p>[TOC]</p>
<h1>全局变量与函数</h1>
<p>全局变量和函数在所有模块中均可使用。 但以下变量的作用域只在模块内,详见 <a href="modules.html">module</a>:</p>
<ul>
<li>exports</li>
<li>module</li>
<li>require()
以下的对象是特定于 Auto.js 的。 有些内置对象是 JavaScript 语言本身的一部分,它们也是全局的。</li>
</ul>
<p>一些模块中的函数为了使用方便也可以直接全局使用,这些函数在此不再赘述。例如timers模块的setInterval, setTimeout等函数。</p>
<h2>sleep(n)</h2>
<ul>
<li><code>n</code> {number} 毫秒数</li>
</ul>
<p>暂停运行n<strong>毫秒</strong>的时间。1秒等于1000毫秒。</p>
<pre><code>//暂停5秒
sleep(5000);</code></pre>
<h2>currentPackage() 当前包名</h2>
<ul>
<li>返回 {string}</li>
</ul>
<p>返回最近一次监测到的正在运行的应用的包名,一般可以认为就是当前正在运行的应用的包名。</p>
<p>此函数依赖于无障碍服务,如果服务未启动,则抛出异常并提示用户启动。</p>
<h2>currentActivity() 当前activity活动名</h2>
<ul>
<li>返回 {string}</li>
</ul>
<p>返回最近一次监测到的正在运行的Activity的名称,一般可以认为就是当前正在运行的Activity的名称。</p>
<p>此函数依赖于无障碍服务,如果服务未启动,则抛出异常并提示用户启动。</p>
<h2>setClip(text)</h2>
<ul>
<li><code>text</code> {string} 文本 复制</li>
</ul>
<p>设置剪贴板内容。此剪贴板即系统剪贴板,在一般应用的输入框中"粘贴"既可使用。</p>
<pre><code>setClip("剪贴板文本");</code></pre>
<h2>getClip()</h2>
<ul>
<li>返回 {string} </li>
</ul>
<p>返回系统剪贴板的内容。</p>
<pre><code>toast("剪贴板内容为:" + getClip());</code></pre>
<h2>toast(message)</h2>
<ul>
<li>message {string} 要显示的信息</li>
</ul>
<p>以气泡显示信息message几秒。(具体时间取决于安卓系统,一般都是2秒)</p>
<p>注意,信息的显示是"异步"执行的,并且,不会等待信息消失程序才继续执行。如果在循环中执行该命令,可能出现脚本停止运行后仍然有不断的气泡信息出现的情况。
例如:</p>
<pre><code>for(var i = 0; i < 100; i++){
toast(i);
}</code></pre>
<p>运行这段程序以后,会很快执行完成,且不断弹出消息,在任务管理中关闭所有脚本也无法停止。
要保证气泡消息才继续执行可以用:</p>
<pre><code>for(var i = 0; i < 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 < 100; i++){
toast(i);
}</code></pre>
<h2>toastLog(message)</h2>
<ul>
<li>message {string} 要显示的信息</li>
</ul>
<p>相当于<code>toast(message);log(message)</code>。显示信息message并在控制台中输出。参见console.log。</p>
<h2>waitForActivity(activity[, period = 200])</h2>
<ul>
<li><code>activity</code> Activity名称</li>
<li><code>period</code> 轮询等待间隔(毫秒)</li>
</ul>
<p>等待指定的Activity出现,period为检查Activity的间隔。</p>
<h2>waitForPackage(package[, period = 200])</h2>
<ul>
<li><code>package</code> 包名</li>
<li><code>period</code> 轮询等待间隔(毫秒)</li>
</ul>
<p>等待指定的应用出现。例如<code>waitForPackage("com.tencent.mm")</code>为等待当前界面为微信。</p>
<h2>exit()</h2>
<p>立即停止脚本运行。</p>
<p>立即停止是通过抛出<code>ScriptInterrupttedException</code>来实现的,因此如果用<code>try...catch</code>把exit()函数的异常捕捉,则脚本不会立即停止,仍会运行几行后再停止。</p>
<h2>random(min, max)</h2>
<ul>
<li><code>min</code> {number} 随机数产生的区间下界</li>
<li><code>max</code> {number} 随机数产生的区间上界</li>
<li>返回 {number}</li>
</ul>
<p>返回一个在[min...max]之间的随机数。例如random(0, 2)可能产生0, 1, 2。</p>
<h2>random()</h2>
<ul>
<li>返回 {number}</li>
</ul>
<p>返回在[0, 1)的随机浮点数。</p>
<h2>requiresApi(api)</h2>
<ul>
<li><code>api</code> Android版本号</li>
</ul>
<p>表示此脚本需要Android API版本达到指定版本才能运行。例如<code>requiresApi(19)</code>表示脚本需要在Android 4.4以及以上运行。</p>
<p>调用该函数时会判断运行脚本的设备系统的版本号,如果没有达到要求则抛出异常。</p>
<p>可以参考以下Android API和版本的对照表:</p>
<p>平台版本: API级别</p>
<p>Android 7.0: 24</p>
<p>Android 6.0: 23</p>
<p>Android 5.1: 22</p>
<p>Android 5.0: 21</p>
<p>Android 4.4W: 20</p>
<p>Android 4.4: 19</p>
<p>Android 4.3: 18</p>
<h2>requiresAutojsVersion(version)</h2>
<ul>
<li><code>version</code> {string} | {number} Auto.js的版本或版本号</li>
</ul>
<p>表示此脚本需要Auto.js版本达到指定版本才能运行。例如<code>requiresAutojsVersion("3.0.0 Beta")</code>表示脚本需要在Auto.js 3.0.0 Beta以及以上运行。</p>
<p>调用该函数时会判断运行脚本的Auto.js的版本号,如果没有达到要求则抛出异常。</p>
<p>version参数可以是整数表示版本号,例如<code>requiresAutojsVersion(250)</code>;也可以是字符串格式表示的版本,例如"3.0.0 Beta", "3.1.0 Alpha4", "3.2.0"等。</p>
<p>可以通过<code>app.autojs.versionCode</code>和<code>app.autojs.versionName</code>获取当前的Auto.js版本号和版本。</p>
<h2>runtime.requestPermissions(permissions)</h2>
<ul>
<li><code>permissions</code> {Array} 权限的字符串数组</li>
</ul>
<p>动态申请安卓的权限。例如:</p>
<pre><code>//请求GPS权限
runtime.requestPermissions(["access_fine_location"]);</code></pre>
<p>尽管安卓有很多权限,但必须写入Manifest才能动态申请,为了防止权限的滥用,目前Auto.js只能额外申请两个权限:</p>
<ul>
<li><code>access_fine_location</code> GPS权限</li>
<li><code>record_audio</code> 录音权限</li>
</ul>
<p>您可以通过APK编辑器来增加Auto.js以及Auto.js打包的应用的权限。</p>
<p>安卓所有的权限列表参见<a href="https://developer.android.com/guide/topics/permissions/overview">Permissions Overview</a>。(并没有用)</p>
<h2>runtime.loadJar(path)</h2>
<ul>
<li><code>path</code> {string} jar文件路径</li>
</ul>
<p>加载目标jar文件,加载成功后将可以使用该Jar文件的类。</p>
<pre><code>// 加载jsoup.jar
runtime.loadJar("./jsoup.jar");
// 使用jsoup解析html
importClass(org.jsoup.Jsoup);
log(Jsoup.parse(files.read("./test.html")));</code></pre>
<p>(jsoup是一个Java实现的解析Html DOM的库,可以在<a href="https://jsoup.org/download">Jsoup</a>下载)</p>
<h2>runtime.loadDex(path)</h2>
<ul>
<li><code>path</code> {string} dex文件路径</li>
</ul>
<p>加载目标dex文件,加载成功后将可以使用该dex文件的类。</p>
<p>因为加载jar实际上是把jar转换为dex再加载的,因此加载dex文件会比jar文件快得多。可以使用Android SDK的build tools的dx工具把jar转换为dex。</p>
<h2>context</h2>
<p>全局变量。一个android.content.Context对象。</p>
<p>注意该对象为ApplicationContext,因此不能用于界面、对话框等的创建。</p>