日々是好日

プログラミングについてのあれこれ、ムダ知識など

StickyListHeaders風のライブラリを自作する-5

StickyListHeaders風のライブラリを自作する-4 - 日々是好日の続き。

ライブラリがとりあえず出せそうなレベルまで来たので、AAR ファイルの出力をしてみた。

……ら、めっちゃハマったのでメモ。

AAR ファイルの生成

基本的にはこちらの投稿のとおり。

qiita.com

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

リポジトリ

github.com