自定义Gradle插件+ASM修改字节码文件+无痕埋点

文章简介

这是本人第一次写技术博客,逻辑可能不是很清楚,所以先把别人的博客地址引入过来,提供大家参考https://www.jianshu.com/p/c2c1d350d245 ,具体概念知识,这个文章已经说得差不多了,我就不复制粘贴了,感兴趣的自己点链接进去瞅一眼

遗留问题

1. gradle插件的依赖(第一次写asm修改字节码文件的时候,卡壳时间最长的点),这个地方出现问题,googl后大部分回答是我没有翻墙,但是实际情况是我已经翻墙了,这让我很迷茫,到现在还是没有搞清楚

project下build   classpath 'com.android.tools.build:gradle:3.0.1' 可以下载,但是放到buildSrc中就不可以下载  搞不懂classpath引用的插件具体位置是在哪里 

2.gradle在build的时候并不是每次都会构建的,需要手动把app文件夹下的build目录删除之后才会从新构建,如果有人想看asm修改后的字节码文件到底是啥样需要在构建之前clean一下,或者在终端执行gradlew clean 指令(修改后的字节码文件是放在app/intermediates/classes文件夹下,建议新建一个项目测试,公司项目可能目录改变了)

 

正文

自定义Gradle插件

 1. 新建一个纯净的项目  创建一个moudle(命名为buildSrc) 

 2. 删除mould中的文件保证文件目录如下图所示,然后编译即可

    

 

  3. buildSrc目录下新建一个build.gradle文件 ,为buildSrc配置编译环境

       复制如下代码到buildSrc 的build.gradle中 然后同步下

 apply plugin: 'groovy'
   apply plugin: 'maven'
   dependencies {
      compile gradleApi()
       compile localGroovy()
   }
   repositories {
    mavenCentral()
   }
  
4.此时基本已经大功告成,只差一步,告诉主工程我们要将这个gradle插件强行插入
  1. 在buildSrc中新建一波文件

此时要注意两点1. main下边要是groovy目录 2 . TestPlugin.groovy 是一个groovy文件,

   接下来是TestPlugin内部 //重点 要注意不要导错包哦

package com.plugin
​
import org.gradle.api.Plugin
import org.gradle.api.Project
​
class TestPlugin implements Plugin<Project> {
    @Override
    void apply(Project o) {
        println("------test ---------")
    }
}

8.最后就是告诉项目这个gradle地址了

apply plugin: com.plugin.TestPlugin//注意没有引号,这个地址就是TestPlugin包的位置

9.构建下你的工程,你会发现神奇的事情发生了,在你的构建信息那里,会出现我们打印的那个test,如果成功的话,恭喜你,如果没有成功,请想办法联系我,哈哈..

 

ASM修改字节码文件

写在前面...

这时候请确保你的android studio可以翻墙下载gradle插件,不然你会被gradle搞的焦头烂额,如果你实在不知道android studio怎么配置翻墙,请先百度完然后再联系我,

 

难点 : 个人感觉这里边的难点就是依赖包的下载,其他的所有函数都是可以上网百度到的

所以本文主要描述如何配置依赖,以及gradle插件的下载问题,,其他的大家可以去https://www.jianshu.com/p/c2c1d350d245这位老哥已经写得很清楚了.照着做就可以了

 

 

project 的build.gradle

示例

buildscript {
    
    repositories {
        google()
        jcenter()
        mavenLocal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}
​
allprojects {
    repositories {
        google()
        jcenter()
        mavenLocal()
    }
   
}
​
task clean(type: Delete) {
    delete rootProject.buildDir
}
​

buildscript中的声明是gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件、maven仓库地址等,,gradle在执行脚本时,会优先执行buildscript代码块中的内容,然后才会执行剩余的build脚本。

并且在buildscript中的dependencies是可以支持classpath这样的依赖的

我也不知道这个classpath依赖包下载的地址是什么样的.

allprojects 直接声明的依赖项、仓库地址等信息是项目自身需要的资源

 

好,上面就是一些有的没有的,跟主题没有什么关系的废话,我们从现在开始切入正题

1.在buildSrc中新建一个build.gradle文件然后复制如下代码(注意:::::::::: compile'com.android.tools.build:gradle:3.2.1' 这个gradle插件的版本号要跟你项目使用的插件版本号保持一致)

apply plugin: 'groovy'
​
apply plugin: 'maven'
​
dependencies {
    compile gradleApi()
    compile localGroovy()
    compile 'com.android.tools.build:gradle:3.2.1'
    compile 'org.ow2.asm:asm-all:5.2'
}
​
repositories {
    jcenter()
    maven { url 'https://maven.google.com' }
    google()
    mavenLocal()
    mavenCentral()
​
}

2.编译,让他下载asm就可以了

 

3.可能出现的错误 gradle下载不下来 可能你下载的版本不对, 去https://maven.google.com这个仓库,找找看看有没有你需要的那个gradle 如果有,请确认你的 项目gralde版本号,和buildSrc下的版本号是否一致,如果还是有问题请再次确认,你的android studio是否配置代理, (只有电脑开代理好像是没有用的 ,百度android studio 配置代理)

如果还是有问题,请联系我,我们一起探索这个问题出在哪里

 

文章的最后

我的如果有问题,请加我的QQ 392081135  可能不能及时的收到您的消息,但是如果我看到,会立马回复,还有,第一次写博客,可能不是很好,望见谅..

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值