安卓代码修复框架Patch(1)

2019-07-25  本文已影响0人  呵呵_9e25

安卓代码修复框架Patch

只支持程序重启修复,不支持热修复

markdown

代码原理

代码实现

1.自定义生成补丁的gradle 插件

自定义gradle插件,网上有很多文章,我这边用的是独立的库方式。

具体步骤

1.新建一个module我这边选择的是 javalibrary

image.png
image.png

然后生成这样的目录

image.png
我们在java同级目录新建一个目录叫做 groovy
image.png
然后我们还需要做的是新建一个resources目录,同样在 java同级目录
image.png
然后我们开始我们插件开发
class PatchPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
    }
}

代码实现如上

这两级目录名称固定不能变,然后是我们的properties文件,文件名就是我们以后用到app里面的名字,比如我们这里到时候会这么用apply plugin: 'com.bigman.tech',这里的名字决定了我们使用时候的名字
然后我们看一下这个文件里面有啥

implementation-class=com.bigman.tech.PatchPlugin

主要就是我们刚新建的groovy文件里面类的全路径名称,这里千万不能写错

//应用groovy插件
apply plugin: 'groovy'
//要发布插件,必须应用这个maven插件,当然还有其他第三方插件
apply plugin: 'maven'


repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    compile gradleApi()
    compile 'com.android.tools.build:gradle:1.5.0'
    compile 'commons-io:commons-io:2.4'
    compile 'commons-codec:commons-codec:1.11'
    compile 'org.ow2.asm:asm-all:5.0.3'
}

sourceCompatibility = "7"
targetCompatibility = "7"


group="com.bigman"
archivesBaseName='patch-gradle'
version ='1.0.0'


uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}

主要是这三个配置

group="com.bigman"
archivesBaseName='patch-gradle'
version ='1.0.0'

平时我们应用依赖的时候就是通过group+archivesBaseName+version来进行寻找的
看一下我们怎么使用这个插件
首先我们找到项目根目录下面的build.gradle文件,然后我们在dependencies加入一个classpath

buildscript {
    
    repositories {
        google()
        jcenter()
        maven { url uri('repo') }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.bigman:patch-gradle:1.0.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

值得注意的还有一个地方,就是我们的repositories我们还加了一个maven { url uri('repo') }这个是让我们脚本去我们本地的repo目录去需要我们的依赖库,比如我们这个插件
但这个具体是怎么配置到本地maven库目录的,就是我们上面插件build.gradle文件里面有一个uploadArchives任务,这是maven插件提供的一个上传库的任务

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}

我们配置了让库上传到上级目录的一个repo目录下面,然后我们找到我们AS编辑器右边有一个gradle图标打开找到我们的 插件模块,比如我这边的plugin模块里面有一个upload任务

image.png
双击之后我们就可以在项目目录下面找到一个文件夹,里面就是我们刚上传的插件库
image.png
现在算是初步完成了自定义插件,我们可以试试有没有用
class PatchPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
  println ("我是插件")
    }
}

然后我们重新点击一下AS右侧的上传任务,重新上传一下,然后我们在这里找到app的assemble任务,双击运行看一下有没有打印日志就行,试试看


image.png

这里上传插件成功


ze'h
这里是插件应用成功,至此我们开发自定义插件的第一步已经成功迈出
上一篇 下一篇

猜你喜欢

热点阅读