【发布时间】:2019-12-18 23:29:14
【问题描述】:
我正在尝试编写一个 Gradle 插件,它封装了我项目中 android { ... } 块的常见配置设置。一个示例是添加dev 产品风味:
develop {
applicationIdSuffix ".dev"
versionCode 100000
versionName appVersionName + " (development)"
}
在 Gradle 插件中,我按如下方式应用此配置:
class MyAndroidPlugin : Plugin<Project> {
private lateinit var myExtension: MyExtension
override fun apply(project: Project) {
myExtension = project.extensions.create(MyExtension.NAME, MyExtension::class.java)
val androidExtension = extensions.findByName("android") as AppExtension
androidExtension.productFlavors.create("dev") {
with(project) {
applicationIdSuffix = ".dev"
versionCode = 100000
versionName = "${myExtension.appVersionName} (development)"
}
}
}
}
...和我的自定义扩展类
open class MyExtension {
companion object {
const val NAME = "myplugin"
}
var appVersionName: String? = "9.9.9"
}
当我在一个 Android 项目中配置我的插件时...
apply plugin: "com.android.application"
apply plugin: "com.example.android.gradle"
android {
...
}
myplugin {
appVersionName = "3.2.1"
}
...然后versionName 没有被修改 - 它仍然是“9.9.9”。似乎“3.2.1”值应用得不够早。我试过project.afterEvaluate { ... } 导致以下错误:
Android 任务已创建。
调用 android.applicationVariants、android.libraryVariants 或 android.testVariants 时会发生这种情况。
一旦调用了这些方法,就无法继续配置模型。
【问题讨论】:
-
我只是猜测,尝试更改“versionName”命名,而不是
${myExtension.appVersionName}=>${myExtension.versionName}。 -
@mmmatey 我的错。我修复了变量名。谢谢。
标签: android gradle android-gradle-plugin gradle-plugin