YYPOST群发软件 发表于 2026-4-9 08:21:23

安卓H5日志打印运行过程例子


安卓H5日志打印运行过程例子






// 🍎交流QQ群:711841924(群)
// 🍎交流QQ群:528816639(安卓内测群)

// 初始化一个activity页面
var ac = new activity();

ac.loadXML(`
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
>
    <WebView
      android:id="@+id/web"
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:layout_weight="1" />
</LinearLayout>
`);

// 延迟确保布局加载完成
sleep.millisecond(400);

// 获取 WebView 组件
var web1 = ac.findWebViewById('web');
// 将WebView对象暴露为全局变量,供主脚本使用
global.web1 = web1;

// 加载本地 HTML 文件(使用绝对路径)
web1.url('/代码/h5.html');

// 三秒倒计时
printl("\n3 秒后启动...");
for (var i = 3; i > 0; i--) {
    printl(i + "...");
    sleep.millisecond(1000);
}
printl("启动完成!\n");

// 导入日志桥接器
Import("LogBridge.js");

// 初始化日志桥接(会阻塞等待WebView加载完成)
LogManagerH5.init(web1, ac);

// 定义 H5 中调用的函数
function test(arg) {
    LogManagerH5.info("我被 H5 调用了,参数是: " + arg);
}

// 定义返回桌面的函数,供H5页面调用
function returnToHome() {
    LogManagerH5.info("执行返回桌面操作");
    // 安卓环境下的返回桌面操作
    if (typeof device !== 'undefined' && device.home) {
      device.home();
    } else {
      LogManagerH5.warn("返回桌面功能在当前环境不可用");
    }
}

// 发送测试日志到H5界面
LogManagerH5.success("系统启动成功");
LogManagerH5.info("WebView已就绪");

// ============================================
// 导入并执行 PrintLogSystem 演示
// ============================================

// 导入并执行 PrintLogSystem 演示
Import("PrintLogSystem.js");

// 延迟执行,确保文件加载完成
sleep.millisecond(100);

// 执行演示(确保 PrintLogSystem.js 已加载)
if (typeof runPrintLogSystemDemo === 'function') {
    runPrintLogSystemDemo();
} else {
    LogManagerH5.error("PrintLogSystem.js 加载失败");
}
/**
* ============================================
* &#127822; print日志系统完整示例
* 功能: 日志记录、调试输出、画中画管理
* 交流QQ群: 711841924 (群一) / 528816639 (苹果内测群)
* ============================================
*/


/**
* ============================================
* 日志桥接器 - 将print日志输出到H5界面
* 版本: 1.1.0
* 平台: Android (AIWROK)
* 功能: 桥接print日志系统到现有H5界面
* 交流QQ群: 711841924 (群一) / 528816639 (安卓内测群)
* ============================================
*/
// &#127822;交流QQ群:711841924(群)
// &#127822;交流QQ群:528816639(安卓内测群)
/**
* 延迟函数 (安卓环境兼容)
* @param {number} ms - 延迟毫秒数
*/
function _sleep(ms) {
    sleep.millisecond(ms);
}

/**
* LogBridge - 日志桥接器
* 将print日志系统的输出桥接到指定的WebView
*/
var LogBridge = {
    webView: null,
    activity: null,
    isReady: false,
    pendingLogs: [],
    maxPendingLogs: 100,
   
    /**
   * 初始化桥接器
   * @param {WebView} webView - 目标WebView实例
   * @param {Activity} activity - 活动实例
   */
    init: function(webView, activity) {
      this.webView = webView;
      this.activity = activity;
      this.isReady = false;
      this.pendingLogs = [];
      
      // 阻塞等待WebView加载完成
      _sleep(800);
      
      this.isReady = true;
      this._flushPendingLogs();
      printl('日志桥接器已就绪');
      
      return this;
    },
   
    /**
   * 发送日志到H5
   * @param {string} message - 日志消息
   * @param {string} level - 日志级别 (info/success/warn/error/gold/debug)
   */
    log: function(message, level) {
      level = level || 'info';
      
      // 如果还没准备好,缓存日志
      if (!this.isReady || !this.webView) {
            if (this.pendingLogs.length < this.maxPendingLogs) {
                this.pendingLogs.push({
                  message: message,
                  level: level,
                  time: Date.now()
                });
            }
            return;
      }
      
      this._sendToWebView(message, level);
    },
   
    /**
   * 刷新缓存的日志
   */
    _flushPendingLogs: function() {
      if (this.pendingLogs.length === 0) return;
      
      printl('正在刷新 ' + this.pendingLogs.length + ' 条缓存日志...');
      
      // 逐条发送缓存的日志
      while (this.pendingLogs.length > 0) {
            var log = this.pendingLogs.shift();
            this._sendToWebView(log.message, log.level);
            // 小延迟避免阻塞
            _sleep(10);
      }
    },
   
    /**
   * 实际发送日志到WebView
   */
    _sendToWebView: function(message, level) {
      try {
            if (!this.webView) return;
            
            // 转义消息中的特殊字符
            var escapedMessage = message
                .replace(/\\/g, '\\\\')
                .replace(/'/g, "\\'")
                .replace(/"/g, '\\"')
                .replace(/\n/g, '\\n')
                .replace(/\r/g, '\\r')
                .replace(/\t/g, '\\t');
            
            // 构建JavaScript代码
            var js = "if(typeof addLog === 'function') { addLog('" + escapedMessage + "', '" + level + "'); }";
            
            // 保存当前对象的引用
            var self = this;
            
            // 在主线程执行WebView操作
            if (this.activity && typeof this.activity.runOnUiThread === 'function') {
                this.activity.runOnUiThread(function() {
                  try {
                        // 尝试多种方式执行JavaScript
                        if (typeof self.webView.evaluateJavaScript === 'function') {
                            self.webView.evaluateJavaScript(js);
                        } else if (typeof self.webView.loadUrl === 'function') {
                            var url = 'javascript:' + encodeURIComponent(js);
                            self.webView.loadUrl(url);
                        } else if (typeof self.webView.stringByEvaluatingJavaScriptFromString === 'function') {
                            self.webView.stringByEvaluatingJavaScriptFromString(js);
                        } else {
                            // 安卓环境下的备用方法
                            try {
                              self.webView.injectScript(js);
                            } catch (e) {
                              printl('WebView执行JavaScript失败: ' + e.message);
                            }
                        }
                  } catch (e) {
                        printl('发送日志失败: ' + e.message);
                  }
                });
            } else {
                // 如果没有activity对象,直接执行(可能会失败)
                try {
                  if (typeof this.webView.evaluateJavaScript === 'function') {
                        this.webView.evaluateJavaScript(js);
                  } else if (typeof this.webView.loadUrl === 'function') {
                        var url = 'javascript:' + encodeURIComponent(js);
                        this.webView.loadUrl(url);
                  } else if (typeof this.webView.stringByEvaluatingJavaScriptFromString === 'function') {
                        this.webView.stringByEvaluatingJavaScriptFromString(js);
                  } else {
                        // 安卓环境下的备用方法
                        try {
                            this.webView.injectScript(js);
                        } catch (e) {
                            printl('WebView执行JavaScript失败: ' + e.message);
                        }
                  }
                } catch (e) {
                  printl('发送日志失败: ' + e.message);
                }
            }
      } catch (e) {
            printl('发送日志失败: ' + e.message);
      }
    },
   
    // 快捷方法
    info: function(message) { this.log(message, 'info'); },
    success: function(message) { this.log(message, 'success'); },
    warn: function(message) { this.log(message, 'warn'); },
    error: function(message) { this.log(message, 'error'); },
    gold: function(message) { this.log(message, 'gold'); },
    debug: function(message) { this.log(message, 'debug'); }
};

/**
* 增强版LogManager - 自动桥接到H5
*/
var LogManagerH5 = {
    logLevel: 'DEBUG',
    enablePrefix: true,
    bridge: null,
   
    ICONS: {
      DEBUG: '',
      INFO: '',
      WARN: '',
      ERROR: '',
      SUCCESS: '',
      GOLD: ''
    },
   
    /**
   * 初始化并绑定到WebView
   * @param {WebView} webView - H5的WebView实例
   * @param {Activity} activity - 活动实例
   */
    init: function(webView, activity) {
      this.bridge = LogBridge;
      this.bridge.init(webView, activity);
      this.info('日志系统已连接到H5界面');
      return this;
    },
   
    _formatMessage: function(message, icon) {
      if (this.enablePrefix && icon) {
            return icon + ' ' + message;
      }
      return message;
    },
   
    debug: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.DEBUG), 'debug');
      }
      printl(message);
    },
   
    info: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.INFO), 'info');
      }
      printl(message);
    },
   
    warn: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.WARN), 'warn');
      }
      printl(message);
    },
   
    error: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.ERROR), 'error');
      }
      printl(message);
    },
   
    success: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.SUCCESS), 'success');
      }
      printl(message);
    },
   
    gold: function(message) {
      if (this.bridge) {
            this.bridge.log(this._formatMessage(message, this.ICONS.GOLD), 'gold');
      }
      printl(message);
    }
};

/**
* 使用示例:
*
* // 在你的主脚本中:
* Import("LogBridge.js");
*
* var web = new WebView();
* web.show();
* web.loadFile('h5.html');
*
* // 初始化日志桥接 (会阻塞等待WebView加载)
* LogManagerH5.init(web);
*
* // 现在所有日志都会输出到H5界面
* LogManagerH5.info('系统启动');
* LogManagerH5.success('任务完成');
* LogManagerH5.gold('获得100金币');
*/
/**
* ============================================
* &#127822; print日志系统完整示例
* 功能: 日志记录、调试输出、画中画管理
* 交流QQ群: 711841924 (群一) / 528816639 (苹果内测群)
* ============================================
*/

页: [1]
查看完整版本: 安卓H5日志打印运行过程例子