183 lines
6.2 KiB
Plaintext
183 lines
6.2 KiB
Plaintext
page.title=Tính năng của Ngôn ngữ Java 8
|
|
page.keywords="android N", "Java 8", "Jack"
|
|
@jd:body
|
|
|
|
<div id="qv-wrapper">
|
|
<div id="qv">
|
|
<ol>
|
|
<li>
|
|
<a href="#supported-features">Các tính năng và API của Ngôn ngữ Java 8 được hỗ trợ</a>
|
|
</li>
|
|
<li>
|
|
<a href="#configuration">Kích hoạt các tính năng của Java 8 và Jack Toolchain</a>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
<p>Android N cung cấp hỗ trợ cho các tính năng của ngôn ngữ Java 8
|
|
mà bạn có thể sử dụng khi phát triển các ứng dụng nhắm mục tiêu Android N.
|
|
Trang này mô tả các tính năng ngôn ngữ mới được hỗ trợ trong Bản xem trước
|
|
Android N, cách thiết lập dự án đúng để sử dụng chúng và các vấn đề
|
|
đã biết mà bạn có thể gặp phải.
|
|
</p>
|
|
|
|
<p>Để bắt đầu sử dụng các tính năng này, bạn cần tải xuống và cài đặt Android
|
|
Studio 2.1 (bản xem trước) và SDK của Bản xem trước Android N gồm có Jack toolchain
|
|
cần thiết và Bổ trợ Android được cập nhật cho Gradle. Nếu bạn chưa
|
|
cài đặt SDK Bản xem trước Android N, hãy xem <a href="{@docRoot}preview/setup-sdk.html">Thiết lập để Phát triển dành cho Android N</a>.</p>
|
|
|
|
|
|
|
|
<p class="note">
|
|
<strong>Lưu ý:</strong> Sử dụng các tính năng mới của ngôn ngữ Java 8 không phải là một
|
|
yêu cầu để phát triển các ứng dụng nhắm mục tiêu nền tảng Android N. Nếu bạn
|
|
không muốn viết mã với các tính năng của ngôn ngữ Java 8 thì bạn có đặt các giá trị
|
|
mã nguồn và tương thích mục tiêu thành Java 7. Tuy nhiên, bạn vẫn
|
|
phải biên dịch với JDK 8 để dựng cho nền tảng Android N.
|
|
</p>
|
|
|
|
<h2 id="supported-features">
|
|
Các tính năng và API của Ngôn ngữ Java 8 được hỗ trợ
|
|
</h2>
|
|
|
|
<p>
|
|
Hiện thời, Android không hỗ trợ tất cả các tính năng của ngôn ngữ Java 8. Tuy nhiên,
|
|
các tính năng sau sẽ sử dụng được khi phát triển ứng dụng nhắm mục tiêu
|
|
Bản xem trước Android N:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">Các
|
|
phương thức giao diện mặc định và tĩnh</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">
|
|
Biểu thức Lambda</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">Chú giải
|
|
lặp lại</a>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
<p>
|
|
Ngoài ra, các API tính năng của ngôn ngữ Java 8 cũng được hỗ trợ:
|
|
</p>
|
|
|
|
<ul>
|
|
<li>Các API phản chiếu và liên quan đến ngôn ngữ:
|
|
</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>và các API Phản chiếu liên quan tới các chú giải lặp lại, như
|
|
{@code AnnotatedElement.getAnnotationsByType(Class)}
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>Các API tiện ích:
|
|
</li>
|
|
|
|
<li style="list-style: none; display: inline">
|
|
<ul>
|
|
<li>{@code java.util.function}
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<p class="note">
|
|
<strong>Lưu ý:</strong> Android N kế thừa việc triển khai các
|
|
biểu thức lambda trên các lớp ẩn danh. Phương pháp này cho phép chúng
|
|
tương thích ngược và có thể chạy trên các phiên bản Android cũ hơn. Để kiểm thử
|
|
các biểu thức lambda trên các phiên bản cũ hơn, hãy nhớ vào tệp {@code
|
|
build.gradle} và đặt {@code compileSdkVersion} và {@code
|
|
targetSdkVersion} thành 23 hoặc thấp hơn.
|
|
</p>
|
|
|
|
<h2 id="configuration">
|
|
Kích hoạt các tính năng của Java 8 và Jack Toolchain
|
|
</h2>
|
|
|
|
<p>
|
|
Để sử dụng các tính năng mới của ngôn ngữ Java 8 bạn cũng cần sử dụng
|
|
<a class="external-link" href="https://source.android.com/source/jack.html">Jack toolchain</a> mới. Toolchain Android
|
|
mới sẽ biên dịch mã nguồn của ngôn ngữ Java sang mã bytecode
|
|
dex đọc được của Android, có định dạng thư viện {@code .jack} riêng của nó và cung cấp hầu hết các tính năng
|
|
toolchain dưới dạng một phần của công cụ riêng lẻ: đóng gói lại, thu gọn, làm rối mã và
|
|
multidex.
|
|
</p>
|
|
|
|
<p>Sau đây là phần so sánh hai toolchain được sử dụng để dựng các tệp DEX Android:</p>
|
|
<ul>
|
|
<li>Javac toolchain cũ:<br>
|
|
<b>javac</b> ({@code .java} --> {@code .class}) --> <b>dx</b> ({@code
|
|
.class} --> {@code .dex})
|
|
</li>
|
|
|
|
<li>Jack toolchain mới:<br>
|
|
<b>Jack</b> ({@code .java} --> {@code .jack} --> {@code .dex})
|
|
</li>
|
|
</ul>
|
|
|
|
<h3>
|
|
Cấu hình Gradle
|
|
</h3>
|
|
|
|
<p>
|
|
Để kích hoạt các tính năng ngôn ngữ Java 8 và Jack cho dự án của bạn, hãy nhập
|
|
nội dung sau vào tệp {@code build.gradle} theo mô-đun:
|
|
</p>
|
|
|
|
<pre>
|
|
android {
|
|
...
|
|
defaultConfig {
|
|
...
|
|
jackOptions {
|
|
enabled true
|
|
}
|
|
}
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
}
|
|
}
|
|
</pre>
|
|
|
|
<h3>
|
|
Vấn đề đã biết
|
|
</h3>
|
|
|
|
<p>
|
|
Instant Run, được giới thiệu trong Android Studio 2.0 (Beta), hiện không hoạt động
|
|
với Jack và sẽ bị vô hiệu hóa khi sử dụng toolchain mới.
|
|
</p>
|
|
|
|
<p>Bởi vì Jack không tạo ra các tệp lớp trung gian khi biên dịch một
|
|
ứng dụng, các công cụ phụ thuộc vào những tệp này hiện thời không hoạt động với Jack. Một số
|
|
ví dụ về các công cụ này là:</p>
|
|
|
|
<ul>
|
|
<li>Bộ dò Lint hoạt động trên các tệp lớp
|
|
</li>
|
|
|
|
<li>Các công cụ và thư viện đòi hỏi các tệp lớp của ứng dụng (như JaCoCo
|
|
và Mockito)</li>
|
|
</ul>
|
|
|
|
<p><a href="http://tools.android.com/filing-bugs">Vui lòng thông báo lỗi</a> nếu bạn phát hiện các vấn đề khác khi sử dụng Jack.</p> |