Мы поддерживаем библиотеку Android. В последнее время мы обновили gradle, compileSdkVersion и версии поддержки библиотеки. (только используя com.android.support:design). Также мы обновили gcm-play-services
Библиотека публикуется в Artifactory со своими зависимостями также в pom-файле.
Это обновление отлично работает в проектах с современными инструментами сборки и вспомогательными библиотеками. Однако мы столкнулись с проблемой устаревших проектов, которые используют нашу библиотеку.
Вот версии библиотеки.
gradle android plugin -> 3.2.1
compileSdkVersion -> 28
targetSdkVersion -> 28
support library version -> 28.0.0
Вот версии проекта
compileSdkVersion -> 26
targetSdkVersion 26
support library version -> 26.0.1
и зависимости клиентской библиотеки поддержки
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'
после попытки построить проект с новой библиотекой, сборка завершается с этим журналом.
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"}
Мы избегаем каких-либо манипуляций в коде проекта, поэтому попытались решить это в библиотеке.
Мы понижаем все версии до соответствия версиям проекта. И опубликовал его снова с
compileSdkVersion -> 26
targetSdkVersion 26
support library version -> 26.0.1
Но после этого мы сталкиваемся с явной ошибкой слияния
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
Это происходит от gcm-play-services, у которого есть транзитивная зависимость support-v4: 26.1.0, указанная в дереве зависимостей.
и, чтобы разрешить это, добавили это в манифест
<meta-data
tools:node="replace"
tools:replace="android:value"
android:name="android.support.VERSION"
android:value="26.0.1" />
Это заставило все это работать. Но каковы же недостатки использования этого метатега в файле AndroidManifest?
Мы проверили этот подход со всей compileSdkVersion 26, 27, 28
и все соответствующие версии библиотеки поддержки. Кажется, все работает.
Мы ищем лучшие подходы к этому.
Альтернативное решение, которое мы попробовали
Мы опубликовали зависимость библиотеки поддержки в предоставленной области. Но в этом случае проекты, использующие библиотеку, должны добавить свою библиотеку поддержки, чтобы иметь возможность использовать без проблем. Но даже если они добавят библиотеку поддержки, будет ли проблемой, если у проекта будет другая версия библиотеки поддержки, отличная от той, с которой скомпилирована библиотека?