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

How to perform minification and obfuscation with the JACK compiler?

Google 已为 Android 开发人员发布了新 JACK compiler 的测试版本 Android Studio 2.1。

我的问题是,我们如何使用 JACK 为 APK 启用混淆?下面的文章说 JACK 执行混淆 本机 并消除了对 Proguard 的需要:

而下面的文章说 JACK 使用 Proguard 配置文件(即 .pro 文件)来执行混淆:

还说

During this process Jack also handles any requested code minification (shrinking and/or obfuscation).

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

总结:

注:

我已经参考了以下帖子:

更多参考资料:

更新:

by Matt Insko 很有帮助,但我想要更详细、更准确、规范的答案。

J.A.C.K。最新发布的 Gradle 插件 (v2.1.0) 似乎不支持混淆。

如果你在使用最新的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 我能够通过杰克.

defaultConfig 中启用时它会抱怨 Minifying the variant used for tests is not supported when using Jack.,因为 minifyEnabled true 是在 debug 构建中配置的。

所以,我创建了一个自定义构建类型并在那里启用它:

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 ..., 。所以,我只是删除了它抱怨的行,然后手动指定了我修改后的配置文件。

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

来自官方文档:

(Jack) Handles shrinking, obfuscation, repackaging and multidex. Using a separate package such as ProGuard is no longer necessary.

请特别注意 "Shrinking and Obfuscation" 部分,其中提到:

Jack has shrinking and obfuscation support and uses proguard configuration files to enable shrinking and obfuscation features.

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