Comme le studio Android a introduit deux nouveaux outils D8 et R8 . Selon la documentation de Google, D8 est un outil dex et R8 est un outil progressif mais leurs explications font presque la même chose que ci-dessous:
D8 est un dexer qui convertit le code en octets Java en code dex.
R8 est un outil de réduction et de réduction de programme Java qui convertit le code en octets Java en code dex optimisé.
Il semble que les deux convertissent le code en octets Java en code dex. Alors, que font-ils réellement en interne en cas de conversion de code dex?
D8 Dexer et R8 Rétractable
D8-> D8 est un dexer qui convertit le code en octets Java en code dex.
R8-> R8 est un outil de réduction et de réduction de programme Java qui convertit le code en octets Java en code dex optimisé.
Les développeurs Android savent que la compilation dex est une étape clé dans la construction d'un fichier APK. Il s’agit du processus de transformation du bytecode .class en bytecode .dex pour Android Runtime (ou Dalvik pour les anciennes versions d’Android). Le compilateur dex fonctionne généralement sous le capot du développement quotidien de vos applications, mais il influe directement sur le temps de création de votre application, la taille du fichier .dex et les performances d'exécution.
Le projet R8 utilise depot_tools du projet chrome pour gérer les dépendances. Installez depot_tools et ajoutez-le à votre chemin avant de continuer.
Le projet R8 utilise les fonctionnalités du langage Java 8 et nécessite un compilateur Java 8 et un système d'exécution.
Prise en charge de la véritable version de débogage. Pas besoin de changer la valeur de debuggable dans Le manifeste Android.
La construction incrémentielle insérera automatiquement debuggable == true lors de l’utilisation de Le "package d’application signé/non signé" ne le sera pas . Si debuggable = true est défini, les versions validées créeront réellement une version de débogage.
Prise en charge automatique de Proguard dans les versions validées. Seulement besoin d'avoir un proguard.config
propriété dans default.properties qui pointe vers un fichier de configuration proguard.
Complètement réécrit Visual Layout Editor. C'est vraiment un travail en cours.
Déplacez les widgets à l'intérieur d'une vue Mise en page, d'une vue Mise en forme à une autre et d'un fichier de mise en page à un autre.
Menu contextuel avec propriétés de type énumération/indicateur.
Je pense que l’introduction de ce blogpost est une excellente ressource pour répondre à cette question: https://jakewharton.com/r8-optimization-staticization
R8 est une version de D8 qui effectue également une optimisation. Ce n’est pas un outil ou une base de code distinct, mais le même outil fonctionnant dans un mode plus avancé. Où D8 analyse d'abord le bytecode Java dans sa propre représentation intermédiaire (IR), puis écrit le bytecode de Dalvik, R8 ajoute l'optimisation des passages sur l'IR avant son écriture.
D8 traite chaque fichier de classe Java individuellement sans examiner l'ensemble du programme. Cela rend la conversion rapide vers DEX, car les classes peuvent être traitées en parallèle et permet, lors du développement, une recompilation rapide lorsque le code d'une classe est modifié.
D'autre part, R8 (comme ProGuard) lit l'ensemble de l'application et apporte des modifications et des optimisations (par exemple, alignement) qui nécessitent de connaître la totalité de la hiérarchie des classes. Par exemple, R8 supprimera les classes et les méthodes inutilisées ("arborescence") et renommera les classes, les méthodes et les champs (à l'exception des points d'entrée de l'application).
Dans Android Studio 3.1, D8 a remplacé DX en tant qu'outil permettant de convertir les fichiers de classe Java en DEX, mais la version 8 n'a pas encore été activée.