Patch AndroidX


Google I / O 2018 a introduit un remplacement pour les bibliothèques de support existantes - AndroidX


Initialement, les bibliothèques de support ont été conçues pour assurer la compatibilité descendante des nouvelles API et étaient étroitement liées au système d'exploitation. Les bibliothèques de support ont été développées dans des branches internes, qui fusionnaient périodiquement dans le projet Open Source Android (AOSP). Cette approche a limité la demande d'extraction de fusion de la communauté à de petites périodes de temps lorsque le code AOSP et le code interne de Google étaient synchronisés. De plus, pour travailler avec les bibliothèques de support, il était nécessaire de pomper tout le code de la plate-forme, ce qui représente plus de 40 Go de code source. Pour mon disque de 250 Go, c'est beaucoup.


La fonctionnalité actuelle des bibliothèques de support est beaucoup plus large que l'idée d'origine. Par exemple, il est implémenté un composant pour simplifier le développement de l'interface utilisateur AppCompat, un composant pour travailler avec les bases de données Room, un composant pour les tâches WorkManager en arrière-plan. Beaucoup de ces bibliothèques sont initialement rétrocompatibles et peu reliées à l'API Android. Le nombre dans le numéro de bibliothèque de support indique le niveau minimum d'API qu'il prend en charge. Par exemple, support-v7 prend en charge l'API Android version 7 et supérieure. Cependant, à partir de la version 26.0.0, les bibliothèques de prise en charge prennent en charge Android API 14 et supérieur. Une difficulté distincte est la nécessité de mettre à jour simultanément toutes les bibliothèques de support. Tout cela indique que les bibliothèques de support sont devenues obsolètes et doivent être repensées.


L'équipe de développement a passé plusieurs années à isoler les bibliothèques de support dans un petit projet distinct avec lequel vous pouvez travailler avec Android Studio et Gradle. Le développement a été transféré dans une branche distincte, qui est récemment devenue publique. Les bibliothèques mises à jour sont appelées AndroidX. Une autre différence importante entre les nouvelles bibliothèques est la possibilité de mises à jour indépendantes. Google promet une compatibilité binaire dans le cadre d'une version majeure, ce qui permettra d'utiliser recyclerview version 1.0 et AppCompat version 1.9 dans le même projet.


À mon avis, c'est la bonne étape et logique dans le développement des bibliothèques de support. J'ai dû gravement personnaliser plusieurs fois les composants des bibliothèques de support, ce qui a conduit à la nécessité de créer un package com.android.support dans mon projet ... pour accéder aux classes / méthodes / champs privés du package.


Maintenant, je propose de «pirater» une bibliothèque de la famille AndroidX avec moi. En tant que tutoriel, j'ai choisi CardView. Je vais influencer le comportement de CardView sans apporter de modifications au code en l'utilisant.


Nous avons besoin: d'un ordinateur fonctionnant sous Linux ou MacOS (Windows n'est pas pris en charge), le SDK Android, éventuellement Android Studio (j'ai utilisé la version 3.1.3)


Et les fenêtres?

Pour télécharger les sources, il est recommandé d'utiliser l'utilitaire de mise en pension , qui n'est pas disponible pour Windows. Les sources peuvent également être téléchargées en utilisant git, par exemple, comme ceci: git clone --single-branch -b androidx-master-dev https://android.googlesource.com/platform/frameworks/support Cependant, dans ce cas, elles ne seront pas Utilitaires et dépendances compilés téléchargés. Je n'ai pas vérifié à quel point il est essentiel de construire


Pour commencer, j'ai préparé un petit exemple en utilisant AndroidX.


Faits saillants:


Utiliser AndroidX


 def cardViewVer = '1.0.0-beta01' dependencies { implementation "androidx.cardview:cardview:$cardViewVer" } 

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="32dp" android:layout_marginEnd="32dp" android:layout_marginLeft="32dp" android:layout_marginRight="32dp" android:layout_marginStart="32dp" android:layout_marginTop="32dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </androidx.cardview.widget.CardView> </FrameLayout> 

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 

En conséquence, nous obtenons l'application suivante:


dessin

Passons à AndroidX


Tout d'abord, vous devez installer l'utilitaire repo, créé pour simplifier le travail avec git dans le contexte d'Android.


Nous créons un dossier de travail pour nos manipulations, bien que vous puissiez également utiliser le répertoire personnel.


 mkdir androidX 

Installez l'utilitaire


 d androidX mkdir bin curl https://storage.googleapis.com/git-repo-downloads/repo > ./bin/repo chmod a+x ./bin/repo PATH={some_path}/androidX/bin/:$PATH 

Permettez-moi d'expliquer ce que nous venons de faire:
Dans le dossier androidX, nous avons créé le dossier repo, où nous avons téléchargé le fichier sur https://storage.googleapis.com/git-repo-downloads/repo , rendu le fichier exécutable et ajouté le dossier bin à PATH dans le cadre de la session de terminal en cours.
Dans mon cas, la dernière commande ressemblait à ceci: PATH = ~ / Work / projects / androidX / bin /: $ PATH


Téléchargez la source AndroidX:


Créez le dossier androidX / androidX-source et actualisez-le


 mkdir androidX-source cd androidX-source 

Nous initialisons le référentiel local. Il télécharge environ 16 mégaoctets de données sur les branches existantes dans le référentiel.


 repo init -u https://android.googlesource.com/platform/manifest -b androidx-master-dev 

Dans le processus, le nom et le courrier de l'utilisateur seront extraits de la configuration globale du concert, dans mon cas, cela ressemblait à ceci:


 Your identity is: Andrew <me@example.com> If you want to change this, please re-run 'repo init' with --config-name      ,      .          . Testing colorized output (for 'repo diff', 'repo status'): black red green yellow blue magenta cyan white bold dim ul reverse Enable color display in this user account (y/N)? 

J'ai répondu par l'affirmative à la dernière question.
À la fin, nous recevons un message


 repo has been initialized in /Users/{user}/Work/projects/androidX/androidX-source 

Ensuite, téléchargez la source directement (environ 3 gigaoctets)


 repo sync -j8 -c 

Nous pouvons ouvrir les sources téléchargées dans Android Studio ou tout autre éditeur. Le dossier racine du projet gradle est situé dans: androidX/androidX-source/frameworks/support/


Il existe de nombreux modules avec différentes fonctionnalités et plusieurs applications de test. Nous pouvons les assembler et les installer pour vérifier les performances.


Ouvrez la classe androidx.cardview.widget.RoundRectRrawDrawable dans le module cardview
Ajoutez une blague inoffensive à la méthode onDraw


 canvas.drawText(“Hacked!”, 100, 100, paint); 

Patch complet


Pour le projet, la tâche Gradle createArchive est décrite, qui collectera les bibliothèques androidX et les placera dans le référentiel maven local. Adresse du référentiel: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo


Pour l'utiliser, vous devez spécifier le chemin dans le fichier de construction racine.


maven { url 'androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo' }


Veuillez noter que la version assemblée peut être plus récente que dans le référentiel Google. Au moment d'écrire ces lignes, j'ai compilé une version de la bibliothèque androidX 1.0.0-rc01. Vous pouvez afficher la version de la bibliothèque compilée dans le référentiel androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo/androidx/cardview/cardview/maven-metadata.xml local: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo/androidx/cardview/cardview/maven-metadata.xml


Exemple mis à jour


Nous allons reconstruire notre application et voir l'image suivante:


dessin

AndroidX patché avec succès!


Qu'est-ce que cela nous donne:


  • Nous pouvons résoudre les problèmes critiques sans attendre une mise à jour de Google. Soit dit en passant, l'équipe AndroidX accepte les demandes de tirage.
  • Personnalisez fortement la bibliothèque androidX.

Liens connexes:
Documentation de la bibliothèque de support
Blog du développeur
Guide de contribution AndroidX
Suivi des tâches AndroidX
Sources AndroidX

Source: https://habr.com/ru/post/fr418723/


All Articles