当前位置:   article > 正文

Android中Plugin插件工程的自动生成_android groovy plugin

android groovy plugin

一、Task作用

Android Studio中对新建Gradle Plugin工程,并没有很好的支持,需要按要求新建特定的文件夹与文件。

针对这种情况,通过task任务,自动生成一个这样的脚手架工程,可以自动生成Gradle Plugin的结构。

二、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后,即可删除。

  1. //包名
  2. def packageNme = 'com.component.easyuse'
  3. //类名
  4. def className = 'ComponentEasyUse'
  5. //文件夹名称
  6. def moduleName = 'gradlebuild'
  7. task gradlePluginCreate {
  8. setGroup('gradleBuild')
  9. setDescription('构建GradlePlugin插件框架')
  10. //*************文件夹与文件构建**********************
  11. def rootProjectPath = getRootDir().absolutePath
  12. println "rootProjectPath is:" + rootProjectPath
  13. def gradleProjectDir = file(rootProjectPath + "/${moduleName}")
  14. if (!gradleProjectDir.exists()) {
  15. println "文件夹${gradleProjectDir.name}不存在,新建中..."
  16. gradleProjectDir.mkdirs()
  17. }
  18. def packDirStr = packageNme.replace('.', '/')
  19. def groovyDir = file(gradleProjectDir.path + '/src/main/groovy/' + packDirStr)
  20. if (!groovyDir.exists()) {
  21. groovyDir.mkdirs()
  22. def groovyClassFile = file(groovyDir.path + "/${className}.groovy")
  23. if (!groovyClassFile.exists()) {
  24. groovyClassFile.createNewFile()
  25. def groovyClassContent = "package ${packageNme}\n" +
  26. "\n" +
  27. "import org.gradle.api.Plugin;\n" +
  28. "import org.gradle.api.Project;\n" +
  29. "\n" +
  30. "public class ${className} implements Plugin<Project> {\n" +
  31. " @Override\n" +
  32. " public void apply(Project project) {\n" +
  33. " println '这是一个测试Plugin'\n" +
  34. " }\n" +
  35. "}"
  36. groovyClassFile.write(groovyClassContent)
  37. }
  38. }
  39. def resDir = file(gradleProjectDir.path + '/src/main/resources')
  40. if (!resDir.exists()) {
  41. resDir.mkdirs()
  42. }
  43. def propertiesDir = file(resDir.path + '/META-INF/gradle-plugins')
  44. if (!propertiesDir.exists()) {
  45. propertiesDir.mkdirs()
  46. }
  47. def propertiesFile = file(propertiesDir.path + "/${packageNme}.properties")
  48. if (!propertiesFile.exists()) {
  49. propertiesFile.createNewFile()
  50. def implementationStr = "implementation-class = ${packageNme}.${className}"
  51. propertiesFile.write(implementationStr)
  52. }
  53. def buildGradleFile = file(gradleProjectDir.path + '/build.gradle')
  54. if (!buildGradleFile.exists()) {
  55. buildGradleFile.createNewFile()
  56. def buildStr = "// 应用插件\n" +
  57. "apply plugin: \"groovy\"\n" +
  58. "apply plugin: \"maven\"\n" +
  59. "\n" +
  60. "// 添加依赖\n" +
  61. "dependencies{\n" +
  62. " compile gradleApi()\n" +
  63. " compile localGroovy()\n" +
  64. "}\n" +
  65. "\n" +
  66. "// 代码仓库\n" +
  67. "repositories{\n" +
  68. " jcenter()\n" +
  69. "}\n" +
  70. "\n" +
  71. "uploadArchives {\n" +
  72. " repositories.mavenDeployer {\n" +
  73. " repository(url: uri('../repo')) //仓库的路径,此处是项目根目录下的 repo 的文件夹\n" +
  74. " pom.groupId = '${packageNme}' //groupId ,自行定义,一般是包名\n" +
  75. " pom.artifactId = '${className.toLowerCase()}' //artifactId ,自行定义\n" +
  76. " pom.version = '1.0.0' //version 版本号\n" +
  77. " }\n" +
  78. "}"
  79. buildGradleFile.write(buildStr)
  80. }
  81. def settingsFile = file(rootProjectPath + '/settings.gradle')
  82. if (!settingsFile.exists()) {
  83. settingsFile.createNewFile()
  84. }
  85. def settingIncludeStr = "include ':${moduleName}'"
  86. if (!settingsFile.text.contains(settingIncludeStr)) {
  87. settingsFile.append("\n" + settingIncludeStr)
  88. }
  89. }

  别忘记最后通过android studio的sync,同步工程。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/277671
推荐阅读
相关标签
  

闽ICP备14008679号