Open8

AGP: "New Publishing DSL" 調査

nashcftnashcft

個人 project の AGP を 7.1.0 beta に更新したら、 gradle task 実行時に以下の warning が表示されるようになった (可読性のために適当な箇所に改行を加えた):

WARNING:Software Components will not be created automatically 
for Maven publishing from Android Gradle Plugin 8.0. 
To opt-in to the future behavior, set the Gradle property 
android.disableAutomaticComponentCreation=true 
in the `gradle.properties` file or use the new publishing DSL.

"the new publishing DSL"...?

nashcftnashcft

AGP API reference を探してみたところ、 Publishing がそれに該当しそうだ:

document に使い方が書いてある

nashcftnashcft

AGP 7.1.0 beta 3 時点での関連実装

新しい component

関連する処理

  • VariantManager#createVariant
    • Variant に関する情報を組み立てて VariantComponentInfo を作る
      • この中で Publishing で設定された情報をから VariantPublishingInfo を作る
      • これを app / library の task manager が受け取って component 登録する
  • VariantDslInfoBuilder
    • VariantManager で呼ばれて名前の通り VariantDslInfo を作る
    • この中で VariantPublishingInfo の生成処理が呼ばれる
  • PublishingUtil.kt
    • VariantPublishingInfo の生成処理が書かれてる場所
    • 他にも DSL が opt-in されてるかの判定とかもある
  • ApplicationTaskManager: doCreateTasksForVariant, createSoftwareComponent
    • VariantComponentInfo から publishing の情報を引っ張り出して component への登録を行ってる場所
  • LibraryTaskManager: createBundleTask, createComponent
    • VariantComponentInfo から publishing の情報を引っ張り出して component への登録を行ってる場所2
nashcftnashcft

"Software Components will not be created automatically for Maven publishing..." という warning や内部実装、また LibraryPublishingTest の内容を見る限り publishing block 内で指定した variant 名の SoftwareComponent しか登録されないように思われるが、手元の project では指定してない variant 名の component も取り出せてしまう...