如何使用JACK编译器进行代码压缩和混淆?

36

谷歌已经发布了适用于Android Studio 2.1的新JACK编译器的测试版本,供Android开发者使用。

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

然而以下文章称JACK使用Proguard配置文件(即.pro文件)来执行混淆:

它还说:

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

我该怎样理解这句话?我们是否必须使用minifyEnabled选项并定义一个包含Proguard选项的.pro文件? 总结:
  • 如何使用JACK启用混淆?我们可以绕过使用Proguard吗,或者即使我们使用JACK编译,Proguard在混淆过程中也扮演着事实上的角色吗?
  • JACK目前是否支持混淆,并且在Android Studio的稳定版本(即非beta / canary)中是否可用?
注意:

我已经参考了以下帖子:

进一步参考资料:

更新:

Matt Insko答案很有帮助,但我想要更多细节和更精确、规范的答案。


这篇文章可能会有所帮助。如果你看到这个链接,那么就有一个选项可以传递像--config-proguard这样的proguard文件。 - Madhukar Hebbar
那么使用命令行是唯一的选择吗?我们如何在命令行中使用JACK进行构建? - Yash Sampat
是的,我已经尝试过使用CLI了。它运行得很好。 这些信息在这里提到:(https://software.intel.com/en-us/android/articles/an-introduction-to-jack-and-jill-on-x86)和(https://gist.github.com/stefanhoth/593451dfb4576ec9a21c)。 - Madhukar Hebbar
1
谢谢,但我已经看过第一个链接了(它甚至在我的答案中引用了)...还是谢谢 :) - Yash Sampat
1
一个很好的信息性问题。 - Madhukar Hebbar
现在在3.0中应该可以工作了,因为默认情况下我们在即时运行构建中使用自定义代码缩小器。自定义缩小器与资源缩小兼容。更多更新请查看https://issuetracker.google.com/issues/37092766。 - Prags
2个回答

9

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,我成功地让JACK执行混淆操作。

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

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

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


你好,你是如何解决 AS 抱怨当前配置(自定义)未签名的问题的? - galaxigirl

2
你可以在这里查看:https://source.android.com/source/jack.html 官方文档中提到:Jack 可以处理代码缩减、混淆、重打包和 multidex。不再需要使用 ProGuard 等单独的包。
请注意特别关注“缩减和混淆”部分,其中提到:
Jack 支持缩减和混淆,并使用 proguard 配置文件启用缩减和混淆功能。
也提供了支持和忽略的选项。

3
谢谢,但您没有解释我们应该如何具体操作。我也阅读了(并参考了)那篇文章,但它对混淆的具体方法非常含糊和神秘。如果您可以尝试一下,并提供更多细节(如果有效),我会非常感激……谢谢 :) - Yash Sampat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接