[Gradle] 如何在android项目中对纯Java module使用release/debug build并启用proguard

如何在android项目中对纯Java module使用release/debug build并启用proguard?这里提供一种方法,尽管不是很“好看”,但是可用。

假设app模块依赖lib模块,lib模块是一个纯Java模块(apply plugin: 'java')。整个过程可以分成两步。

引入Proguard

在lib模块的build.gradle里添加以下代码

这里做了几件事情:

  1. 定义proguard task,令jar这个java task依赖于它。即proguard task运行完毕后才运行jar。
  2. 使用文件替换的方式,在jar运行前替换掉class文件。
  3. 通过观察gradle console的输出,得知app在编译时会运行jar task。经过1.2.两步我们可以在正常编译
    流程中插入proguard处理后的class文件。

接下来看怎么样根据debug和release compile关闭或开启proguard

引入debug/release

在lib模块的build.gradle中加入如下代码:

然后在app的build.gradl中加入如下代码:

这段代码做了两个事情:

  1. 监听了task的添加流程,在’preReleaseBuild’和’preDebugBuild’的execute阶段添加了代码逻辑。
  2. 在’preReleaseBuild’和’preDebugBuild’执行完后,执行lib模块中的onRelease或者onDebug方法。

综上,实现了在android项目中对纯Java module使用release/debug build并启用proguard。

注:本文默认读者具有gradle基础知识。
注:附Java Plugin依赖图:
https://i1.wp.com/docs.gradle.org/3.3/userguide/img/javaPluginTasks.png?w=840&ssl=1