Gradle断点调试 – 调试Android Builder源码

图片 2

断点调试是阅读源码的一种好方法,能便于理解应用的执行流程,下面介绍如何在AS中调试Android
Build Tool代码的方法。

Gradle系列相关文章:1、Gradle理论与实践一:Gradle入门2、Gradle理论与实践二:Groovy介绍3、Gradle理论与实践三:Gradle构建脚本基础4、Gradle理论与实践四:自定义Gradle插件5、Gradle配置subprojects和allprojects的区别:subprojects和allprojects的区别

Gradle可以认为是一个框架,负责定义流程和规则。而具体的编译工作则是通过插件的方式来完成的。比如编译
Java 有 Java 插件,编译 Groovy 有 Groovy 插件,编译 Android APP 有
Android APP 插件,编译 Android Library 有 Android Library
插件。在Gradle中一般有两种类型的插件,脚本插件二进制插件。使用插件方式可以使得同一逻辑在项目中复用,也可以针对不同项目做个性化配置,只要插件代码支持即可。

1. 开启Gradle调试

网上方案比较杂,这里介绍自己亲测可用的一种方案,基于Android Studio 3.0。

Android Studio中按照如下步骤操作:Menu → Run → Edit Configurations… →
Add New Configuration → Remote → 自定义配置name → host: localhost →
port: 5005 → OK

在Terminal中执行需要调试的任务,同时携带-Dorg.gradle.daemon=false -Dorg.gradle.debug=true作为参数,如下:

./gradlew <任务名> -Dorg.gradle.daemon=false -Dorg.gradle.debug=true

之后可以看到Terminal中执行被阻塞,并输出如下:

$ gradle assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=trueTo honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/3.3/userguide/gradle_daemon.html.> Starting Daemon

在需要调试的地方设置断点,注意,*.gradle脚本是无法调试的

执行之前配置的remote debug。

Gradle可以认为是一个框架,负责定义流程和规则。而具体的编译工作则是通过插件的方式来完成的。比如编译
Java 有 Java 插件,编译 Groovy 有 Groovy 插件,编译 Android APP 有
Android APP 插件,编译 Android Library 有 Android Library
插件。在Gradle中一般有两种类型的插件,脚本插件二进制插件。使用插件方式可以使得同一逻辑在项目中复用,也可以针对不同项目做个性化配置,只要插件代码支持即可。

Java插件引入方式:

2. 调试Android Builder

要在IDE中设置断点,关键需要让IDE链接到源代码,这里有个小技巧。在项目的根目录下创建一个名为buildSrc的目录,这个目录是用来编写gradle的构建脚本的,在buildSrc目录下创建文件build.gradle,并添加如下代码:

repositories { jcenter()}dependencies { compile 'com.android.tools.build:gradle:2.3.3'}

这里在buildScr中添加了Android Build
Tool的依赖,具体依赖什么版本,由你所使用的Build
Tool版本决定,既根目录中build.gradle中设置的版本。然后Sync
Gradle。现在即可在Project视图下的External Liberaries中看到Android Build
Tool的源码了。

图片 1com.android.application图片 2com.android.application

开始研究Android的构建系统吧!

Gradle基础 – 构建生命周期和Hook技术

Java插件引入方式:

  • apply plugin: ‘java’
  • apply plugin: ‘java’

Java插件约定src/main/java为我们项目源代码存放位置;src/main/resources为资源存放位置;src/test/java为我们单元测试用例存放目录;src/test/resources存放我们单元测试中资源存放位置。java插件引入了一个概念叫做SourceSets,通过修改SourceSets中的属性,可以指定哪些源文件(或文件夹下的源文件)要被编译,哪些源文件要被排除。Gradle就是通过它实现Java项目的布局定义。

Java插件约定src/main/java为我们项目源代码存放位置;src/main/resources为资源存放位置;src/test/java为我们单元测试用例存放目录;src/test/resources存放我们单元测试中资源存放位置。java插件引入了一个概念叫做SourceSets,通过修改SourceSets中的属性,可以指定哪些源文件(或文件夹下的源文件)要被编译,哪些源文件要被排除。Gradle就是通过它实现Java项目的布局定义。

默认配置:

默认配置:

android { sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] }}
You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图