Open8
AGP: "New Publishing DSL" 調査
個人 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"...?
AGP API reference を探してみたところ、 Publishing
がそれに該当しそうだ:
-
Publishing
https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/Publishing-
ApplicationPublishing
(application module 向け) https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/ApplicationPublishing -
LibraryPublishing
(library module 向け) https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/LibraryPublishing
-
document に使い方が書いてある
Android Studio BumbleBee Canary 2 の release note に言及あり
書かれている内容は Publishing
の document に書いてある内容の一部とほぼ同じなので新しい情報は特になし
AGP 7.1.0 beta 3 時点での関連実装
新しい component
-
Publishing
: ユーザが publish する variant について設定する API。基本 1 variant に 1 component (=singleVariant
)-
ApplicationPublishing
: app module 用 -
LibraryPublishing
: library module 用、複数 component の publish が可能 (=multipleVariants
)
-
-
VariantPublishingInfo
: 各 variant が publish できる component の一覧を運ぶやつ -
ComponentPublishingInfo
: Publish するためのSoftwareComponent
に関する情報
関連する処理
-
VariantManager#createVariant
- Variant に関する情報を組み立てて
VariantComponentInfo
を作る- この中で
Publishing
で設定された情報をからVariantPublishingInfo
を作る - これを app / library の task manager が受け取って component 登録する
- この中で
- Variant に関する情報を組み立てて
-
VariantDslInfoBuilder
-
VariantManager
で呼ばれて名前の通りVariantDslInfo
を作る - この中で
VariantPublishingInfo
の生成処理が呼ばれる
-
-
PublishingUtil.kt
-
VariantPublishingInfo
の生成処理が書かれてる場所 - 他にも DSL が opt-in されてるかの判定とかもある
-
-
ApplicationTaskManager
:doCreateTasksForVariant
,createSoftwareComponent
-
VariantComponentInfo
から publishing の情報を引っ張り出して component への登録を行ってる場所
-
-
LibraryTaskManager
:createBundleTask
,createComponent
-
VariantComponentInfo
から publishing の情報を引っ張り出して component への登録を行ってる場所2
-
使い方は ApplicationPublishing
や LibraryPublishing
, あと PublishingOptions
の document に書かれている
- https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/ApplicationPublishing
- https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/LibraryPublishing
- https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/PublishingOptions
"Software Components will not be created automatically for Maven publishing..." という warning や内部実装、また LibraryPublishingTest
の内容を見る限り publishing
block 内で指定した variant 名の SoftwareComponent しか登録されないように思われるが、手元の project では指定してない variant 名の component も取り出せてしまう...