🔌

[Google I/O 2021 メモ]What’s new in Android Gradle plugin

2021/05/22に公開

動画

https://youtu.be/AZBW5StgF8o

Performance Improvements

  • Configuration Cache
    • ユーザーが同じビルドコマンドを呼ぶ度にタスクグラフを再計算しない
    • タスクツリーをシリアライズ/デシリアライズして再利用
    • AGPビルドタイムが改善
    • タスクの並列実行がしやすくなる→実行パフォーマンス改善

AGP7.0

  • Non-Transitive R
    • 大規模プロジェクトのビルドパフォーマンスが向上
    • リファクタツールで自動的に修正できる
  • Lint
    • Lintタスクを最新状態に。ライブラリに変更を加えない限りタスクの再実行は行われない
    • Lintタスクをキャッシュ可能に。パフォーマンス向上

New DSL

  • AGPのアップグレードを簡単に
  • ドキュメントが利用可能に
    • developer.android.com内
    • すべてのAPIが見れる
    • シンプルにしたが前のAPIも見れる
  • AGP Upgradle Assistant
    • 変更前にプレビュー表示

Variant API

  • Variant → ビルドタイプとフレーバー
  • Variantオブジェクトを使ってTaskに値を提供する
  • Variantオブジェクトを操作できるようにしてTaskの入力に直接影響を与えたかった → Variant API
  • その他のAGPコード、特にTaskはprivateになっている
    * 非公開APIはプラグインで直接使用してはいけない
  • Variant API は2つのカテゴリに分かれる
    • タスクの入力値へのアクセス
    • AGPは生成する中間ファイルへのアクセス
  • タスクへの入力パラメータに使用される値はPropertyになる
  • Gradleのプロバイダ/プロパティの概念は昨年のプレゼンテーションをみないとよくわからないでしょう
  • ライフサイクル
    • すべてのVariant APIブロック/ラムダはandroidComponentsの拡張機能で作成される
    • androidとandroidComponentsを分け、静的なものはandroidブロックに、動的なものはandroidComponentsブロックに配置される

    • Variantオブジェクトがロックされたあとに値を変更しようとすると失敗する
  • 中間生成物へのアクセス
    • get : 取得して正しいかどうか確認したり
    • replace : 別のファイルに置き換えたり
    • add : ファイルやディレクトリを追加したり

ASM API

  • Legacy Transform APIは柔軟だが複雑だった
  • Android Studio4.2にはバイトコード変換用の新しいAPIがある
  • パフォーマンスが高く、簡単に使用できる
  • GitHubにAPIレシピがある
  • Mediumの記事もある
  • ユースケースに合っていないようだったらissueを報告してほしい

Discussion