Я хочу создать конкретный плагин и применить его для всех проектов Android. Поэтому я создаю определенный файл Gradle, как показано ниже: my.gralde
:
initscript {
repositories {
maven { url "E:\\My\\repo" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
classpath group: 'my',name: 'plugin', version: '2.0-SNAPSHOT'
}
}
allprojects {
afterEvaluate { p ->
boolean isApp = p.plugins.hasPlugin('com.android.application')
boolean isLib = p.plugins.hasPlugin('com.android.library')
if (isApp || isLib) {
p.android {
defaultConfig { multiDexEnabled true }
dexOptions { javaMaxHeapSize "4g" }
}
p.apply plugin: my.plugin.InstrumentJarPlugin
}
}
}
, а мой класс плагинов представлен ниже (несвязанный код был удален):
public class InstrumentJarPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
def transform = new AllClassTransformation(project)
if (project.plugins.hasPlugin("com.android.application")) {
println "Apply in project: " + project.name
project.android.registerTransform(transform)
} else {
println "Not apply in project: " + project.name
}
}
}
Когда я объединяю содержимоефайла Gradle с файлом build.gradle в проекте, он нормально работает с плагином.
Но когда я разделяю его и собираю с помощью команды gradle.bat -I my.gradle assembleDebug
. Возникает следующая ошибка:
Caused by: org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method registerTransform() for arguments [svmc.paco.plugin.AllClassTransformation@5b404fe2] on object of type com.android.build.gradle.internal.dsl.BaseAppModuleExtension.
at org.gradle.internal.metaobject.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:179)
at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:164)
at com.android.build.gradle.internal.dsl.BaseAppModuleExtension_Decorated.invokeMethod(Unknown Source)
at svmc.paco.plugin.InstrumentJarPlugin.apply(InstrumentJarPlugin.groovy:45)
at svmc.paco.plugin.InstrumentJarPlugin.apply(InstrumentJarPlugin.groovy)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:42)
at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:50)
at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:267)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:155)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:152)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:152)
... 137 more
Любое предложение здесь?