Google为Android开发人员发布了带有Android Studio 2.1的新JACK编译器的测试版本。
我的问题是,我们如何使用JACK为APK启用混淆?下面的文章说JACK本地执行混淆并消除了对ProGuard的需求:
鉴于以下文章说JACK使用ProGuard配置文件(即. pro
文件)来执行混淆:
它还说
在此过程中,Jack还处理任何请求的代码缩小(缩小和/或混淆)。
这到底是什么意思?我们是否必须使用minifyEn的
选项并定义一个包含ProGuard选项的. pro
文件?
总结:
>
我们究竟如何使用JACK启用混淆?我们是否可以绕过ProGuard的使用,或者ProGuard是否在混淆过程中扮演了事实上的角色,即使我们使用JACK编译?
JACK目前是否支持混淆,它是否在Android Studio的稳定(即非beta/金丝雀)版本中可用?
注:
我已经推荐了以下帖子:
>
如何在Android Studio中启用Jack(JavaAndroid编译器套件)。
错误:杰克需要支持java8种语言功能。
进一步参考:
>
X86上的杰克和吉尔简介。
杰克和吉尔的黑暗面。
Java8种语言特点。
更新:
马特·因斯科的回答很有帮助,但我想要更详细、更准确、更规范的回答。
最新发布的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配置文件来启用收缩和混淆功能。
并且还提供了支持和忽略的选项。