提问者:小点点

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


Google为Android开发人员发布了带有Android Studio 2.1的新JACK编译器的测试版本。

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

  • 使用Jack编译

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

  • 实验性新Android工具链-Jack和Jill。

它还说

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

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

总结:

>

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

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

    注:

    我已经推荐了以下帖子:

    >

  • 如何在Android Studio中启用Jack(JavaAndroid编译器套件)。

    错误:杰克需要支持java8种语言功能。

    进一步参考:

    >

  • X86上的杰克和吉尔简介。

    杰克和吉尔的黑暗面。

    Java8种语言特点。

    更新:

    马特·因斯科的回答很有帮助,但我想要更详细、更准确、更规范的回答。


  • 共2个答案

    匿名用户

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

    如果您在使用最新的v2.1.0插件时启用JACK,它会告诉您Jack需要Build Tools 24.0.0或更高版本要求您使用预览工具。

    使用android gradle v2.2.0-alpha1、Build Tools-v24rc4、Platform Tools-v24rc3和Sdk Tools-v25.1.7rc1我能够让JACK执行混淆。

    当在defaultConfig中启用时,它抱怨在使用Jack时不支持缩小用于测试的变体。,因为minifyEn的true是在debug构建中配置的。

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

    buildTypes {
        ...
        custom {
            minifyEnabled true
            proguardFiles 'proguard-android-JACK.txt-2.2.0-alpha1'
            jackOptions {
                enabled true
            }
        }
    

    使用proGuard dFiles getDefaultProGuard dFile('proGuard-android. txt')时出现了问题。它出错了:com.android.ack.api.v01.ConfigurationException:解析时出错…,。所以,我只是删除了它抱怨的行,然后手动指定了我修改的配置文件。

    匿名用户

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

    来自官方留档:

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

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

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

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