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

Y.S*_*Y.S 36 android android-sdk-tools android-studio android-jack-and-jill android-proguard

谷歌已经为Android开发者发布了针对Android Studio 2.1 的新JACK编译器测试版.

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

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

它也说

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

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

综上所述:

  • 我们究竟如何与JACK实现混淆?我们是否可以绕过Proguard的使用,或者Proguard在混淆过程中扮演事实上的角色,即使我们使用JACK编译?

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

注意:

我已经提到了以下帖子:

进一步参考:

更新:

答案马特Insko是有益的,但我想更详细,更准确,规范的答案.

Mat*_*sko 9

最新发布的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 truedebug构建中配置了.

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

buildTypes {
    ...
    custom {
        minifyEnabled true
        proguardFiles 'proguard-android-JACK.txt-2.2.0-alpha1'
        jackOptions {
            enabled true
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用时出现问题proguardFiles getDefaultProguardFile('proguard-android.txt').它错误地用:com.android.jack.api.v01.ConfigurationException: Error while parsing ...,. 所以,我只是删除了它所抱怨的行,然后只是手动指定了我修改过的配置文件.