簡體   English   中英

如何將生成文件夾中的生成代碼添加到 Gradle Android 庫插件中的路徑

[英]How to add a generated code from build folder to the path in a Gradle Android Library plugin

我有一個 Android 庫模塊,在build.gradle.kts腳本中,我制作了一個插件 class,在我正在做的插件的 apply 方法中:

import com.android.build.gradle.LibraryExtension

val libExtension = project.extensions.findByType(LibraryExtension::class.java)!!
libExtension.libraryVariants.all {
     val variantName = this.name
     val sourceDir = "${project.buildDir}/generated/my-plugin/$variantName"
     libExtension.sourceSets[variantName].kotlin.srcDir(sourceDir)
}

(variantName 是“debug”或“release”)

我認為這段代碼會將文件夾添加為源文件夾,但它沒有(因此我在文件夾中的 kotlin class 不可用)。

在我的 android 庫模塊的 build 文件夾下:

我的文件夾(不工作/不藍色):

在此處輸入圖像描述

構建目錄中正確工作的文件夾,由另一個插件創建:

在此處輸入圖像描述

好的,所以問題中的代碼有效,我沒那么瘋狂><。

當我將其拆分為演示時,它表明它可以正常工作。

這是不起作用的代碼:

import com.android.build.gradle.LibraryExtension

val libExtension = project.extensions.findByType(LibraryExtension::class.java)!!
libExtension.libraryVariants.all {
     val variantName = this.name
     val sourceDir = "${project.buildDir}/generated/my-plugin/$variantName"
     // This task generates some code and puts it in the sourceDir
     val tp = project.tasks.register<MyTask>("${variantName}MyTask")
     tp.get().doLast {
         libExtension.sourceSets[variantName].kotlin.srcDir(sourceDir)
     }
}

我假設“doLast”是阻止它在 IDE 中工作的原因。 我的猜測是,如果我先生成文件,然后將文件夾設置為源集,則不會觸發 IDE 動作。 但是,如果我先將其設置為源集,然后生成文件,它會起作用嗎?

無論如何都把問題留在這里,因為我發現很難找到任何人談論這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM