递归火山软件开发平台

标题: 怎么可以获取系统日志? [打印本页]

作者: hwq911128    时间: 2023-3-31 16:48
标题: 怎么可以获取系统日志?
如题,火山安卓怎么可以获取系统日志?
作者: 创世魂    时间: 2023-3-31 18:45
这个肯定要root权限,而且你的知道日志在什么地方存储才行。

作者: hwq911128    时间: 2023-3-31 20:47
创世魂 发表于 2023-3-31 18:45
这个肯定要root权限,而且你的知道日志在什么地方存储才行。

我看别人通过甲壳虫adb给app读取日志权限就可以啊,不用root,火山里没有日志操作类,是没封装吗?
作者: xrea    时间: 2023-4-1 21:38
hwq911128 发表于 2023-3-31 20:47
我看别人通过甲壳虫adb给app读取日志权限就可以啊,不用root,火山里没有日志操作类,是没封装吗? ...

可以参考我这个:

<火山程序 类型 = "通常" 版本 = 1 />

包 com.log.app

类 启动类 <公开 基础类 = 窗口 注释 = "" 注释 = "声明读取权限" "//@安卓.附加清单" = 常用窗口附加清单.安卓5无标题白色窗口 @安卓.权限需求 = 安卓权限.读系统日志
        @java.导入 = "java.io.BufferedReader\n java.io.InputStreamReader\n java.util.ArrayList">
{
    变量 编辑框_日志输出 <类型 = 编辑框 隐藏值属性 = "0"
            @安卓.窗口.布局 = "layout_weight = 90\np_layout_height_type = p_specified\np_layout_height_value = 0\np_layout_width_type = match_parent"
            单行模式 = 假>
    变量 按钮_开始获取系统日志 <类型 = 按钮 隐藏值属性 = "0"
            @安卓.窗口.布局 = "ctrl_order = 1\nlayout_weight = 10\np_horz_align = center_horizontal\np_layout_height_type = p_specified\np_layout_height_value = 0\np_layout_width_type = match_parent\np_vert_align = center_vertical\ntext = 开始获取系统日志">
    变量 ""
    变量 成员变量_获取日志线程对象 <类型 = 线程类>

    方法 线程类_线程启动 <接收事件 类型 = 整数 注释 = "线程已经启动事件" 注释 = "注意: 此事件的处理方代码将在多线程环境下执行,必须处理好多线程冲突问题.">
    参数 来源对象 <类型 = 线程类 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    参数 用户对象1 <类型 = 对象类 注释 = "提供调用启动方法时所提供的第1个用户对象">
    参数 用户对象2 <类型 = 对象类 注释 = "提供调用启动方法时所提供的第2个用户对象">
    {
        如果 (来源对象 == 成员变量_获取日志线程对象)
        {
            调试输出 ("线程启动")
            判断循环 (真)
            {
                @   try
                @                         {
                @                             ArrayList<String> cmdLine=new ArrayList<String>();   //设置命令   logcat -d 读取日志
                @                             cmdLine.add("logcat");
                @                             cmdLine.add("-d");
                @
                @                             ArrayList<String> clearLog=new ArrayList<String>();  //设置命令  logcat -c 清除日志
                @                             clearLog.add("logcat");
                @                             clearLog.add("-c");
                @
                @                             Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()]));   //捕获日志
                @                             BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream()));    //将捕获内容转换为BufferedReader
                @
                @                             String str=null;
                @                             while((str=bufferedReader.readLine())!=null)    //开始读取日志,每次读取一行
                @                             {
                @                                 Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()]));  //清理日志....这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到bufferreader满
                @                                 //System.out.println(str);    //输出,在logcat中查看效果,也可以是其他操作,比如发送给服务器..
                // 内容显示到编辑框中,不过这种写法在安卓中是不推荐的!
                变量 日志内容 <类型 = 文本型>
                @ @<日志内容> = str;
                本对象.编辑框_日志输出.添加内容行 (日志内容)
                @                             }
                @                             if(str==null)
                @                             {
                @                                 //System.out.println("--   is null   --");
                调试输出 ("-- is null --")
                @                             }
                @                         }
                @                         catch(Exception e)
                @                         {
                @                             e.printStackTrace();
                @                         }
                @

            }
        }
        返回 (0)
    }

    方法 按钮_被单击 <接收事件 类型 = 整数 注释 = "用户在组件上单击事件" 注释 = "注意:"
            注释 = "  1. \"按钮\"类别及\"图片按钮\"组件会自动初始设置\"支持单击\"属性为真,不需要单独设置;"
            注释 = "  2. 除开上述类别组件外,必须将组件的\"支持单击\"属性设置为真才会发送本事件.">
    参数 来源对象 <类型 = 按钮 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    {
        如果 (来源对象 == 按钮_开始获取系统日志)
        {
            调试输出 ("%b", 成员变量_获取日志线程对象.启动 (, ))
        }
        返回 (0)
    }
}

作者: hwq911128    时间: 2023-4-1 22:01
xrea 发表于 2023-4-1 21:38
可以参考我这个:

虽然看不懂 还是感谢感谢

老板这是你写的吗?怎么不直接封装一个啊
作者: hwq911128    时间: 2023-4-1 22:02
xrea 发表于 2023-4-1 21:38
可以参考我这个:

能给个模块吗?
作者: xrea    时间: 2023-4-2 10:42
hwq911128 发表于 2023-4-1 22:02
能给个模块吗?

摘抄下不就得了,写个模块太麻烦了
作者: hwq911128    时间: 2023-4-2 16:21
xrea 发表于 2023-4-2 10:42
摘抄下不就得了,写个模块太麻烦了

关键是没这基础,看不懂啊




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4