在上一篇【Gradle系列(中篇)】中,我们已经完成了在自定义插件中对class文件代码的注入功能,只不过是在主项目app中使用自定义插件的,那么能不能在library中使用自定义插件呢?当然可以,这不是废话么,OK,那我们就来试一下,看看会不会踩坑~
首先,我们先来在项目中新建一个Android Library,名称暂且叫做“mylibrary”,如下:
这里我新建了一个类叫做“ToastUtils”,包含了一个空方法showToasShort,后面我们就在showToasShort方法中注入一行代码,来弹出一个Toast提示。
Android Library已经创建好了,然后我们在app中去引用这个module,代码如下:
dependencies {
···
implementation project(':mylibrary')
···
}
之前我们依赖插件和传值是在app中进行的,也就是下面这段代码,现在我们从app的build.gradle中移除,然后放到mylibrary的build.gradle中(传值要对应修改)。
apply plugin: 'custom-gradle-plugin'
InjectCodeToClass {
className = "ToastUtils"//类名
packageName = "com.zhuyong.mylibrary"//类所在包名
methodName = "showToasShort"//方法名
injectCode = "android.widget.Toast.makeText(context,\"这是我在Library中插入的代码\",android.widget.Toast.LENGTH_SHORT).show();"//要注入的代码
}
接下来Sync一下,Build过程直接报错了,报错信息如下:
我们重点看这几句:
Caused by: org.gradle.api.UnknownDomainObjectException: Extension of type 'AppExtension' does not exist. Currently registered extension types: [ExtraPropertiesExtension, DefaultArtifactPublicationSet, ReportingExtension, SourceSetContainer, JavaPluginExtension, NamedDomainObjectContainer, LibraryExtension]
其中 Extension of type 'AppExtension' does not exist.这句就是AppExtension类型不存在,后面的意思是