hwq911128 发表于 2023-3-31 16:48:02

怎么可以获取系统日志?

如题,火山安卓怎么可以获取系统日志?

创世魂 发表于 2023-3-31 18:45:02

这个肯定要root权限,而且你的知道日志在什么地方存储才行。

hwq911128 发表于 2023-3-31 20:47:52

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

我看别人通过甲壳虫adb给app读取日志权限就可以啊,不用root,火山里没有日志操作类,是没封装吗?

xrea 发表于 2023-4-1 21:38:58

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));   //捕获日志
                @                           BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream()));    //将捕获内容转换为BufferedReader
                @
                @                           String str=null;
                @                           while((str=bufferedReader.readLine())!=null)    //开始读取日志,每次读取一行
                @                           {
                @                                 Runtime.getRuntime().exec(clearLog.toArray(new String));//清理日志....这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到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:02

xrea 发表于 2023-4-1 21:38
可以参考我这个:




虽然看不懂 还是感谢感谢

老板这是你写的吗?怎么不直接封装一个啊

hwq911128 发表于 2023-4-1 22:02:51

xrea 发表于 2023-4-1 21:38
可以参考我这个:




能给个模块吗?

xrea 发表于 2023-4-2 10:42:24

hwq911128 发表于 2023-4-1 22:02
能给个模块吗?

摘抄下不就得了,写个模块太麻烦了

hwq911128 发表于 2023-4-2 16:21:34

xrea 发表于 2023-4-2 10:42
摘抄下不就得了,写个模块太麻烦了

关键是没这基础,看不懂啊
页: [1]
查看完整版本: 怎么可以获取系统日志?