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>