安卓Gradle插件开发-ASM字节码修改-AutoRegister实现4

上面我们完成了transform的基本扫描 我们回顾一下


image.png

我们看到扫描出来的要么是jar包要么是路径目录,但是其实我们的目的是拿到class文件
所以我们下一步是拿到所有的类文件 然后打印出来 我们看看怎么做吧

  /**
     * 扫描jar包所有class文件
     * @param file
     */
    private void scanJar(File file){
          //通过jar包的file对象获取一个jar包对象
          def jarFile=new JarFile(file)
        def enumeration = jarFile.entries()
        //通过遍历获取class 然后打印出来 我们试试 记住先上传
        while (enumeration.hasMoreElements()){
            def jarEntry = enumeration.nextElement()
            def entryName = jarEntry.name
            project.logger.error('class---'+entryName)
        }


    }

上传然后测试

image.png

我们这里可以看到 我们已经能遍历出这些jar包里面的文件 我们再打一下 归属把 比如他们各自在哪个jar包里面

出现一个问题


image.png

R.jar被占用了 其实是因为我们上次扫描 这个jar包没有关闭 所以导致了资源占用 !!!!

解决方法就是加一下close

这个问题 我猜测还是jar包占用 我们可以直接用命令行看看

gradlew assembleDebug --stacktrace

image.png

这里有一个jarInput 因为我们是直接从上面复制下来的 我们改一下

刚刚弄其他去了 抱歉 我们继续

这样打印有点煞笔 我们重新来

image.png

基本可以看出来是哪些文件 很明显很多jar包我们没有必要去扫描 比如安卓自带的androdx里面的 ,
我们可以过滤掉他们
我发现androidx开头的太多了 而且都是我们不需要的 而且我们想想 我们还需要处理android开头的 兼容一下旧版本
我们直接写成这样把

image.png

我们发现过滤完就剩这些


image.png

其实了解jar包的同学都知道 META-INF这些都是jar包的签名文件 保证安全和监听jar包变化的对我们来说也是多余的 也可以过滤掉

image.png

我们会发现这里居然一个jar包都没扫描 其实很容易理解 我们没用第三方 也没有其他module所以的确jar包真的都只有android自带的

还有一点我们需要了解 就是其实我们这里做了一个操作打开jar包 扫描jar包第一个文件 这个操作是耗时的,有没有优化方案 ,这个需要大家去观察一下安卓自带jar包的命名方式 ,然后通过正则表达式在遍历jar包之前就可以过滤,提高我们插件的速度

下面我们要找的class文件就剩下在这里了
image.png

下节课讲bye

我们接着上节课来 上节课遍历完jar包的class 我们这节课把目录里面的class也遍历出来

image.png

通过这里可以看到 我们找到我们app项目的主要代码了 对吧 比如这个MainActivity.class
但是其实BuildConfig.class这个对我们来说是多余的 我们不需要处理他 我们也可以选择过滤一下

这里我们先不做处理 我们要做的是 完成一些代码的注入 和注册

我们回到这个课程一开始部分 我们打开autoregister

image.png

这一部分代码 就是我们要让我们插件自动完成的部分

现在我们先要定义一下这些类和接口 然后通过transform遍历找到对应的类和接口

首先来定义一下

image.png

我们自定义了一下这些类和接口
接下来我们先执行一下扫描

image.png

观察一下这些类的特点

已经扫描出来了 但是他们的连接方式都是通过""符号来的 对吧

我们的目标类 CategoryManager我们可以轻易找到 ,但是CategoryA我们要把它注入到CategoryManager中

类似于这样


image.png

当然这个ICategory接口是我们需要类的依据

所以我们首先是要找到这个接口的实现类 比如CategoryA这要怎么做 这要借助于ASM
对类进行访问和修改,就是基于字节码修改 都非常方便

具体怎么做 我们接下来就要做
先暂停 我们下课 有空继续

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352