【懒人精灵】多功能悬浮窗日志插件和类模块

功能介绍

此插件原作者为雪落。

飞云在原版的基础上,做了深度改动和优化,增加了懒人精灵的面向对象类模块的封装。

采用apk插件形式调用。
有倒计时、任务标题、缩放按钮、滚动日志、进度条、底部信息条、右下角关闭按钮等功能区。每个子模块可独立设置隐藏。

点击右下角的控制按钮,可停止脚本。

显示效果

file

全屏效果

file

类模块

local floatLogClass = {}
floatLogClass.__index = floatLogClass

import('java.lang.*')
import('com.nx.assist.lua.LuaEngine')
import('java.lang.Runnable')

-- 构造函数
-- 注意:不能用在最高权限中
function floatLogClass:new(options)
    local self = setmetatable({}, floatLogClass)

    if tostring(LuaEngine.getContext().getClass()):find('main%.engine') then
        error('UI无法在最高权限运行,请关闭最高权限!')
    end

    -- 尝试加载插件
    local pluginLoader = LuaEngine.loadApk(options.apkPath or options.apkName) -- 从路径加载,或者从rc资源里加载
    self.pluginClass = pluginLoader.loadClass('com.log.LrLog')()
    if self.pluginClass == nil then
        error('日志插件加载失败')
    end

    -- 初始化服务
    local context = LuaEngine.getContext()
    self.pluginClass.setContext(context) -- 初始化

    -- 获取屏幕宽度和高度
    self.screenWidth, self.screenHeight = getDisplaySize()

    -- 设置默认配置
    local defaultConfig = {
        left = 0,
        top = (self.screenHeight - math.floor(self.screenHeight / 7)) / 2,
        width = math.floor(self.screenWidth / 4),
        height = math.floor(self.screenHeight / 7),
        topFontSize = 8,
        bottomFontSize = 8,
        isShowTimes = true,
        isShowTitle = true,
        isMinBtn = true,
        isShowProgressBar = false,
        isBottomInfo = false,
        isControlBtn = false,
        isPrintContent = true,
        stopCallback = nil,
        logFontSize = 8,
        infoColor = 0xFFFFFFFF,
        errolColor = 0xFFFF0000,
        warningColor = 0xFFFFA500,
        successColor = 0xFF00FF00,
        debugColor = 0xFF00FFFF
    }

    -- 合并配置
    if options then
        for k, v in pairs(options) do
            defaultConfig[k] = v
        end
    end

    -- 将最终配置应用到 self
    for k, v in pairs(defaultConfig) do
        self[k] = v
    end

    -- print(self)
    ---------------------------------------------------------------

    -- 此时对象还未完全初始化
    LuaEngine.runOnUIThread(
        Runnable {
            run = function()
                xpcall(
                    function()
                        -- 创建和显示窗口
                        self.pluginClass.show(
                            self.left,
                            self.top,
                            self.width,
                            self.height,
                            self.topFontSize,
                            self.bottomFontSize,
                            self.isShowTimes,
                            self.isShowTitle,
                            self.isMinBtn,
                            self.isShowProgressBar,
                            self.isBottomInfo,
                            self.isControlBtn
                        )
                        -- 设置停止按钮回调
                        self.pluginClass.setOnStopCallback(
                            Runnable {
                                run = function()
                                    if self.stopCallback then
                                        xpcall(
                                            self.stopCallback,
                                            function(e)
                                                print(e)
                                            end
                                        )
                                    end
                                end
                            }
                        )
                    end,
                    function(e)
                        print('UI Error: ' .. tostring(e))
                    end
                )
            end
        }
    )

    return self
end

--[[
    @description 运行在UI线程
]]
function floatLogClass:runOnUIThread(func, ...)
    local p = {...}
    LuaEngine.runOnUIThread(
        Runnable {
            run = function()
                xpcall(
                    func,
                    function(e)
                        print(e)
                    end,
                    table.unpack(p)
                )
            end
        }
    )
end

-- 设置底部信息
function floatLogClass:setInfo(str)
    if not self.isBottomInfo then
        return
    end
    self:runOnUIThread(
        function()
            self.pluginClass.setInfo(str)
        end
    )
end

function floatLogClass:setTitle(str)
    if not self.isShowTitle then
        return
    end
    self:runOnUIThread(
        function()
            self.pluginClass.setTitle(str)
        end
    )
end

function floatLogClass:setProgress(str)
    if not self.isShowProgressBar then
        return
    end
    self:runOnUIThread(
        function()
            self.pluginClass.setProgress(str)
        end
    )
end

-- 打印日志的原始方法
function floatLogClass:addLog(str, color, fontSize)
    self:runOnUIThread(
        function()
            self.pluginClass.addLog(str, color, fontSize)
        end
    )
end

function floatLogClass:logd(str)
    self:addLog(str, self.debugColor, self.logFontSize)
end

function floatLogClass:logi(str)
    self:addLog(str, self.infoColor, self.logFontSize)
end

function floatLogClass:logw(str)
    self:addLog(str, self.warningColor, self.logFontSize)
end

function floatLogClass:logs(str)
    self:addLog(str, self.successColor, self.logFontSize)
end

function floatLogClass:loge(str)
    self:addLog(str, self.errolColor, self.logFontSize)
end

return floatLogClass

调用方法

local floatPluginModule = require(FloatLogPlugin')
logPlugin = floatPluginModule:new({
    apkName = 'app-release.apk',
    isBottomInfo = true,  -- 是否显示底部信息
    isControlBtn = true,  -- 是否显示控制按钮
    isShowProgressBar = true,  -- 是否显示进度条
    stopCallback = function()
        print('停止任务')
        exitScript()
    end
})

logPlugin:setInfo('关100,赞99,藏666')

for i = 1, 1000 do
    logPlugin:setTitle('我标题'..i)
    logPlugin:setProgress(i)
    sleep(1000)

     -- 使用不同级别的日志
     if i % 5 == 0 then
        logPlugin:loge('错误日志 - 第'..i..'次循环')
    elseif i % 4 == 0 then
        logPlugin:logw('警告日志 - 第'..i..'次循环')
    elseif i % 3 == 0 then
        logPlugin:logs('成功日志 - 第'..i..'次循环')
    elseif i % 2 == 0 then
        logPlugin:logi('信息日志 - 第'..i..'次循环')
    else
        logPlugin:logd('调试日志 - 第'..i..'次循环')
    end
end

相关内容

自定义悬浮日志模块FloatLogWindow,带计时功能可用于程序日志显示

插件下载

暂无

1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】多功能悬浮窗日志插件和类模块

企业级大数据智能营销管理系统

源码转让