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
これは、依存関係ツリーにリストされているsupport-v4:26.1.0推移的依存関係を持つgcm-play-servicesに由来します。
そしてそれを解決するために、これをマニフェストに追加しました
<meta-data
tools:node="replace"
tools:replace="android:value"
android:name="android.support.VERSION"
android:value="26.0.1" />
これですべてうまくいきました。しかし、このメタタグをAndroidManifestファイルに配置することの欠点は何でしょうか?
このアプローチは、すべてのcompileSdkVersion 26、27、28および対応するすべてのサポートライブラリバージョンでテストしました。すべてが機能しているようです。
私たちはこれに対するより良いアプローチを探しています。
私たちが試した代替ソリューション
提供されたスコープでサポートライブラリの依存関係を公開しました。ただし、この場合、ライブラリを使用するプロジェクトは、問題なく使用できるようにサポートデザインライブラリを追加する必要があります。しかし、サポートライブラリを追加したとしても、プロジェクトのサポートライブラリのバージョンが異なる場合、どのライブラリでコンパイルされるかは問題になりますか?
このマニフェストメタデータは、クライアントがマニフェストで同じ方法でandroid.supportの別のバージョンを強制するサポートライブラリを使用している場合に問題を引き起こす可能性があります。したがって、SDKでこの行を使用することは避けてください。クライアントがあなたが言ったようにサポートライブラリを提供しない場合、スコープ 'provided'での公開も機能せず、クラッシュを引き起こします。
私が見つけた解決策は、support:design:27.1.0を使用することでした。これは、他のバージョンのサポートライブラリと競合しない魔法のライブラリです。何日も試した後、この問題が解決され、サードパーティが別のバージョンのサポートデザインを使用していてもクラッシュが発生しないことを確認できてとてもうれしく思いました。それがあなたの問題も解決することを願っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加