Lens

Project Url: iqiyi/Lens
Introduction: 功能简介:一种开发帮助产品研发的效率工具。主要提供了:页面分析、任务分析、网络分析、DataDump、自定义 hook 、Data Explorer 等功能。以帮助开发、测试、UI 等同学更便捷的排查和定位问题,提升开发效率。
More: Author   ReportBugs   
Tags:

简介(wiki 搭建中)

Lens 是一款功能强大的 Android 开发 SDK。目前支持界面分析,任务分析, 网络分析,DataDump,DataExplorer 等等功能。网络分析、任务分析等功能需要依赖 hook 框架。Lens 自身不支持 hook 能力,需注入 Lens Hook Framework 实现后,才可使用 hook 相关的功能。

Lens 是一个开放平台,任何可以为产品开发阶段赋能的创意,都可以作为一个独立的模块向里面添加。
Lens 是一个框架,它提供了将 app 内部数据直观展示出来的方案,也提供了若干接口,让 APP 层可以定制展示自己需要的内容。(后面的 wiki 再进一步说明)

Lens 自 18 年 8 月创建,我们旨在为开发、测试、UI 赋能。Lens 并不完善,代码也有待优化,欢迎小伙伴们提出建议。

基础功能简介(详情见 wiki)

Lens 是以浮窗形式展示在 APP 上的。支持最小化模式、展开模式、关闭模式。浮窗可以在界面中随意拖动。浮窗中的任何一个功能模块,都支持在设置中打开或关闭,也可以在初始化代码中配置。
img img

界面分析
  • 页面信息:展示页面的基本信息,如当前 Activity、Fragment 嵌套关系等。展示页面视图层级关系、分析页面视图情况等。
  • 视图拾取:打开视图拾取开关后,点击页面视图,可选中视图。在界面上将会展示视图的基本信息,例如尺寸标注。控件的关键属性等。点击控件,可进入视图详情页面,进一步分析。
    img img
    任务分析
    Lens 提供了接口,支持展示任一阶段内的任务执行的情况。支持 Time Gap、Time Stamp,Threads Info 信息展示。
    img
网络分析

Lens 提供了接口,支持抓取到的网络请求信息。支持设置测试环境等。

DataExplorer

入口再 Lens 浮窗DB, SP. 目前支持查看本 app DB、SP 信息。 支持修改 SP 数据。

DataDump

Lens 提供了接口,支持 app 的一些内部数据展示能力。用于更好的去分析、定位问题。Lens 内部实现了一些基本的数据 dump 能力。也支持 app 层自己实现定制化的 data dump 数据对接。内部文件浏览功能正在开发中。
img

对象监控

Lens 支持关注任意对象。被关注的对象将会再浮窗模块中显示。点击对象可查看该对象的属性信息.
img

Setup

dependencies {
    debugImplementation 'com.iqiyi.lens:lens:1.2.4'
    releaseImplementation 'com.iqiyi.lens:lens-no-op:1.2.4'
}

Usage

  1. 可参考 Demo 中 LensApplicationDelegate 实现配置。(Wiki 中会详细说明方法含义) 在主进程 Application#attachBaseContext 中添加如下代码:
    Lens.init(this, false);
    
    在主进程 Application#OnCreate 中添加如下代码
    LensUtil.buildConfig()
                 .defaultOpen(false)
    //                .enableDeviceInfo(true)
    //                .enableKeyLog(KeyLogConfig.builder().addFilter("Main").setMaxLine(1000))
    //                .enableFPS(true)
    //                .enableLaunchTime(true)
    //                .setHookFrameWorkImpl(new HookFramework())
                 .enableActivityAnalyzer(true)
                 .enableNetworkAnalyze(false)
                 .enableCrashInfo(true)
                 .addCustomBlockEntrance(customBlockEntrance, new BlockFactory())
                 .addCustomJumpEntrance(customJumpEntrance, new JumpAction())
                 .initAsPluginMode(Lens.isSDKMode())
                 .enableViewInfo(true)
                 .show(Lens.wrapContext(mApplication), UIUtils.getScreenWidth(mApplication) / 5 * 3);
    

License

Apache-2.0 License

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools