blob: 1723e46e2740ad8387722c48b0aa1da769fb29a9 [file] [log] [blame]
David Friedman8f1f66f2016-04-13 18:11:00 -07001page.title=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">Java 8 のサポート機能と API</a>
10 </li>
11 <li>
12 <a href="#configuration">Java 8 の機能と Jack ツールチェーンの有効化</a>
13 </li>
14 </ol>
15 </div>
16</div>
17
18<p>Android N 向けのアプリを開発する際は、Java 8 の機能をご利用いただけます。このページでは Android N Preview でサポートしている Java 8 の新機能や、それらを利用するためのプロジェクトの正しい設定方法、想定される既知の問題についてご紹介します。
19
20
21
22
23</p>
24
25<p>これらの機能を使うには、Android Studio 2.1(プレビュー版)と Android N Preview SDK をダウンロードしてセットアップし、Jack ツールチェーンと最新の Gradle 用の Android Plugin を準備する必要があります。Android N Preview SDK をお持ちでない方は、<a href="{@docRoot}preview/setup-sdk.html">Android N 向けの開発準備</a>の説明をご覧ください。
26
27
28</p>
29
30
31
32<p class="note">
33 <strong>注: </strong> Android N プラットフォーム向けのアプリを開発する際は、必ずしも Java 8 の新機能を使う必要はありません。Java 8 の機能を使用せずにコーディングしたい場合は、プロジェクトのソースコードを保持して、ターゲットの互換性の指定を Java 7 にしておくこともできます。ただし、Android N プラットフォームでビルドする時は、必ず JDK 8 を使用してコンパイルしてください。
34
35
36
37
38</p>
39
40<h2 id="supported-features">
41 Java 8 のサポート機能と API
42</h2>
43
44<p>
45 Android ではまだ Java 8 の全機能はサポートしておりません。現時点で Android N のプレビュー版向けにアプリを開発する際にご利用いただける機能は、以下のとおりです。
46
47
48</p>
49
50<ul>
51 <li>
52 <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">デフォルトおよび静的インターフェースのメソッド</a>
53
54 </li>
55
56 <li>
57 <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">ラムダ式</a>
58
59 </li>
60
61 <li>
62 <a class="external-link" href="https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">反復アノテーション</a>
63
64 </li>
65</ul>
66
67
68<p>
69 さらに以下の Java 8 機能の API もご利用いただけます。
70</p>
71
72<ul>
73 <li>リフレクションおよび言語関連の API
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>以下のような反復アノテーション関連のリフレクション API
88 {@code AnnotatedElement.getAnnotationsByType(Class)}
89 </li>
90 </ul>
91 </li>
92 <li>ユーティリティ API
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>注:</strong> Android N の実装は匿名クラスのラムダ式に基づいているため下方互換性があり、前の Andoird バージョンで実行することができます。前のバージョンでラムダ式をテストする際は、必ず {@code
105 build.gradle} ファイルの {@code compileSdkVersion} {@code
106 targetSdkVersion} の値を 23 以下に設定してください。
107
108
109
110</p>
111
112<h2 id="configuration">
113 Java 8 の機能と Jack ツールチェーンの有効化
114</h2>
115
116<p>
117 Java 8 の新機能を使うには、新しい <a class="external-link" href="https://source.android.com/source/jack.html">Jack ツールチェーン</a>も必要です。この新しい Android ツールチェーンは、Java のソースコードを Android で判別可能な dex バイトコードにコンパイルします。さらにこのツールには独自の {@code .jack} ライブラリ フォーマットがあり、再パッケージ化、縮小、難読化、Multidex など、ほとんどのツールチェーン機能に対応しています。
118
119
120
121
122
123</p>
124
125<p>以下は、Android DEX ファイルのビルドに使用する 2 つのツールチェーンの比較です。</p>
126<ul>
127 <li>従来の javac ツールチェーン<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 ツールチェーン<br>
133 <b>Jack</b> ({@code .java} --&gt; {@code .jack} --&gt; {@code .dex})
134 </li>
135</ul>
136
137<h3>
138 Gradle の設定
139</h3>
140
141<p>
142 プロジェクトで Java 8 の機能と Jack を使うには、モジュール固有の {@code build.gradle} ファイルに以下の内容を記載します。
143
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 既知の問題
164</h3>
165
166<p>
167 Android Studio 2.0(ベータ版)で導入された Instant Run は、現段階では Jack と併用できません。そのため新しいツールチェーンの使用中は、Instant Run が無効になります。
168
169</p>
170
171<p>Jack はアプリのコンパイル中に中間クラスファイルを生成しないため、中間ファイルに依存する以下のようなツールは現在 Jack と併用できません。
172
173</p>
174
175<ul>
176 <li>クラスファイルに作用する Lint Detector
177 </li>
178
179 <li>アプリのクラスファイルを必要とするツールやライブラリ(JaCoCo Mockito など)
180</li>
181</ul>
182
183<p>その他の不具合がありましたら、<a href="http://tools.android.com/filing-bugs">バグの報告</a>をお願いします。</p>