web-dev-qa-db-fra.com

Différence entre D8 et R8 Android

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? 

8
0xalihn

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.

  • Nouveau schéma de numéros de version suivant le numéro de révision du SDK Tools.
  • 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.

    • glisser-déposer complet de la palette à la disposition pour toutes les classes de disposition.
    • 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.

    • Nouveaux contrôles de zoom.
10
Dreamer
  • D8 est un dexer qui convertit le code octet Java en dex code.D8 est un remplacement Du dexer DX. 
  • R8 est un outil Java shrinking and Minification qui convertit le code en octets Java en code dex optimisé.

pour plus de détails ...

1
Ashish Singh

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.

1
Fred Porciúncula

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.

0
Mathias Rav