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ノシヾ)ノシ