我想創建一個自定義插件,我可以在gradle.build文件中應用。有幾種方法可以做到這一點,但我使用buildSrc文件夾來做到這一點。這意味着該插件將被綁定到我的構建,而不是便攜式。 從docs的buildSrc文件夾應具有以下特性:無法加載在Android Studio中的自定義Gradle插件的類
buildSrc項目 你可以把源在rootProjectDir/buildSrc/src目錄/主/常規目錄的任務類。 Gradle將負責編譯和測試任務類並使其在構建腳本的類路徑中可用。任務類對構建使用的每個構建腳本都可見。但是,它在構建版之外是不可見的,因此您不能在構建它的構建之外重用任務類。使用buildSrc項目方法會將任務聲明(即任務應該執行的任務聲明)從任務實現中分離出來,也就是說,任務是如何實現的。
但無論如何,我的問題是下面:
我已經創造了根項目路徑buildSrc目錄,創建了由IDE識別的常規文件夾。
下面是我的摺疊結構,而我得到的錯誤:現在,這裏
是任務和插件本身:
RenameAppVersionNameTask.groovy:
package com.myplugins
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class RenameAppVersionNameTask extends DefaultTask {
@TaskAction
def run() {
project.configure(project) {
// Check if plugin works on an Android module
if (it.hasProperty("android")) {
// Iterate over app build variants (build types + flavors)
project.android.applicationVariants.all { variant ->
// Only change debug build type variants
if (variant.buildType.name == project.android.buildTypes.debug.name) {
// Rename versionName
def customVersionName = variant.mergedFlavor.versionName
variant.mergedFlavor.versionName = customVersionName + " custom"
}
}
}
}
}
RenameAppVersionNameTask() {
group = 'customPlugin'
description = 'Renames versionName of the app depends on the current git branch name'
}
}
CustomPlugin.groovy:
package com.myplugins
import org.gradle.api.Plugin
import org.gradle.api.Project
class CustomPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.task('renameAppVersionName', type: RenameAppVersionNameTask)
project.tasks.getByName('preBuild').dependsOn('renameAppVersionName')
}
}
我對gradle這個同步接收的錯誤是:
Failed to sync Gradle project 'My GradlePluginApplication'
Error:Unable to load class 'CustomPlugin'.
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
<a href="syncProject">Re-download dependencies and sync project (requires network)</a></li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
<a href="stopGradleDaemons">Stop Gradle build processes (requires restart)</a></li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
還我發現我甚至不能應用插件:
我確認Android Studio中使用gradle這個包裝。 也如果需要,下面gradle-wrapper.properties是:
distributionBase = GRADLE_USER_HOME distributionPath =包裝紙/ dists中 zipStoreBase = GRADLE_USER_HOME zipStorePath =包裝紙/ dists中 distributionUrl = HTTPS://services.gradle.org/distributions /gradle-2.10-all.zip
我正在關注演示。這就是爲什麼我這樣構建它。顯然它可以通過一項任務完成。我沒有意識到我需要一個build.gradle文件。這解決了我的問題。謝謝。 – j2emanue
在我的情況下,我丟失了「jcenter()」存儲庫,只有「mavenCentral」,thx要求我添加jcenter(當然這是在buildSrc目錄中的build.gradle) – xiaoyee