Android Studio 调试 Gradle 插件

为了调试gradle插件,前后花费了我好几天时间,google、百度搜了不少相关资料,结果发现没一个靠谱,基本都是只说了一部分,因为我的插件是独立项目,但搜来的文章偏偏也没说哪个调试哪个,搞得我尴尬了好久。。。没办法只好自己琢磨,记录时顺便分享下,希望能让遇到相同问题的朋友少走弯路~

继续之前,我先假设你已经会写gradle插件了,并且已经写好了然后想调试插件,因为这篇文章是讲调试gradle插件。

我的开发环境是:Android Studio 3.2.1,gradle 4.10.1

第1步,生成jar格式的插件并上传至本地仓库

在你的插件模块目录下,找到build.gradle打开:

在底部添加如下代码,然后点击右上角的 “Sync Now” 保存:

def groupName = 'XXXX'//组名,改成你自己的
def artifactName = 'XXXXX'//项目名,改成你自己的
def versionName = '1.0.1'//版本号,改成你自己的

//上传至本地仓库
uploadArchives {
    repositories {
        mavenDeployer {
            pom.groupId = "${groupName}"
            pom.artifactId = "${artifactName}"
            pom.version = "${versionName}"
            repository(url: uri('../PluginRepository'))
        }
    }
}

然后我们可以在gradle目录下找到uploadArchives,双击uploadArchives即可上传至本地仓库。

上边一切顺利的话我们可以在插件项目的根目录下找到一个目录:PluginRepository,点开就可以看到生成的插件了。

第2步:在目标项目中引入这个插件

打开目标项目,在项目根目录下找到build.gradle,添加本地仓库目录,然后在dependencies中添加classpath:

buildscript {
    
    repositories {
        google()
        jcenter()
        maven {
            //改成你自己的
            url uri('file://I:/myfile/androidstudio/MessProject/PluginRepository')
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath '组名:项目名:版本号'//改成你自己的
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

然后点击右上角的 “Sync Now” 保存。

第3步:在插件项目中创建远程调试

回到插件所在项目,点击【Run】->【Edit Configurations...】:

然后点击左上角的【+】,选择【Remote】:

然后,把命令行参数复制下来,其他默认即可,当然名称可以改成自己喜欢的,然后点击【OK】:

这样服务端就搞好了,稍后我们需要配置客户端调试器让其连接过来,就可以调试了

远程调试有两种模式,或者说有两种方式可选:

  1. attach模式, 运行debugger,让其监听某个ip:port,然后等待debugger启动并连接这个端口,然后就可以在debugger上断点调试。
  2. listen模式,让debugger监听某个ip:port, 然后启动debuger连接这个端口,接下来在debugger上断点调试。

第4步:在目标项目新建gradle任务并连接到服务端

在目标项目(即引入插件的那个项目),打开gradle目录,启动模块一般都是app,所以我们展开到【:app】->【Tasks】->

因为我的插件写的是基于Mess的全混淆插件,任务是基于某项tasks的,具体就是在任务名为:transformClassesAndResourcesWithProguardForRelease运行期间运行的一个插件。

所以,我新建了一个基于【:app】->【Tasks】->【other】->【transformClassesAndResourcesWithProguardForRelease】 的任务

其他任务,大家可以根据自己的实际需要新建,我的示例仅供参考。

选择后,我们右键选择【create ....】,在打开的界面右侧,把第3步复制下来的内容粘贴到【VM options】,然后点击【OK】:

最终就是下边这个样子:

第5步:启动调试

经过前边的操作,现在我们可以进行正式的调试了,

1、首先回到插件所在项目,下好断点,将工具栏的运行选项改成我们新建的远程调试那个选项,没有取名字的话默认就是【nonamed】,然后点击启动调试的图标:

控制台会看到如下输出,说明启动成功:

2、回到目标项目(即引用插件的那个项目),双击我们新建的gradle任务:

如果一切顺利,双击gradle任务后,目标项目的调试器很快就会连接到我们建立的服务端并自动跳转,如果遇到断点则会断下来:

大家如果遇到不确定的,可以给我留言。

猜你喜欢

转载自blog.csdn.net/flydream3618/article/details/86686260