Apache License 2.0

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

GitHub 仓库 “getActivity/Logcat” 深度技术分析

项目背景与痛点

在 Android 开发过程中,日志打印是开发者调试应用时的重要手段。然而传统的日志查看方式,如通过命令行工具或使用 Android Studio 中的日志窗口,存在诸多不便。特别是在手机设备上直接查看日志,不仅效率低下,还易受到其他日志的干扰。此时,getActivity/Logcat 应运而生,解决了这一痛点,使得开发人员能在设备上实时查看并过滤相关日志信息。

核心技术揭秘

getActivity/Logcat 通过巧妙的设计,实现了灵活的日志查看和过滤功能。其核心技术如下:

技术栈

  • Kotlin: 该框架采用了 Kotlin 语言进行开发,充分利用了 Kotlin 的现代特性,如扩展函数、协程等,提高了开发效率和代码的可读性。
  • Retrofit: 用于网络请求,处理日志的远程同步。
  • Material Design: 提供了优雅的 UI 界面,使得查看日志更为直观。

架构设计

该框架主要采用了 MVP 设计模式,实现了视图层(View)、模型层(Model)、**以及****逻辑层(Presenter)**的职责分离。具体架构图如下:

graph TD A[用户发起日志请求] --> B{"日志来源过滤与解析"} B -->|"过滤通过" | C[预处理日志信息] B -->|"过滤未通过" | D[日志丢弃] C --> E{"逻辑层处理"} E -->|"同步任务" | F[日志同步模块] E -->|"异步任务" | G[背景任务执行] G --> H[用户结果反馈] F --> H

整体框架结构清晰,层次分明,大幅提升了开发者使用上的便捷性。

实现原理

日志信息通过 Android 系统提供的 Logcat 命令获取,通过过滤函数对日志源进行筛选。系统日志通过统一入口传入,经过模型层的过滤后,交由逻辑层处理,逻辑层负责同步和异步任务的协调,最终将结果呈现给用户。

功能亮点与差异

相较同类竞品,getActivity/Logcat 在手机设备上的实时日志查看与预处理功能独树一帜。摒弃老旧的日志查看方式,提供一种轻量、高效、实时的日志分析工具,特别是在进行多终端联动测试时可以大大提升效率。此外,其优化的日志过滤功能,让用户能够即时获取特定条件下的日志消息,对于应用的调试和问题定位异常重要。

应用场景与落地建议

在生产环境中应用 getActivity/Logcat,建议重点关注以下几个方面:

  • 环境兼容性: 检查您当前使用的设备是否兼容getActivity/Logcat的具体版本。
  • 性能监控: 实时监控其在生产环境中的运行使用,特别是日志处理的性能反应。
  • 日志丰富度: 根据具体业务需求,进行日志模板和过滤条件的定制化配置,以确保捕捉到所需日志信息并尽量减少无关信息的干扰。

此工具特别适用于需要进行多终端实时日志查看和分析的大中型开发团队。

综合评价

优点

  • 日志实时展示功能,极大提升了设备间日志信息的交互效率。
  • 易用性,符合 Material Design 的标准,UI 易于上手。
  • 功能的定制化强,特别适合复杂环境下日志信息的收集与处理。

缺点

  • 目前版本对于一些特定机型的支持度有待提升。
  • 社区反馈显示,偶尔会出现同步延迟的情况,对于实时性强的环境需要改进。

总的来说,getActivity/Logcat 是一款有着高实用性的工具,尤其适用于寻求高效日志处理方案的开发者团队,但其在使用体验的个别细节方面还有待完善。

简要分析

热度分
1243
价值分
632
活跃状态
活跃

语言占比

Java

Release

README

English Doc

日志查看框架

集成步骤
  • 如果你的项目 Gradle 配置是在 7.0 以下,需要在 build.gradle 文件中加入
allprojects {
    repositories {
        // JitPack 远程仓库:https://jitpack.io
        maven { url 'https://jitpack.io' }
    }
}
  • 如果你的 Gradle 配置是 7.0 及以上,则需要在 settings.gradle 文件中加入
dependencyResolutionManagement {
    repositories {
        // JitPack 远程仓库:https://jitpack.io
        maven { url 'https://jitpack.io' }
    }
}
  • 配置完远程仓库后,在项目 app 模块下的 build.gradle 文件中加入远程依赖
android {
    // 支持 JDK 1.8 及以上
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    // 日志调试框架:https://github.com/getActivity/Logcat
    debugImplementation 'com.github.getActivity:Logcat:13.2'
}
Support 库兼容
  • 方案一:沿用旧版本框架的远程依赖
dependencies {
    // 日志调试框架:https://github.com/getActivity/Logcat
    debugImplementation 'com.github.getActivity:Logcat:12.5'
}
  • 方案二:如果你的项目仍处于 Support 阶段,目前不方便转到 AndroidX 中来,但又想用最新版本的框架,可以使用 Google 提供的 JetifierStandalone 工具将已发布版本 Release 中的 aar 包通过反向模式转成 Support 版本的 aar 包来使用。

  • 上述两种方案任选其一即可,但是仍旧不推荐你那样做,因为这些只是权宜之计,并非长久之计,框架后续的版本已不再支持 Support 项目,最好的方案是将项目迁移到 AndroidX。

  • 将项目从 Support 迁移 AndroidX 相关的教程:AndroidX 踩坑指南

compileSdk 版本要求
  • 如果项目的 compileSdkVersion 小于 34,则需要先升级成 34
android {
    compileSdkVersion 34
}
  • 如果项目的 compileSdkVersion 大于等于 34,则不需要修改此配置
编译报错处理
  • 如果你的项目在引用框架依赖之后,出现以下的编译报错
AAPT: error: unexpected element <property> found in <manifest><application><service>.
  • 则证明是项目使用的 Gradle 及 Android Gradle Plugin 版本太低导致的,请将 Gradle 升级到 gradle-7.4-all 及以上版本,并将 Android Gradle Plugin 升级到 7.1.0 及以上版本
使用方式
  • 无需调用,直接运行,然后授予悬浮窗权限即可

  • 在 debug 模式下运行即可,在 release 正式打包的时不会集成本库,尽管放心

框架的具体用法请点击这里查看

框架亮点
  • 只需集成,无需调用

  • 日志长按可复制分享

  • 支持将日志保存到本地

  • 长日志点击可收缩展开显示

  • 日志搜索结果支持文本高亮

  • 支持对指定 TAG 的日志屏蔽

  • 多个相同 TAG 日志自动合并显示

  • 仅在 Debug 下集成,无需手动初始化

作者的其他开源项目
微信公众号:Android轮子哥

Android 技术 Q 群:10047167
如果您觉得我的开源库帮你节省了大量的开发时间,请扫描下方的二维码随意打赏,要是能打赏个 10.24 :monkey_face:就太:thumbsup:了。您的支持将鼓励我继续创作:octocat:(点击查看捐赠列表)

License

Copyright 2020 Huang JinQun

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

评论

暂无评论