36

谷歌已经为 Android Studio 2.1 的 Android 开发者发布了他们新的JACK 编译器的测试版本。

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

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

它还说

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

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

总之:

  • 我们究竟如何使用 JACK 启用混淆功能?我们是否可以绕过 Proguard 的使用,或者即使我们使用 JACK 编译,Proguard 是否在混淆过程中起到了事实上的作用?

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

笔记:

我已经提到了以下帖子:

进一步参考:

更新:

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

4

2 回答 2

9

最新发布的 Gradle 插件 (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构建中配置。

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

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

于 2016-05-19T14:52:17.400 回答
2

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

来自官方文档:

(Jack) 处理收缩、混淆、重新打包和 multidex。不再需要使用 ProGuard 等单独的软件包。

请特别注意“收缩和混淆”部分,其中提到:

Jack 具有收缩和混淆支持,并使用 proguard 配置文件来启用收缩和混淆功能。

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

于 2016-05-24T18:51:03.243 回答