文章目录
  1. 1. 准备
    1. 1.1. Transform
      1. 1.1.1. Transform 介绍
      2. 1.1.2. Transform API
    2. 1.2. Javaassist
  2. 2. 打点统计
  3. 3. 参考文章

Gradle插件系列

[toc]

经过前边连篇介绍,我们了解了Gradle的基础知识和如何写一个自己的插件,我们今天开始实战。

准备

今天前面的介绍,我们是可以实现自己的自定义task,但是今天我们会给大家带来一个很好玩的appi和工具.

Transform

Transform 介绍

Transform是特意为Android打造的,按照官网的解释如下:

Starting with 1.5.0-beta1, the Gradle plugin includes a Transform API allowing 3rd party plugins to manipulate compiled class files before they are converted to dex files.
(The API existed in 1.4.0-beta2 but it’s been completely revamped in 1.5.0-beta1)

The goal of this API is to simplify injecting custom class manipulations without having to deal with tasks, and to offer more flexibility on what is manipulated. The internal code processing (jacoco, progard, multi-dex) have all moved to this new mechanism already in 1.5.0-beta1.
Note: this applies only to the javac/dx code path. Jack does not use this API at the moment.

简单解释下就是:

  1. Transforms是重新引入的,主要作用在对class的处理上,也是在生成dex文件前。
  2. Transforms有很强大功能,避免了大家使用task,内部可以处理jacoco, progard, multi-dex等过程。

在Android studio下我们若是执行./gradlew tasks就会发现很多以那么Transforms开头的task。

Transform API

那么Transforms 有哪些API呢:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class XXXTransform extends Transform {
@Override
public String getName() {
return null;
}

@Override
public Set<QualifiedContent.ContentType> getInputTypes() {
return null;
}

@Override
public Set<? super QualifiedContent.Scope> getScopes() {
return null;
}

@Override
public boolean isIncremental() {
return false;
}

@Override
public void transform(TransformInvocation transformInvocation) throws TransformException, InterruptedException, IOException {
super.transform(transformInvocation);
}
}

我们可以注册多个transform,这个类似于task流式关系。
这写API可以参考如何理解 Transform API

Transform注册只需要通过:

1
android.registerTransform(XXXTransform);

Javaassist

打点统计

参考文章

Transform API
Android Plugin Transform 初探
Gradle通过Transform API实现代码注入
深入理解 Android 之 Gradle
Android ASM 插桩初步实现
Android热修复技术——QQ空间补丁方案解析(3)

网易乐得-Android AOP之字节码插桩

文章目录
  1. 1. 准备
    1. 1.1. Transform
      1. 1.1.1. Transform 介绍
      2. 1.1.2. Transform API
    2. 1.2. Javaassist
  2. 2. 打点统计
  3. 3. 参考文章