Android最新编译工具Jack和Jill
来源:互联网 发布:办公室政治 知乎 编辑:程序博客网 时间:2024/05/13 22:14
前几天在编译Android6.0系统的时候,报了一个ERROR: Security problem, see Jack server log的错误,
(解决方法可以参照我另外一篇blog,下面给出传送门:)
http://blog.csdn.net/simon_crystin/article/details/62424488
就顺便查了一些资料,简单了解了一下Jack并总结如下:
介绍Jack之前,我们先了解一下在Jack未诞生之前我们使用的Javac和dx工具:
对于Java(非Android)应用,我们只需要Java编译器(javac)。它可以编译Java源码并生成Java二进制码(*.class文件)。Java二进制码可通过常规的在你机器上运行的JVM执行。
问题是,在Android设备上,我们使用非标准的JVM。我们使用了修改版本,该版本高度又花了手机环境。例如JVM被称为Dalvik(或者ART在更加高效的L+设备上)。
因为修改了JVM,Java二进制码也需要修改,使得Dalvik可执行。这是dx工具的职责 - 它收到Java二进制码(.class文件),并转换成Android二进制文件(*.dx文件)。
值得一提是工程中包含第三方库时 - jar(或者aar)形式 -相反不需要处理,第三方库只是*.class文件的压缩集合。因此第三方库直接输入给dx工具,因为我们不需要编译它。
Jack (Java Android Compiler Kit)
一.介绍:
我们先看看官方给的解释:
Jack is a new Android toolchain that compiles Java source into Android dx bytecode. It replaces the previous Android toolchain, which consists of multiple tools, such as javac, ProGuard, jarjar, and dx.
Jack编译器工具是一套新的Android编译工具用来将Java代码转换为Android dx字节代码。
Android6.0之前我们使用的是Javac 和dx工具,而Jack(Java Android 编译工具)和Jill(Jack中间库链接器),它们就是替换javac+dx工具集。
二.Jill 工具:
前面提到,Jack是直接将Java文件编译成了dx文件,我们知道,jar包是.class文件压缩来的。那Android编译时怎么处理jar包的呢?这个时候Jill就该登场了。Jill可以处理class文件并转换成特殊的Jayce格式,该格式可用于Jack编译器的输入。
三.Jack的优点
1.适用于AOSP,意思就是说这套编译器是开源的,开发者也可以为其进行完善。
2.Jack server能够减少编译的时间,直接将。Jack直接将Java源码编译成dx文件!我们不在有中间的.class文件。
3.Jack提供了一些实用的功能,实用第三方包不在必要,如:
(1)Retrolambda :Jack可以妥善处理lambda表达式
(2)Proguard :现已合并入Jack中,你仍可以使用混淆和最小化代码。
四.Jack 的缺点:
1.Jack不支持转换API - 无中间Java字节码可修改,所以有些我没有提到的插件将不能工作
2.Jack现在不支持注解处理,因此如果你严重依赖如Dagger,AutoValue等库,切换到Jack需要三思。变更,Jack Wharton指出,N预览版的Jack已经支持注解处理了,但未通过Gradle释放。
3.运行在Java字节码级的Lint检查器不支持。
对于Jack的了解也是基于此了,有什么不对的地方还请指出来,由于目前时间和实力有限,不能写出高质量的blog,但也一直有志于专研Android系统,相信不久的将来会带来更多更好的文章。
与君共勉 Simon
- Android最新编译工具Jack和Jill
- Android 新一代编译 toolchain Jack & Jill 简介
- Android 新一代编译 toolchain Jack & Jill 简介
- Android 新一代编译 toolchain Jack & Jill 简介
- [Android]Jack和Jill的阴暗面
- Android 编译 Jack简介
- 关闭Android jack 编译
- android 6.0 jack 编译详解
- POJ 1729 Jack ans Jill(bfs)
- POJ 1729 Jack and Jill BFS *
- Android源码编译(5)---使用Jack编译
- 编译Android 7.0(N) jack error 解决办法
- Jack 服务编译问题 Android 7.0
- POJ1729 Jack and Jill (双向广度优先搜索, DBFS)
- poj 1729 Jack and Jill BFS嵌套,同时进行两个
- android jack编译,代码中的中文显示乱码
- Android N JACK编译器不支持多用户同时编译的解决办法
- 使用Jack编译
- 350. Intersection of Two Arrays II
- Android Design控件之NavigationView的学习和使用
- 剑指offer:反转链表
- 8天web基础
- VB6子类技术
- Android最新编译工具Jack和Jill
- 手动修改httpd.conf
- 带分数
- EventBus
- Slow App Startup Times
- 一个简易的java http服务器
- Educational Codeforces Round 17 C && codeforces 762C C. Two strings(前缀后缀的妙用)
- bzoj3299
- css命名规范