2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

巨大な aar を分割し、ビルド時に復元する

Posted at

こんなときに

  • Android アプリ開発で、aar 形式で提供されるライブラリーを使用しているが、aar ファイルが巨大すぎてそのまま commit & push すると GitHub に怒られるとき

どうする

  • aar ファイルを分割した状態で Git にコミットし、gradle でアプリをビルドする時に自動的に元の aar ファイルが復元される様にする

くわしく

普通に aar ファイルをライブラリーとしてインポートすると、build.gradle ファイルは以下の様になってるはずです。

configurations.maybeCreate("default")
artifacts.add("default", file('foo.aar'))

これを、以下の様に変更します。(ファイル名 foo.aar は適宜調整のこと)

plugins {
    id "base"
}

task archiveAar(type: Zip) {
    group = "Build"
    description = "Creates the aar archive."
    archiveFileName = "foo.aar"
    destinationDirectory = project.projectDir
    inputs.files {
        fileTree(".") {
            include "foo.aar.*"
        }
    }
    inputs.files.each {
        from zipTree(it)
    }
}

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

さらに、aar ファイルを一旦 unzip し、出てきたファイル群を適当な複数の部分集合に分割したあと、それぞれを zip ファイルとして圧縮し直します。
圧縮後のファイル名は include "foo.aar.*" のところにマッチする様に foo.aar.1, foo.aar.2, ... とかそんな感じにしておきます。
元の aar ファイル内のディレクトリー構成が新しい zip ファイル内でも保たれる様に気を付けてください。
最後に、分割後のファイルと build.gradle を Git にコミットして完了です。(GitHub に push した時に怒られない様にするには、分割 zip 後の各ファイルが 50 MB 未満となる様にすべきです。)

あとは普通にアプリをビルドすれば OK です。
(初回ビルド時のみ、まだ aar ファイルが復元されてないためにビルドが失敗することがあります。その場合は先に gradle archiveAar を単体で実行すると aar ファイルが生成されます)


筆者環境は Gradle バージョン 6.3 です。他のバージョンの Gradle では結果が異なる可能性があります。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?