• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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} --&gt; {@code .class}) --&gt; <b>dx</b> ({@code
129  .class} --&gt; {@code .dex})
130  </li>
131
132  <li>Jack toolchain mới:<br>
133  <b>Jack</b> ({@code .java} --&gt; {@code .jack} --&gt; {@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>