David Friedman 8f1f66f061 Docs: Localized DAC pages for N Preview.
Change-Id: I5f6e3784bc1a3134dcd71fe06cfa9bffd300a647
2016-04-20 20:52:52 -07:00

183 lines
4.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

page.title=Java 8 语言功能
page.keywords="android N", "Java 8", "Jack"
@jd:body
<div id="qv-wrapper">
<div id="qv">
<ol>
<li>
<a href="#supported-features">支持的 Java 8 语言功能和 API</a>
</li>
<li>
<a href="#configuration">启用 Java 8 功能和 Jack 工具链</a>
</li>
</ol>
</div>
</div>
<p>Android N 支持 Java 8 语言功能,您可以在开发面向 Android N 的应用时使用这些功能。本页面介绍了 Android N Preview中支持的新语言功能、如何正确设置项目以使用这些功能以及您可能遇到的任何已知问题。
</p>
<p>要开始使用这些功能,您需要下载并设置 Android Studio 2.1(预览版)和 Android N Preview SDK包括所需的 Jack 工具链和更新的 Android Plugin for Gradle。如果您尚未安装 Android N Preview SDK请参阅 <a href="{@docRoot}preview/setup-sdk.html">Android N 开发设置</a>。
</p>
<p class="note">
<strong>注</strong>:开发面向 Android N 平台的应用并不要求必须使用新的 Java 8 语言功能。如果您不想使用 Java 8 语言功能编写代码,您可以将项目的源和目标兼容性值保留为 Java 7但您仍必须使用 JDK 8 进行编译,以便针对 Android N 平台进行构建。
</p>
<h2 id="supported-features">
支持的 Java 8 语言功能和 API
</h2>
<p>
Android 目前仅支持部分 Java 8 语言功能。在开发面向 Android N Preview 的应用时,现已可使用以下功能:
</p>
<ul>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">默认和静态接口方法</a>
</li>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">Lambda 表达式</a>
</li>
<li>
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">重复注解</a>
</li>
</ul>
<p>
此外,现已可使用以下 Java 8 语言功能 API
</p>
<ul>
<li>Reflection 和语言相关 API
</li>
<li style="list-style: none; display: inline">
<ul>
<li>{@code java.lang.FunctionalInterface}
</li>
<li>{@code java.lang.annotation.Repeatable}
</li>
<li>{@code java.lang.reflect.Method.isDefault()}
</li>
<li>以及与重复注解关联的 Reflection API例如
{@code AnnotatedElement.getAnnotationsByType(Class)}
</li>
</ul>
</li>
<li>Utility API
</li>
<li style="list-style: none; display: inline">
<ul>
<li>{@code java.util.function}
</li>
</ul>
</li>
</ul>
<p class="note">
<strong>注</strong>Android N 的 Lambda 表达式的实现基于匿名类。这种方法使表达式可以向后兼容,并可以在早期版本的 Android 上执行。如需在早期版本上测试 Lambda 表达式,请进入 {@code
build.gradle} 文件,并将 {@code compileSdkVersion} 和 {@code
targetSdkVersion} 设为 23 或更小的值。
</p>
<h2 id="configuration">
启用 Java 8 功能和 Jack 工具链
</h2>
<p>
要使用新的 Java 8 语言功能,还需使用新的 <a class="external-link" href="https://source.android.com/source/jack.html">Jack 工具链</a>。新的 Android 工具链将 Java 源语言编译成 Android 可读取的 Dalvik 可执行文件字节码,且有其自己的 {@code .jack} 库格式,在一个工具中提供了大多数工具链功能:重新打包、压缩、模糊化以及 Dalvik 可执行文件分包。
</p>
<p>以下是构建 Android Dalvik 可执行文件可用的两种工具链的对比:</p>
<ul>
<li>旧版 javac 工具链:<br>
<b>javac</b> ({@code .java} --&gt; {@code .class}) --&gt; <b>dx</b> ({@code
.class} --&gt; {@code .dex})
</li>
<li>新版 Jack 工具链:<br>
<b>Jack</b> ({@code .java} --&gt; {@code .jack} --&gt; {@code .dex})
</li>
</ul>
<h3>
配置 Gradle
</h3>
<p>
如需为您的项目启用 Java 8 语言功能和 Jack请在模块特定的 {@code build.gradle} 文件中输入以下内容:
</p>
<pre>
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
</pre>
<h3>
已知问题
</h3>
<p>
Android Studio 2.0 (Beta) 中引入的 Instant Run 目前不能用于 Jack在使用新的工具链时将被禁用。
</p>
<p>由于 Jack 在编译应用时不生成中间类文件,依赖这些文件的工具目前不能用于 Jack。例如以下工具
</p>
<ul>
<li>对类文件进行操作的 Lint 检测工具
</li>
<li>需要应用类文件的工具和库(例如 JaCoCo
和 Mockito</li>
</ul>
<p>如果您在使用 Jack 的过程中发现其他问题,<a href="http://tools.android.com/filing-bugs">请报告错误</a>。</p>