控制台 - Console

## Console > Stability: 2 - Stable 控制台模块提供了一个和Web浏览器中相似的用于调试的控制台。用于输出一些调试信息、中间结果等。 console模块中的一些函数也可以直接作为全局函数使用,例如log, print等。 ## console.show() 显示一个控制台的悬浮窗(需要悬浮窗权限)。 ## console.show(autoHide) >w autoX新增 显示一个控制台的悬浮窗(需要悬浮窗权限)。 - autoHide {boolean} 是否自动隐藏,默认false 当程序结束的时候,是否自动隐藏控制台。 ```javascript console.show(true); //程序结束自动 隐藏控制台 console.show(); //结束不会自动隐藏控制台 ``` ## console.hide() 隐藏控制台悬浮窗。 ## console.clear() 清空控制台。 ## console.log([data][, ...args]) - data {any} - ...args {any} 打印到控制台,并带上换行符。 可以传入多个参数,第一个参数作为主要信息,其他参数作为类似于 printf(3) 中的代替值(参数都会传给 util.format())。 ```javascript const count = 5; console.log('count: %d', count); // 打印: count: 5 到 stdout console.log('count:', count); // 打印: count: 5 到 stdout ``` 详见 util.format()。 该函数也可以作为全局函数使用。 ## console.verbose([data][, ...args]) data {any} ...args {any} 与console.log类似,但输出结果以灰色字体显示。输出优先级低于log,用于输出观察性质的信息。 ## console.info([data][, ...args]) - data {any} - ...args {any} 与console.log类似,但输出结果以绿色字体显示。输出优先级高于log, 用于输出重要信息。 ## console.warn([data][, ...args]) - data {any} - ...args {any} 与console.log类似,但输出结果以蓝色字体显示。输出优先级高于info, 用于输出警告信息。 ## console.error([data][, ...args]) - data {any} - ...args {any} 与console.log类似,但输出结果以红色字体显示。输出优先级高于warn, 用于输出错误信息。 ## console.assert(value, message) - value {any} 要断言的布尔值 - message {string} value为false时要输出的信息 断言。如果value为false则输出错误信息message并停止脚本运行。 ```javascript var a = 1 + 1; console.assert(a == 2, "加法出错啦"); ``` ## console.time([label]) [v4.1.0新增] - label {String} 计时器标签,可省略 启动一个定时器,用以计算一个操作的持续时间。 定时器由一个唯一的 label 标识。 当调用 console.timeEnd() 时,可以使用相同的 label 来停止定时器,并以毫秒为单位将持续时间输出到控制台。 重复启动同一个标签的定时器会覆盖之前启动同一标签的定时器。 ## console.timeEnd(label) [v4.1.0新增] - label {String} 计时器标签 停止之前通过调用 console.time() 启动的定时器,并打印结果到控制台。 调用 console.timeEnd() 后定时器会被删除。如果不存在标签指定的定时器则会打印 NaNms。 ```javascript console.time('求和'); var sum = 0; for(let i = 0; i < 100000; i++){ sum += i; } console.timeEnd('求和'); // 打印 求和: xxx ms ``` ## console.trace([data][, ...args]) [v4.1.0新增] ```javascript data {any} ...args {any} ``` 与console.log类似,同时会打印出调用这个函数所在的调用栈信息(即当前运行的文件、行数等信息)。 ```javascript console.trace('Show me'); // 打印: (堆栈跟踪会根据被调用的跟踪的位置而变化) // Show me // at <test>:7 ``` ## console.input(data[, ...args]) - data {any} - ...args {any} 与console.log一样输出信息,并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串用eval计算后返回。 **部分机型可能会有控制台不显示输入框的情况,属于bug。** 例如: ```javascript var n = console.input("请输入一个数字:"); //输入123之后: toast(n + 1); //显示124 ``` ## console.rawInput(data[, ...args]) - data {any} - ...args {any} 与console.log一样输出信息,并在控制台显示输入框等待输入。按控制台的确认按钮后会将输入的字符串直接返回。 **部分机型可能会有控制台不显示输入框的情况,属于bug。** 例如: ```javascript var n = console.rawInput("请输入一个数字:"); //输入123之后: toast(n + 1); //显示1231 ``` ## console.setSize(w, h) - w {number} 宽度 - h {number} 高度 - 设置控制台的大小,单位像素。 ```javascript console.show(); //设置控制台大小为屏幕的四分之一 console.setSize(device.width / 2, device.height / 2); ``` ## console.setPosition(x, y) - x {number} 横坐标 - y {number} 纵坐标 设置控制台的位置,单位像素。 ```javascript console.show(); console.setPosition(100, 100); ``` ## console.setGlobalLogConfig(config) [v4.1.0新增] - config {Object} 日志配置,可选的项有: 1. file {string} 日志文件路径,将会把日志写入该文件中 2. maxFileSize {number} 最大文件大小,单位字节,默认为512 * 1024 (512KB) 3. rootLevel {string} 写入的日志级别,默认为"ALL"(所有日志),可以为"OFF"(关闭), "DEBUG", "INFO", "WARN", "ERROR", "FATAL"等。 4. maxBackupSize {number} 日志备份文件最大数量,默认为5 5. filePattern {string} 日志写入格式,参见PatternLayout 设置日志保存的路径和配置。例如把日志保存到"/sdcard/1.txt": ```javascript console.setGlobalLogConfig({ "file": "/sdcard/1.txt" }); ``` 注意该函数会影响所有脚本的日志记录。 ## print(text) - text {string} | {Object} 要打印到控制台的信息 相当于log(text)。 ## console.setTitle(title,color,size) >w [v4.2.5新增] >w title不能为null或者undefind,否则会报错 (飞云) - title {string} 标题 - color {string} 颜色值 #AARRGGBB - size {number} 标题高度,字号会随高度变化,单位是dp 设置标题名称,字体颜色,标题栏高度 ```javascript console.setTitle("中文","#ff11ee00",30); console.setTitle("中文"); console.setTitle("中文","#ff11ee00"); ``` ## console.setLogSize(size) >w [v4.2.5新增] - size {number} 字号大小,单位是dp或sp 20以内比较合适 设置log字号大小 需要在显示控制台之后才能设置,否则空指针 ```javascript function myrandom(min,max){ return Math.floor(Math.random() * (max - min + 1) ) + min; } threads.start(function () { console.show(); console.setTitle("中文","#ff11ee00",30); console.setCanInput(false); var i=0; do { console.setLogSize(myrandom(4,20) ); console.setCanInput(i%2==0); i++; console.log("i----->"+i); sleep(3000); } while (true); }); ``` ## console.setCanInput(can) >w [v4.2.5新增] - can {boolean} true 或 false 可以输入或不可以输入 控制 console 是否可以输入文字 ```javascript console.setCanInput(false); ``` ## console.setBackgroud(color) >w [v4.2.5新增] - color {string} 颜色值 #AARRGGBB 设置 console 背景色,需要在显示控制台之后才能设置,否则空指针 ```javascript console.setBackgroud("#33ef0000"); ``` ## console.setMaxLines(maxLines); >w [v5.0.2新增] - maxLines {number} 最大行数 如 10 行 设置 console 显示最大行数,默认-1,不限 ,超出行数系统会清空,从0开始显示 不限制,显示列表过长,android内存又不足,系统会回收console的引用,即console 将不显示。 ```javascript console.setMaxLines(500); ``` # 示例 ## 保存日志 ```js console.setGlobalLogConfig({ file: "/sdcard/log.txt" }); console.log(1); console.log(2); console.error(3); app.viewFile("/sdcard/log.txt"); ``` ## 产生随机数 ```js console.show(); log("将产生5个1到100的随机数"); for(let i = 0; i < 5; i++){ print(random(1, 100)); print(" "); sleep(400); } print("\n"); log("将产生10个1到20的不重复随机数"); var exists = {}; for(let i = 0; i < 10; i++){ var r; do{ r = random(1, 20); }while(exists[r]); exists[r] = true; print(r + " "); sleep(400); } ``` ## 格式化输出 ```js console.show(); var i = { name: "小明", age: 18, height: 1.72 }; console.log("大家好, 我叫%s, 今年%d岁, 身高%d米", i.name, i.age, i.height); console.log("实际上我是一个对象啦,长这样子: %j", i); ``` ## 控制台示例 ```js //显示控制台 console.show(); console.verbose("这是灰色"); console.log("这是黑色"); console.info("这是红色"); console.warn("这是蓝色"); console.error("这是绿色=_="); hey(); function hey() { console.trace("打印日志行数"); } ``` ## 调整控制台大小位置 ```js console.show(); console.log("调整大小..."); console.setSize(1000, 1000); sleep(2000); console.log("调整位置..."); console.setPosition(0, 500); sleep(2000); console.hide(); ``` ## 终端模拟器 ```js var sh = new Shell(); sh.setCallback({ onOutput: function(str){ print(str); } }) console.show(); do { var cmd = console.rawInput(); sh.exec(cmd); }while(cmd != "exit"); sh.exit(); ```