赞
踩
Android Studio中对新建Gradle Plugin工程,并没有很好的支持,需要按要求新建特定的文件夹与文件。
针对这种情况,通过task任务,自动生成一个这样的脚手架工程,可以自动生成Gradle Plugin的结构。
自动创建插件task:
以下是一个自动创建android中Plugin插件的task。直接将这个task复制到任意工程的build.gradle中,同步后,即可得到一个Plugin插件。
其中三个入参,可自定义。
(1)moduleName代表生成的插件的最外部文件夹名称;
(2)packageName代表包名;
(3)className代表插件实现类的名称。如定义的className为 Simple,则会生成Simple.groovy类。
该task除了生成基本的插件框架外,附带将插件上传到本地文件夹的功能(如需上传到其他地方,修改地址即可)
该task任务,在工程中,基本只用一次,因此只需要将代码复制到任意工程的build.gradle中同步后,待生成完plugin后,即可删除。
- //包名
- def packageNme = 'com.component.easyuse'
- //类名
- def className = 'ComponentEasyUse'
- //文件夹名称
- def moduleName = 'gradlebuild'
- task gradlePluginCreate {
-
- setGroup('gradleBuild')
- setDescription('构建GradlePlugin插件框架')
- //*************文件夹与文件构建**********************
-
- def rootProjectPath = getRootDir().absolutePath
- println "rootProjectPath is:" + rootProjectPath
- def gradleProjectDir = file(rootProjectPath + "/${moduleName}")
- if (!gradleProjectDir.exists()) {
- println "文件夹${gradleProjectDir.name}不存在,新建中..."
- gradleProjectDir.mkdirs()
- }
- def packDirStr = packageNme.replace('.', '/')
- def groovyDir = file(gradleProjectDir.path + '/src/main/groovy/' + packDirStr)
- if (!groovyDir.exists()) {
- groovyDir.mkdirs()
- def groovyClassFile = file(groovyDir.path + "/${className}.groovy")
- if (!groovyClassFile.exists()) {
- groovyClassFile.createNewFile()
- def groovyClassContent = "package ${packageNme}\n" +
- "\n" +
- "import org.gradle.api.Plugin;\n" +
- "import org.gradle.api.Project;\n" +
- "\n" +
- "public class ${className} implements Plugin<Project> {\n" +
- " @Override\n" +
- " public void apply(Project project) {\n" +
- " println '这是一个测试Plugin'\n" +
- " }\n" +
- "}"
- groovyClassFile.write(groovyClassContent)
- }
- }
- def resDir = file(gradleProjectDir.path + '/src/main/resources')
- if (!resDir.exists()) {
- resDir.mkdirs()
- }
- def propertiesDir = file(resDir.path + '/META-INF/gradle-plugins')
- if (!propertiesDir.exists()) {
- propertiesDir.mkdirs()
- }
- def propertiesFile = file(propertiesDir.path + "/${packageNme}.properties")
- if (!propertiesFile.exists()) {
- propertiesFile.createNewFile()
- def implementationStr = "implementation-class = ${packageNme}.${className}"
- propertiesFile.write(implementationStr)
- }
- def buildGradleFile = file(gradleProjectDir.path + '/build.gradle')
- if (!buildGradleFile.exists()) {
- buildGradleFile.createNewFile()
- def buildStr = "// 应用插件\n" +
- "apply plugin: \"groovy\"\n" +
- "apply plugin: \"maven\"\n" +
- "\n" +
- "// 添加依赖\n" +
- "dependencies{\n" +
- " compile gradleApi()\n" +
- " compile localGroovy()\n" +
- "}\n" +
- "\n" +
- "// 代码仓库\n" +
- "repositories{\n" +
- " jcenter()\n" +
- "}\n" +
- "\n" +
- "uploadArchives {\n" +
- " repositories.mavenDeployer {\n" +
- " repository(url: uri('../repo')) //仓库的路径,此处是项目根目录下的 repo 的文件夹\n" +
- " pom.groupId = '${packageNme}' //groupId ,自行定义,一般是包名\n" +
- " pom.artifactId = '${className.toLowerCase()}' //artifactId ,自行定义\n" +
- " pom.version = '1.0.0' //version 版本号\n" +
- " }\n" +
- "}"
- buildGradleFile.write(buildStr)
- }
-
- def settingsFile = file(rootProjectPath + '/settings.gradle')
- if (!settingsFile.exists()) {
- settingsFile.createNewFile()
- }
- def settingIncludeStr = "include ':${moduleName}'"
- if (!settingsFile.text.contains(settingIncludeStr)) {
- settingsFile.append("\n" + settingIncludeStr)
- }
-
- }
别忘记最后通过android studio的sync,同步工程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。