如何使用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。
还提供了支持和忽略的选项。