JACK编译器配置

本文聚焦于Android M及之后版本中引入的JACK编译器配置。内容涵盖JACK编译器的三种运行模式及其在Android.mk文件中的配置方法,帮助开发者理解和掌握JACK在Android项目中的应用。
摘要由CSDN通过智能技术生成

Android M开始,google默认使用JACK编译器,对于JACK编译器的编译流程下面这篇文章写的很详细:

http://taobaofed.org/blog/2016/05/05/new-compiler-for-android/

这里主要谈一下JACK编译器的配置。


1 JACK编译器三种模式

JACK编译器有三种模式:
LOCAL_JACK_ENABLED:=$(DEFAULT_JACK_ENABLED) # '' (ie disabled), disabled, full, incremental
即分别是disabled,full和incremental
disabled是指关闭JACK编译,使用android old toolchain。
full是指全部编译,即每次编译,都会将所有的code全部编译。
incremental是指增量编译,即只会编译修改的代码。incremental模式默认是关闭的,需要设置。
在官网有如下情况不能使用incremental编译模式:
Incremental compilation is deactivated when shrinking, obfuscation, repackaging or multi-dex legacy is enabled.

2  Android.mk如何设置JACK编译模式

根据上面的介绍,如果是单独的模块,只需要在Android.mk设置LOCAL_JACK_ENABLED为disabled, full, incremental即可。
Android 7.0(API级别24)开始支持Java 8的Stream API,因此,在Android 7.0上可以直接使用Stream API来处理集合。但是需要注意的是,Stream API只能在使用Java 8编译器编译的应用中使用,如果你使用的是Android Studio自带的编译器,需要对Gradle配置进行修改,以支持Java 8。 具体来说,要在Android 7.0上使用Java 8的Stream API,需要按照以下步骤进行配置: 1. 在app的build.gradle文件中添加以下配置: ``` android { ... defaultConfig { ... jackOptions { enabled true } ... } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } ``` 在上面的代码中,我们启用了Jack编译器,并使用sourceCompatibility和targetCompatibility指定了Java版本为1.8。 2. 在build.gradle文件中添加以下配置: ``` dependencies { ... // 用于启用Java 8的支持库 compile 'com.android.support:multidex:1.0.1' compile 'com.android.support:multidex-instrumentation:1.0.1' } ``` 在上面的代码中,我们添加了multidex和multidex-instrumentation库,用于启用Java 8的支持库。 3. 在Application类中启用MultiDex: ```java public class MyApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } ``` 在上面的代码中,我们覆写了Application类的attachBaseContext()方法,并在其中调用了MultiDex.install()方法,以启用MultiDex。 完成以上配置后,就可以在Android 7.0上使用Java 8的Stream API了。例如,我们可以使用以下代码对List<Integer>进行过滤、排序和求和: ```java List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); int sum = list.stream() .filter(i -> i >= 3) .sorted() .mapToInt(Integer::intValue) .sum(); System.out.println(sum); // 输出 12 ``` 在上面的代码中,我们使用了Stream API的filter()、sorted()、mapToInt()和sum()方法,对List<Integer>进行过滤、排序和求和。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值