android 关闭jack_编译Android时禁用Jack

编译Android时禁用Jack

2017-07-06 18:18:52 +08

字数:815

标签:

Android

本文的代码与方法,基于Android O(8.0)。

问题 ¶

根据Android官网的介绍《使用 Jack 编译》,似乎Jack工具链是不错的东西。

Jack 是一种新型 Android 工具链,用于将 Java 源代码编译成 Android dex 字节码。

它取代了之前由 javac、ProGuard、jarjar 和 dx 等多种工具组成的 Android 工具链。

Jack 工具链具有以下优势:

完全开放源代码

它是在 AOSP 中提供的;并且欢迎用户贡献资源。

提高编译速度

Jack 提供以下具体支持来减少编译时间:dex 预处理、增量编译和 Jack 编译服务器。

支持压缩、混淆、重新打包和多 dex 处理

不再需要使用单独的软件包(如 ProGuard)

实际情况是,在单次编译中,Jack的优势很难体现。

而且,如果不手动停止Jack Server,它还会在后台一直运行,占用内存不放。

此外,对一些额外工具链的支持也较差,如静态代码分析。

禁用 ¶

在AOSP的master分支,以及Android O及以后版本,Android提供了禁用的支持。

在编译项目时,传入一个变量,即可实现禁用。

make 'ANDROID_COMPILE_WITH_JACK:=false'

原理 ¶

Android的全局编译工具与配置,都在项目根目录的build子目录下。

在其中,可以发现LOCAL_JACK_ENABLED,是决定一个模块是否使用Jack的关键。

而在build/make/core/clear_vars.mk可以发现,

这个值的全局默认值是DEFAULT_JACK_ENABLED。

在build/make/core/config.mk中,可以发现一个开关。

ifeq ($(ANDROID_COMPILE_WITH_JACK),true)

DEFAULT_JACK_ENABLED:=full

else

DEFAULT_JACK_ENABLED:=

endif

而最终,开关是在build/make/combo/javac.mk初始化。

ifndef ANDROID_COMPILE_WITH_JACK

# Defines if compilation with jack is enabled by default.

ANDROID_COMPILE_WITH_JACK := true

endif

所以,只需要在执行make时,初始化ANDROID_COMPILE_WITH_JACK为false,即可实现全局禁用。

参考 ¶

VCS:git clone https://android.googlesource.com/toolchain/jack

另外,关于Jack Server的禁用,详见《编译Android时禁用Jack Server》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值