🎃

既にあるAARにJARを追加で含めたいときの build.gradle

2023/04/05に公開

仕事でちょっと作ってみたけど、秒でお役御免になったのでZennで供養します 🪦

どこかから拾ってきたAARパッケージにJARパッケージを追加したいときってありますよね(通常、ないです)

そんなときはこうします、というのを紹介します。

まずファイル構成としてはこんな感じにしておきます。

root/
├─ build.gradle
├─ aar-bridge/
│  ├─ build.gradle
│  ├─ foo-sdk.aar
│  ├─ bar-lib.jar // ←
│  ├─ baz-lib.jar // ←
├─ app/
│  ├─ settings.gradle
│  ├─ build.gradle

以下のような ./aar-bridge/build.gradle を組みます。

plugins {
    id "base"
}

def archiveSourceName = "foo-sdk.aar"
def archiveDestName = "foo-sdk_repacked.aar"

task archiveAar(type: Zip) {
    group = "Build"
    description = "Creates the aar archive."
    archiveFileName = archiveDestName
    destinationDirectory = project.projectDir

    from zipTree(archiveSourceName)
    into("libs") {
        from fileTree(".").include("*.jar")
    }
}

configurations.maybeCreate("default")
artifacts.add("default", archiveAar.archiveFile)

この解説のキモは↑のコードですが、AARの libs フォルダに対して、追加したいjarを含んだ状態で再度zipしなおしています。

その後、 ./settings.gradle では aar-bridge を参照させます。

include ':app'
include ':aar-bridge'

./app/build.gradle の dependencies に書き足すような話もあるんですが、僕の環境では不要でした。

参考にしました

Discussion