アップデート3。KOTLIN IS NOWOFFIALIALLY SUPPORTED FOR FOR Android DEVELOPMENT 。BY GOOGLE。YAAAAAAAAS!
Update 2: JetBrainsは、長期的にはAndroid 。私は幸せなkotlinユーザーです:)。
Update:JetBrainsのHadi Hariri、 このトピックに関する情報を公開する予定であることに言及 。彼らが行ったら、この投稿を更新します。
===廃止されたもの次へ===
Googleは、近日公開予定のAndroid Nにいくつかの興味深い機能があり、最も注目すべきは部分的な Java 8言語サポート です。これは新しいため可能です- ジャックツールチェーン Googleは作業中です。
javacまたはkotlincを使用した現在のツールチェーン:
javac(.Java
-> .class
)->dx(.class
-> .dex
)
kotlinc(.kt
-> .class
)->dx(.class
-> .dex
)
新しいJackツールチェーン:
Jack(.Java
-> .jack
-> .dex
)
Googleは、JackAndroid development。Update:Jackが 廃止予定 になりました。
私の質問は、この新しいツールチェーンが将来、Android開発用のkotlinユーザーとして私にどのような影響を与えるでしょうか? 「過去にスタック」しますか?
免責事項:私はジャックに取り組んでいます
これは影響しません。 KotlinのコンパイラーはJava 6バイトコードを生成します。これはJack/Jillで問題なくインポートできます。
@ Pavel Dudka
ジャック-コンパイラーです。 javacに似ていますが、動作が少し異なります。
ご覧のとおり、JackはJavaソースコードを直接Dexファイルにコンパイルします!中間の* .classファイルはもうないので、dxツールは不要です!
ちょっと待って!プロジェクトにサードパーティのライブラリ(.classファイルのコレクションとして提供されます)を含めるとどうなりますか?
そして、それがジルの出番です。
Jillはクラスファイルを処理し、Jackコンパイラの入力として使用できる特別なJayce形式に変換できます。
それでは、ちょっと待って、考えてみましょう...私たちがとても夢中になったすべてのクールなプラグインはどうなりますか?それらはすべて.classファイルを必要とし、Jackコンパイラにはもうそれらがありません...
幸いなことに、ジャックはすぐに使用できる重要な機能をいくつか提供しています。
JackはJavaプログラミング言語1.7をサポートし、以下で説明する追加機能を統合します。
Predexing
JACKライブラリファイルを生成すると、ライブラリの.dexが生成され、pre-dexとして.jackライブラリファイル内に保存されます。コンパイル時に、JACKは各ライブラリのプレデックスを再利用します。すべてのライブラリは事前設定されています。
インクリメンタルコンパイル
インクリメンタルコンパイルとは、最後のコンパイル以降に変更されたコンポーネントとその依存関係のみが再コンパイルされることを意味します。変更がコンポーネントの限られたセットのみに制限されている場合、インクリメンタルコンパイルはフルコンパイルよりも大幅に高速化できます。
再梱包
JACKはjarjar設定ファイルを使用して再パッケージ化を行います。
Multidexサポート
Dexファイルは65Kメソッドに制限されているため、65Kメソッドを超えるアプリは複数のdexファイルに分割する必要があります。 (multidexの詳細については、「65Kを超える方法でアプリを構築する」を参照してください。)
GoogleはデフォルトのツールとしてPush Jackを使用しませんが、Jack and Jill
。
Jillを使用して.classファイルをdexにコンパイルすることはここにあります。それ以外の場合は、jar/aarライブラリに別れを告げることができます。
ジャックとジルのどちらが遅くなるかはまだ議論の余地があります。 Androidチームは、ジャックが現在のビルドプロセスよりも速くなることを望んでいますが、現時点ではそうではありません
さらに、JackとDexは公開されています。kotlinチームは、kotlinソースコードから.jackまたは.dexファイルを出力するツールを作成することを妨げるものはありません。
更新(2017/03/16)
幸いにも、ジャックは死んでいるので、Kotlin開発者には影響しません。
ジャックが未来なら、あなたはコトリンと過去に行き詰まるでしょう。現在、Jackは非JavaソースをDalvikバイトコードにコンパイルできるプラグインをサポートしていません。また、たとえJetBrainsがKotlinコンパイラーに新しいバックエンドを追加する必要があったとしても、それは簡単な作業ではありません。そのため、KillinをJillで使用する必要があり、現在使用しているツールチェーンに非常に似たものになるでしょう。
下の画像でわかるように、明示的にジャックをオフにすることが不可能な場合でも、プロジェクトをライブラリプロジェクトに変換してJillを使用することができます。そして、アプリケーションプロジェクトはこのライブラリプロジェクトを参照するだけです。
KotlinがJackでどのように動作するかを確認する唯一の方法は、おそらく実装されませんが、KotlinコンパイラにJavaバックエンド、つまりJava Xtend のようなコードこの場合、Kotlinコンパイラーによって生成されたコードは、他のJavaコードと同様にJackによって処理できます。
しかし、現時点では、Jackがリリースされたときに何をサポートするのか正確にはわかりません。何かが劇的に変化し、ジャックにKotlinサポートを追加することが可能になるかもしれません。
今日のブログ投稿( Kotlin's Android Roadmap )で述べたように:
現在、JackがKotlinで生成されたバイトコードを正しく処理できない問題がいくつかあります( 196084 および 203531 )。しかし、Googleチームと協力して、問題または回避策を提供してください。これが完了すると、すべてのクラスファイルを毎回翻訳するのではなく、増分コンパイル中にJillを使用して変更されたクラスファイルのみを翻訳できます(古いAndroidツール)で可能な唯一の動作です。
したがって、Kotlinは最終的にJack&Jillをサポートし、その恩恵を受けることになります。
最新のGoogle発表によると-
Java 8言語機能のサポートを現在のjavacとdxのツールセットに直接追加し、Jackツールチェーンを廃止することにしました。この新しい方向では、既存のツールとプラグインはJavaクラスファイル形式は引き続き動作します。今後、Java 8つの言語機能がAndroidビルドシステム。今後数週間でAndroid Studioの一部としてこれを開始することを目指しており、この決定を早期に共有したいと考えています。
Jackツールチェーンを介してJava 8のサポートを追加することを最初にテストしました。 Jackツールチェーンを試してみて、すばらしいフィードバックをくれてありがとう。新しいサポートがリリースされるまで、Jackを使用してJava 8コードをビルドし続けることができます。 。
したがって、ジャックツールチェーンがAndroid開発用のデフォルトツールチェーンになることを心配する必要はありません。引き続きkotlinを使用するか、通常のjavac/dxツールセットを使用できます。
公式のKotlinのブログからこのブログ投稿を既に見つけました:: Kotlin’s Android Roadmap
そこには、それを伝える部分があります:
Androidビルドのパフォーマンスを改善するために次に行うことは、Androidの新しい Jack and Jillツールチェーン との統合を提供することです。現在、Jackを妨げる問題がいくつかあります。 Kotlinが生成したバイトコードを正しく処理します( 196084 および 203531 )が、Googleチームと協力して問題を解決するか、回避策を提供する予定です。すべてのクラスファイルを毎回翻訳するのではなく、インクリメンタルコンパイル中にJillを使用して変更されたクラスファイルのみを翻訳できます(これは、古いAndroidツールで唯一可能な動作です)。
だから、@ LukasBergstromが言ったように、「過去に立ち往生する」ことに問題はありません;-)
このトピックにリンクされているReddit
ディスカッションも確認できます。 ジャックとジルとのコトリンのステータスは?
ハッピーコーディング。
Kotlin blog によると、リリース1.1-beta2の新機能セクション:
Jackツールチェーンが有効な場合のAndroidプロジェクトのビルドのサポート(jackOptions {true});