美文网首页
借助Gradle如何分析类的依赖路径

借助Gradle如何分析类的依赖路径

作者: SMSM | 来源:发表于2018-03-02 18:45 被阅读32次

    捡瓶子能赚1个亿,两个说法,哪个更具有吸引力
    赚1个亿,捡瓶子
    捡瓶子,赚一个1亿

    如何做分享?目标先行,大纲如下
    groovy语法、gradle构建流程、打包流程、实际应用。由后往前推,采用问题连接下个阶段。

    实际应用

    目标:

    1. 借助Plugin整理类的依赖关系
    2. 借助Plugin搜索Jar哪些类中包含『关键字』

    猜猜目标plugin有哪些用途?

    思路:

    1. 遍历Java每一行判断是否包含该『关键字』
    2. 但是Jar中的是class二进制文件,不是Java文件。有以下两个方案
      • class转化为Java后,扫描(pass,路径长,效率低)
      • 直接解析class文件(ok)
        • class文件的格式:魔数、常量池、Class信息区包含interface和super等、属性区、方法区。常量池是为了减少class文件大小而设计的,集合该类全部的字符,减少重复字符,达到压缩的目的。

    总结:

    解析Jar中class文件,遍历常量池中字符,是否包含该『关键字』,存在则输出该class全类名

    那么问题来了:

    从哪里能获得该工程依赖的所有的aar、jar文件?

    打包流程

    1. Android打包流程,java -> class -> dex&_ap -> apk。但是完整的打包流程是什么呢?
    2. 【打包流程图】
    3. 由此可知需要hook Dex流程

    那么问题来了

    但是对应打包流程的哪个阶段 ?

    gradle基础构建流程

    1. 【./gradlew assembleDebug 日志】 http://aci.sankuai.com/view/%E4%B8%9A%E5%8A%A1%E9%A2%91%E9%81%93/job/erp/view/boss/job/erp_boss_assemble/10329/console
    2. 看task任务tree,认识task,圈出来是哪个task对应上面的打包流程。
    3. 如何新建一个task?action是什么?
    4. tasktree是什么时候生成的?构建的3个阶段,初始化、tasktree、执行。
    5. gradle、project、task、action、extensions概念(app、activity、xmllayout中view、view的绘制流程顺序、主题样式等配置)

    groovy语法

    闭包

    如何自定义plugin

    定义plugin
    发布

    附件资料
    GradleAndroid简介
    https://guides.gradle.org/building-android-apps/
    Gradle构建生命周期
    https://docs.gradle.org/4.5/userguide/build_lifecycle.html
    Android打包流程
    https://juejin.im/entry/58b78d1b61ff4b006cd47e5b

    相关文章

      网友评论

          本文标题:借助Gradle如何分析类的依赖路径

          本文链接:https://www.haomeiwen.com/subject/rhraxftx.html