如何使用JACK编译器执行缩小和混淆?

Google已经发布了Android Studio 2.1的Android开发者的新JACK编译器的testing版本。

我的问题是,我们如何使用JACK为APK启用混淆处理? 下面的文章说JACK在本地执行混淆,并且不需要Proguard:

  • 用Jack编译

而下面的文章说JACK使用Proguardconfiguration文件(即.pro文件)来执行模糊处理:

  • 实验新的Android工具链 – 杰克和吉尔

它也是这样说的

在这个过程中,Jack还处理任何请求的代码缩小 (缩小和/或混淆 )。

这到底是什么意思? 我们是否必须使用minifyEnabled选项并定义包含Proguard选项的.pro文件?

综上所述:

  • 我们究竟如何使用JACK启用混淆? 我们可以绕过Proguard的使用,还是Proguard在混淆处理中扮演一个事实上的angular色,即使我们用JACK编译?

  • JACK目前是否支持混淆,是否可以在Android Studio的稳定(即非beta / canary)版本中使用?

注意:

我已经提到以下post:

  • 如何在android studio中启用Jack(Java Android编译器工具包)

  • 错误:Jack需要支持Java 8语言function

更多参考文献

  • 杰克和吉尔在X86上的介绍

  • 杰克和吉尔的黑暗面

  • Java 8语言特性

更新:

Matt Insko的答案是有帮助的,但是我想要更多的细节,以及更精确,规范的答案。

在最新发布的Gradle Plugin(v2.1.0)中似乎不支持JACK混淆。

如果您在使用最新的v2.1.0插件时启用JACK,它会告诉您Jack requires Build Tools 24.0.0 or later要求您使用预览工具。

使用android gradle v2.2.0-alpha1,Build Tools-v24rc4,Platform Tools-v24rc3和Sdk Tools-v25.1.7rc1我能够通过JACK来执行混淆。

当它在defaultConfig内部启用时,抱怨Minifying the variant used for tests is not supported when using Jack. ,因为minifyEnabled true是在debug版本中configuration的。

所以,我创build了一个自定义的构buildtypes,并在那里启用它:

 buildTypes { ... custom { minifyEnabled true proguardFiles 'proguard-android-JACK.txt-2.2.0-alpha1' jackOptions { enabled true } } 

使用proguardFiles getDefaultProguardFile('proguard-android.txt') 。 它com.android.jack.api.v01.ConfigurationException: Error while parsing ...com.android.jack.api.v01.ConfigurationException: Error while parsing ...com.android.jack.api.v01.ConfigurationException: Error while parsing ... ,。 所以,我刚刚删除了它抱怨的线路,然后只是手动指定我修改后的configuration文件。

你可以看看这里: https : //source.android.com/source/jack.html

从官方文档:

(杰克)处理收缩,模糊,重新包装和multidex。 不再需要使用ProGuard等单独的软件包。

请特别注意“缩小和混淆”一节,它提到:

Jack已经收缩和混淆支持,并使用proguardconfiguration文件来启用收缩和混淆function。

还提供了支持和忽略的选项。