Nous maintenons une bibliothèque Android. Dernièrement, nous avons mis à jour gradle, compileSdkVersion et les versions de la bibliothèque de support. (en utilisant uniquement com.Android.support:design). Nous avons également mis à jour gcm-play-services. La bibliothèque est publiée sur Artifactory avec ses dépendances également dans un fichier pom. Cette mise à jour fonctionne parfaitement sur les projets avec des outils de construction et des bibliothèques de support à jour. Cependant, nous rencontrons un problème avec les projets obsolètes qui utilisent notre bibliothèque. Voici les versions de la bibliothèque.
gradle android plugin -> 3.2.1
compileSdkVersion -> 28
targetSdkVersion -> 28
support library version -> 28.0.0
Voici les versions du projet
compileSdkVersion -> 26
targetSdkVersion 26
support library version -> 26.0.1
et dépendances de la bibliothèque de support client
implementation 'com.android.support:cardview-v7:' + androidSupportV
implementation 'com.android.support:recyclerview-v7:' + androidSupportV
implementation 'com.android.support:appcompat-v7:' + androidSupportV
implementation 'com.android.support:design:' + androidSupportV
implementation 'com.android.support:support-v4:' + androidSupportV
implementation 'com.android.support:support-annotations:28.0.0'
après avoir essayé de construire le projet avec la nouvelle bibliothèque, la construction échoue avec ce journal.
AGPBI: {"kind":"error","text":"error: resource android:attr/dialogCornerRadius not found.","sources":[{"file":"/Users/umutyusuf/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/d4439e502685c256006fa4bec8edb713/res/values-v28/values-v28.xml","position":{"startLine":8,"startColumn":4,"startOffset":447,"endLine":11,"endColumn":12,"endOffset":684}}],"original":"","tool":"AAPT"}
AGPBI: {"kind":"error","text":"error: resource android:attr/dialogCornerRadius not found.","sources":[{"file":"/Users/umutyusuf/Documents/repo/core-bootstrap/core-android-client-app/PointrSample-Ozion-v5.0.8/app/build/intermediates/incremental/mergeDebugResources/merged.dir/values-v28/values-v28.xml","position":{"startLine":10}}],"original":"","tool":"AAPT"}
AGPBI: {"kind":"error","text":"error: resource android:attr/fontVariationSettings not found.","sources":[{"file":"/Users/umutyusuf/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/d4439e502685c256006fa4bec8edb713/res/values/values.xml","position":{"startLine":1303,"startColumn":4,"startOffset":70911,"endColumn":68,"endOffset":70975}}],"original":"","tool":"AAPT"}
AGPBI: {"kind":"error","text":"error: resource android:attr/ttcIndex not found.","sources":[{"file":"/Users/umutyusuf/.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/d4439e502685c256006fa4bec8edb713/res/values/values.xml","position":{"startLine":1303,"startColumn":4,"startOffset":70911,"endColumn":68,"endOffset":70975}}],"original":"","tool":"AAPT"}
Nous évitons de faire des manipulations dans le code du projet, donc nous avons essayé de le résoudre dans la bibliothèque.
Nous rétrogradons toutes les versions pour qu'elles correspondent aux versions du projet. Et nous le publions à nouveau avec
compileSdkVersion -> 26
targetSdkVersion 26
support library version -> 26.0.1
Mais après cela, nous sommes confrontés à une erreur manifeste de fusion.
Error:
Attribute meta-data#android.support.VERSION@value value=(26.0.1) from [com.android.support:cardview-v7:26.0.1] AndroidManifest.xml:25:13-35
is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override
Ceci provient de gcm-play-services dont la dépendance transitive support-v4:26.1.0 est listée dans l'arbre des dépendances.
et pour le résoudre, j'ai ajouté ceci au manifeste
<meta-data
tools:node="replace"
tools:replace="android:value"
android:name="android.support.VERSION"
android:value="26.0.1" />
Cela a permis de tout faire fonctionner. Mais maintenant, quels seraient les inconvénients de mettre cette balise méta dans le fichier AndroidManifest ?
Nous avons testé cette approche avec toutes les versions de compileSdkVersion 26, 27, 28 et toutes les versions correspondantes de la bibliothèque de support. Toutes semblent fonctionner.
Nous sommes à la recherche de meilleures approches à ce sujet.
Solution alternative que nous avons essayée
Nous avons publié la dépendance de la bibliothèque de support dans la portée fournie. Mais dans ce cas, les projets utilisant la bibliothèque doivent ajouter leur bibliothèque de conception de support pour pouvoir l'utiliser sans problème. Mais même s'ils ajoutent la bibliothèque de support, cela poserait-il un problème si le projet avait une version de la bibliothèque de support différente de celle avec laquelle elle est compilée ?