StickyListHeaders風のライブラリを自作する-5
StickyListHeaders風のライブラリを自作する-4 - 日々是好日の続き。
ライブラリがとりあえず出せそうなレベルまで来たので、AAR ファイルの出力をしてみた。
……ら、めっちゃハマったのでメモ。
AAR ファイルの生成
基本的にはこちらの投稿のとおり。
しかし、libraryVariants
のとこらへんで次のような警告が出て思ったように AAR が出力されない。
やりたいことは、通常の出力である applicationName-release.aar
を、applicationName-1.0.aar
などのバージョンが載せられるようにスクリプトを編集すること。
defaultConfig { versionName "1.0" version = android.defaultConfig.versionName } libraryVariants.all { variant -> variant.outputs.all { output -> output.packageLibrary.exclude("libs/*") if (variant.name == android.buildTypes.release.name) { outputFileName = output.outputFile.name.replace(("-release.aar"), "-${version}.aar") } else if (variant.name == android.buildTypes.debug.name) { outputFileName = output.outputFile.name.replace((".aar"), "-${version}.aar") } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) }
これをこのままコピペして Gradle を Sync
すると、次のような警告が表示される。
WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'. It will be removed at the end of 2019. For more information, see https://d.android.com/r/tools/task-configuration-avoidance. To determine what is calling variantOutput.getPackageLibrary(), use -Pandroid.debug.obsoleteApi=true on the command line to display more information.
libraryVariants
とか variant.outputs
とかも正直全然わかっていないが、グーグル先生の力を借りて次のように解決した。
とりあえずの解決
libraryVariants
以下を次のように書き換え。
defaultConfig { versionName "1.0" version = android.defaultConfig.versionName } libraryVariants.all { variant -> variant.outputs.all { output -> if (variant.name == android.buildTypes.release.name) { outputFileName = "pinninglistview-${version}.aar" } else if (variant.name == android.buildTypes.debug.name) { outputFileName = "pinninglistview-debug-${version}.aar" } } } dependencies { // implementation → compileOnly compileOnly fileTree(dir: 'libs', include: ['*.jar']) }
outPutFileName
に直接アプリケーション名を打ち込む。
output.packageLibrary.~
や output.outputFile.~
等、output
に触るのはアウト……というか、2019年末までに使えなくなるから使うなということらしい。
じゃあそもそもこの output
ってなんなん?と思って調べると、
LibraryExtension - Android Plugin 3.4.0-dev DSL Reference
公式のこれが出てきたが、LibraryVariant
型の説明が見つからなかった(´・ω・`)もうムーリー
所感
Gradle 全然わからーん
Android Studio と Gradle の関係についてもっとわかりやすく教えてほしいヾ(:3ノシヾ)ノシ