98 votes

Fonctionnalités de Java N 8 Android (compilateur Jack) et Kotlin interop

Google vient de publier une preview pour le prochain Android N avec quelques fonctionnalités intéressantes, la plus notable étant partielle Java 8 support de la langue. Ceci est possible grâce à la nouvelle Prise chaîne d'outils Google est de travailler.

Le courant de la chaîne à l'aide de javac ou kotlinc:
javac (.java --> .class) --> dx (.class --> .dex)
kotlinc (.kt --> .class) --> dx (.class --> .dex)

New Jack de la chaîne:
Jack (.java --> .jack --> .dex)

Je suis en supposant que Google va pousser en avant vers la prise Jack de la valeur par défaut de la chaîne de développement Android.

Ma question est de savoir comment cette nouvelle chaîne d'incidence sur moi, dans l'avenir, comme un kotlin de l'utilisateur pour le développement Android? Vais-je rester "coincé dans le passé"?

Mise à jour: Hadi Hariri, de JetBrains, mentionné qu'ils vont sortir quelques infos sur ce sujet. Je mettrai à jour ce post dès qu'ils le feront.

Mise à jour 2: Il ressemble à JetBrains est vraiment engagé à soutenir Kotlin pour Android dans le long terme. Je suis un heureux kotlin utilisateur :).

63voto

Lukas Bergstrom Points 507

avertissement : Je travaille sur Jack

Cela n’affectera pas vous. Compilateur de Kotlin produit bytecode Java 6, que Jack/Jill pouvez importer correctement.

15voto

Dhaval Jivani Points 1295

@Pavel Dudka

Jack est un compilateur. Semblable à javac, mais il fait un peu autre chose:

enter image description here

Comme vous pouvez le voir, Jack compile le code source Java directement dans Dex fichier! Nous n'avons pas d'intermédiaire *.les fichiers de classe de plus, donc dx outil n'est pas nécessaire!

Mais attendez! Que faire si je inclure une bibliothèque tierce, dans mon projet (qui est une collection de .les fichiers de classe)?

Et c'est lorsque Jill entre en jeu:

enter image description here

Jill peut traiter des fichiers de classe et de les transformer en spécial Jayce format qui peut être utilisé comme une entrée Jack compilateur.

Maintenant, nous allons faire un pas de côté pour un deuxième et pense que... Qu'est-ce qui arrivera à tous les refroidir plugins que nous avons eu tellement accro? Ils ont tous besoin .les fichiers de classe et Jack compilateur n'ont pas de ces...plus

Heureusement, Jack fournit certains de ces important pour nous de fonctions de la boîte:

  • Retrolambda - ne sera pas nécessaire. Jack peut gérer correctement lambdas
  • Proguard - il est cuit dans la Prise maintenant, de sorte que vous pouvez toujours utiliser la dissimulation et de la minimisation

Avantages:

Jack prend en charge le langage de programmation Java 1.7 et intègre des fonctionnalités supplémentaires décrites ci-dessous.

  • Predexing

    Lors de la génération d'un JACK fichier de la bibliothèque de la .dex de la bibliothèque est généré et stocké à l'intérieur de l' .jack le fichier de la bibliothèque comme un pré-dex. Lors de la compilation, JACK réutilise le pré-dex de chaque bibliothèque. Toutes les bibliothèques sont pré-dexed.

  • Compilation incrémentielle

    Compilation incrémentielle signifie que seuls les composants qui ont été touché depuis la dernière compilation, et leurs dépendances, sont recompilées. Différentiels de compilation peuvent être beaucoup plus rapides que d'une compilation complète lorsque des changements sont limités à seulement un nombre limité de composants.

  • Reconditionnement

    JACK utilise jarjar fichiers de configuration à faire le reconditionnement.

  • Multidex soutien

    Depuis dex fichiers sont limités à 65K méthodes, applications, avec plus de 65K méthodes doivent être divisés en plusieurs fichiers dex. (Voir "création d'Applications avec Plus de 65K Méthodes" pour plus d'informations sur multidex.)

Inconvénients:

  • Transformer l'API n'est pas pris en charge par Jack - il n'y a aucun intermédiaire bytecode Java, vous pouvez le modifier, de sorte que certains plugins, je n'ai pas mentionné ici s'arrête de fonctionner
  • Annotation processing n'est pas actuellement pris en charge par Jack, donc si vous dépendent les bibliothèques comme un Poignard, AutoValue, etc., vous devriez réfléchir à deux fois avant de passer à Jack. EDIT: Comme l'a souligné Jake Wharton, Jack en N Aperçu a l'annotation de traitement de soutien, mais il n'est pas exposé encore par le biais de Gradle.
  • Les peluches des détecteurs qui fonctionnent sur un bytecode Java ne sont pas pris en charge.
  • Jacoco n'est pas pris en charge - eh bien, personnellement, je trouve Jacoco discutable (il ne marche pas vraiment montrer ce que vous voulez voir), donc peut tout à fait vivre sans elle
  • Dexguard - enterprise version de Proguard est actuellement pas pris en charge

7voto

Michael Points 16659

Si Jack est l'avenir, alors vous serez coincé dans le passé avec Kotlin. Actuellement Jack ne supporte pas les plugins qui permet de compiler des non-source Java en bytecode Dalvik. Et même si elle n'a JetBrains serait nécessaire d'ajouter un nouveau backend de la Kotlin compilateur, ce qui n'est pas une tâche triviale. Ainsi, vous aurez à utiliser Kotlin avec Jill et ça va être quelque chose de très similaire à l'ensemble des outils que vous utilisez maintenant.

Comme vous pouvez le voir dans l'image ci-dessous, même si c'est impossible explicitement désactiver Jack, vous serez toujours en mesure de convertir le projet pour un projet de bibliothèque à utiliser Jill. Et le projet d'application va juste faire référence à ce projet de bibliothèque.

Jack and Jill Application Build

La seule façon que je vois comment Kotlin peut travailler avec Jack, qui ne sera probablement pas mis en œuvre, est l'ajout d'un Java backend de la Kotlin compilateur, c'est à dire un client qui génère du code Java comme Xtend. Dans ce cas, le code généré par le Kotlin compilateur peuvent être traitées par Jack comme tout autre code Java.

Mais pour le moment nous ne savons pas exactement ce que Jack va soutenir quand il sortira. Peut-être que quelque chose va changer de façon spectaculaire et l'ajout de Kotlin soutien à Jack deviendra possible.

7voto

Teovald Points 1667

Google ne va pas pousser Jack comme l'outil par défaut, mais Jack and Jill.
La compilation .les fichiers de classe à dex avec Jill est là pour rester. Sinon, vous pouvez dire adieu à jar/aar bibliothèques.

Si Jack Jill sera plus lente est encore en débat. Android équipe espère que jack sera plus rapide que l'actuel processus de construction, mais ce n'est pas le cas actuellement

En outre, Jack et Dex sont disponibles dans le public, rien n'empêche le kotlin de l'équipe de la rédaction d'un outil de l'émettre .jack ou .dex des fichiers à partir de kotlin code source.

5voto

hotkey Points 119

Comme dit dans le billet de blog (Kotlin Android feuille de route) qui est apparu aujourd'hui:

Maintenant il y a certains problèmes qui empêchent la Prise de la manipulation de Kotlin-bytecode généré correctement (196084 et 203531), mais nous avons l'intention de travailler de concert avec l'équipe de Google afin de résoudre les questions ou de proposer des solutions de rechange de notre côté. Une fois cela fait, nous serons en mesure de traduire seulement changé les fichiers de classe à l'aide de Jill cours de compilation incrémentale, par opposition à la conversion de tous les fichiers de classe de tous les temps (qui est le seul comportement possible dans l'ancien Android outillage).

Donc Kotlin finira par soutenir Jack & Jill et obtenir des avantages.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X