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

2018-03-02  本文已影响32人  SMSM

捡瓶子能赚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

上一篇下一篇

猜你喜欢

热点阅读