1page.title=Tính năng của Ngôn ngữ Java 8 2page.keywords="android N", "Java 8", "Jack" 3@jd:body 4 5<div id="qv-wrapper"> 6 <div id="qv"> 7 <ol> 8 <li> 9 <a href="#supported-features">Các tính năng và API của Ngôn ngữ Java 8 được hỗ trợ</a> 10 </li> 11 <li> 12 <a href="#configuration">Kích hoạt các tính năng của Java 8 và Jack Toolchain</a> 13 </li> 14 </ol> 15 </div> 16</div> 17 18<p>Android N cung cấp hỗ trợ cho các tính năng của ngôn ngữ Java 8 19 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. 20 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 21 Android N, cách thiết lập dự án đúng để sử dụng chúng và các vấn đề 22 đã biết mà bạn có thể gặp phải. 23</p> 24 25<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 26Studio 2.1 (bản xem trước) và SDK của Bản xem trước Android N gồm có Jack toolchain 27cần thiết và Bổ trợ Android được cập nhật cho Gradle. Nếu bạn chưa 28cà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> 29 30 31 32<p class="note"> 33 <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 34 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 35 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ị 36 mã nguồn và tương thích mục tiêu thành Java 7. Tuy nhiên, bạn vẫn 37 phải biên dịch với JDK 8 để dựng cho nền tảng Android N. 38</p> 39 40<h2 id="supported-features"> 41 Các tính năng và API của Ngôn ngữ Java 8 được hỗ trợ 42</h2> 43 44<p> 45 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, 46 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 47 Bản xem trước Android N: 48</p> 49 50<ul> 51 <li> 52 <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">Các 53 phương thức giao diện mặc định và tĩnh</a> 54 </li> 55 56 <li> 57 <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html"> 58 Biểu thức Lambda</a> 59 </li> 60 61 <li> 62 <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">Chú giải 63 lặp lại</a> 64 </li> 65</ul> 66 67 68<p> 69 Ngoài ra, các API tính năng của ngôn ngữ Java 8 cũng được hỗ trợ: 70</p> 71 72<ul> 73 <li>Các API phản chiếu và liên quan đến ngôn ngữ: 74 </li> 75 76 <li style="list-style: none; display: inline"> 77 <ul> 78 <li>{@code java.lang.FunctionalInterface} 79 </li> 80 81 <li>{@code java.lang.annotation.Repeatable} 82 </li> 83 84 <li>{@code java.lang.reflect.Method.isDefault()} 85 </li> 86 87 <li>và các API Phản chiếu liên quan tới các chú giải lặp lại, như 88{@code AnnotatedElement.getAnnotationsByType(Class)} 89 </li> 90 </ul> 91 </li> 92 <li>Các API tiện ích: 93 </li> 94 95 <li style="list-style: none; display: inline"> 96 <ul> 97 <li>{@code java.util.function} 98 </li> 99 </ul> 100 </li> 101</ul> 102 103<p class="note"> 104 <strong>Lưu ý:</strong> Android N kế thừa việc triển khai các 105 biểu thức lambda trên các lớp ẩn danh. Phương pháp này cho phép chúng 106 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ử 107 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 108 build.gradle} và đặt {@code compileSdkVersion} và {@code 109 targetSdkVersion} thành 23 hoặc thấp hơn. 110</p> 111 112<h2 id="configuration"> 113 Kích hoạt các tính năng của Java 8 và Jack Toolchain 114</h2> 115 116<p> 117 Để 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 118 <a class="external-link" href="https://source.android.com/source/jack.html">Jack toolchain</a> mới. Toolchain Android 119 mới sẽ biên dịch mã nguồn của ngôn ngữ Java sang mã bytecode 120 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 121 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à 122 multidex. 123</p> 124 125<p>Sau đây là phần so sánh hai toolchain được sử dụng để dựng các tệp DEX Android:</p> 126<ul> 127 <li>Javac toolchain cũ:<br> 128 <b>javac</b> ({@code .java} --> {@code .class}) --> <b>dx</b> ({@code 129 .class} --> {@code .dex}) 130 </li> 131 132 <li>Jack toolchain mới:<br> 133 <b>Jack</b> ({@code .java} --> {@code .jack} --> {@code .dex}) 134 </li> 135</ul> 136 137<h3> 138 Cấu hình Gradle 139</h3> 140 141<p> 142 Để 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 143 nội dung sau vào tệp {@code build.gradle} theo mô-đun: 144</p> 145 146<pre> 147android { 148 ... 149 defaultConfig { 150 ... 151 jackOptions { 152 enabled true 153 } 154 } 155 compileOptions { 156 sourceCompatibility JavaVersion.VERSION_1_8 157 targetCompatibility JavaVersion.VERSION_1_8 158 } 159} 160</pre> 161 162<h3> 163 Vấn đề đã biết 164</h3> 165 166<p> 167 Instant Run, được giới thiệu trong Android Studio 2.0 (Beta), hiện không hoạt động 168 với Jack và sẽ bị vô hiệu hóa khi sử dụng toolchain mới. 169</p> 170 171<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 172ứ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ố 173ví dụ về các công cụ này là:</p> 174 175<ul> 176 <li>Bộ dò Lint hoạt động trên các tệp lớp 177 </li> 178 179 <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 180 và Mockito)</li> 181</ul> 182 183<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>