• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 如何使用Android Studio开发Gradle插件

如何使用Android Studio开发Gradle插件

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了androidstudio gradle,studio 更新gradle,studio 升级gradle,studio安装gradle,studio gradle等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

如何使用Android Studio开发Gradle插件


缘由

首先说明一下为什么会有这篇文章。前段时间,插件化以及热修复的技术很热,Nuwa热修复的工具NuwaGradle,携程动态加载技术DynamicAPK,还有希望做最轻巧的插件化框架的Small。这三个App有一个共同的地方就是大量的使用了Gradle这个强大的构建工具,除了携程的框架外,另外两个都发布了独立的Gradle插件提供自动化构建插件,或者生成热修复的补丁。所以学习一下Gradle插件的编写还是一件十分有意义的事。

插件类型

Gradle的插件一般有这么几种:

一种是直接在项目中的gradle文件里编写,这种方式的缺点是无法复用插件代码,在其他项目中还得复制一遍代码(或者说说复制一遍文件) 另一种是在独立的项目里编写插件,然后发布到中央仓库,之后直接引用就可以了,优点就是可复用。就和上面的Nuwa和Small一样。

Gradle相关语法

本篇文章不会详细说明Gradle相关的语法,如果要学习gradle相关的东西,请查看Gradle for Android

Gradle插件开发

Gradle插件是使用Groovy进行开发的,而Groovy其实是可以兼容Java的。Android Studio其实除了开发Android App外,完全可以胜任开发Gradle插件这一工作,下面来讲讲具体如何开发。

首先,新建一个Android项目。 之后,新建一个Android Module项目,类型选择Android Library。 将新建的Module中除了build.gradle文件外的其余文件全都删除,然后删除build.gradle文件中的所有内容。 在新建的module中新建文件夹src,接着在src文件目录下新建main文件夹,在main目录下新建groovy目录,这时候groovy文件夹会被Android识别为groovy源码目录。除了在main目录下新建groovy目录外,你还要在main目录下新建resources目录,同理resources目录会被自动识别为资源文件夹。在groovy目录下新建项目包名,就像Java包名那样。resources目录下新建文件夹META-INF,META-INF文件夹下新建gradle-plugins文件夹。这样,就完成了gradle 插件的项目的整体搭建,之后就是小细节了。目前,项目的结构是这样的。

这里写图片描述

打开Module下的build.gradle文件,输入

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

repositories {
    mavenCentral()
}

下面我们在包名下新建一个文件,命名为PluginImpl.groovy,注意有groovy后缀,然后在里面输入,注意包名替换为你自己的包名。

package cn.edu.zafu.gradle

import org.gradle.api.Plugin
import org.gradle.api.Project

public class PluginImpl implements Plugin {
    void apply(Project project) {
       project.task('testTask') << {
            println "Hello gradle plugin"
        }
    }
}

然后在resources/META-INF/gradle-plugins目录下新建一个properties文件,注意该文件的命名就是你只有使用插件的名字,这里命名为plugin.test.properties,在里面输入

implementation-class=cn.edu.zafu.gradle.PluginImpl

注意包名需要替换为你自己的包名。

这样就完成了最简单的一个gradle插件,里面有一个叫testTask的Task,执行该task后会输出一段文字,就像当初我们输出HelloWorld一样。

发布到本地仓库

接着,我们需要将插件发布到maven中央仓库,我们将插件发布到本地仓库就好了,在module项目下的buidl.gradle文件中加入发布的代码。

repositories {
    mavenCentral()
}
group='cn.edu.zafu.gradle.plugin'
version='1.0.0'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}

上面的group和version的定义会被使用,作为maven库的坐标的一部分,group会被作为坐标的groupId,version会被作为坐标的version,而坐标的artifactId组成即module名,我们让其取一个别名moduleName。然后maven本地仓库的目录就是当前项目目录下的repo目录。
这时候,右侧的gradle Toolbar就会在module下多出一个task

这里写图片描述

点击uploadArchives这个Task,就会在项目下多出一个repo目录,里面存着这个gradle插件。

这里写图片描述

目录就像上图这样,具体目录结构和你的包名等一系列有关,time是我的module名。

发布到本地maven仓库后,我们就使用它,在叫app的android项目下的gradle.build的文件中加入

buildscript {
    repositories {
        maven {
            url uri('../repo')
        }
    }
    dependencies {
        classpath 'cn.edu.zafu.gradle.plugin:time:1.0.0'
    }
}
apply plugin: 'plugin.test'

apply plugin后面引号内的名字就是前文plugin.test.properties文件的文件名。而class path后面引号里的内容,就是上面grade中定义的group,version以及moduleName所共同决定的,和maven是一样的。

同步一下gradle,右侧app下other分类下就会多出一个testTask,双击执行这个Task,控制台就会输出刚才我们输入的字符串

这里写图片描述

发布到Jcenter仓库

接下来我们将其发布到jcenter中央仓库。参考之前写的一篇文章 使用Android Studio将开源库发布到Jcenter中央库

在项目根目录下的build.gradle文件中加入。

dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-beta6'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
        classpath 'com.github.dcendents:android-maven-plugin:1.2'
    }

在项目根路径下新建bintray.gradle文件,输入

apply plugin: 'com.jfrog.bintray'
apply plugin: 'maven-publish'

def projectName = "timePlugin"
def mavenDesc = 'your desc'
def baseUrl = 'https://github.com/yourBaseUrl'
def siteUrl = baseUrl
def gitUrl = "${baseUrl}/yourGitUrl"
def issueUrl = "${baseUrl}/yourGitIssueUrl"

def licenseIds = ['Apache-2.0']
def licenseNames = ['The Apache Software License, Version 2.0']
def licenseUrls = ['http://www.apache.org/licenses/LICENSE-2.0.txt']
def inception = '2016'

def username = 'lizhangqu'

install {
    repositories {
        mavenInstaller {
            pom.project {
                // Description
                name projectName
                description mavenDesc
                url siteUrl

                // Archive
                groupId project.group
                artifactId archivesBaseName
                version project.version

                // License
                inceptionYear inception
                licenses {
                    licenseNames.eachWithIndex { ln, li ->
                        license {
                            name ln
                            url licenseUrls[li]
                        }
                    }
                }
                developers {
                    developer {
                        name username
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}

task sourcesJar(type: Jar) {
    from sourceSets.main.allGroovy
    classifier = 'sources'
}


task javadocJar(type: Jar, dependsOn: groovydoc) {
    from groovydoc.destinationDir
    classifier = 'javadoc'
}

artifacts {
    archives javadocJar
    archives sourcesJar
}


bintray {
    user = BINTRAY_USER
    key = BINTRAY_KEY
    configurations = ['archives']
    pkg {
        repo = 'maven'
        name = projectName
        desc = mavenDesc
        websiteUrl = siteUrl
        issueTrackerUrl = issueUrl
        vcsUrl = gitUrl
        labels = ['gradle', 'plugin', 'time']
        licenses = licenseIds
        publish = true
        publicDownloadNumbers = true
    }
}

将对应的描述性文字修改为你

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 从编程的角度理解gradle脚本??Android Studio脚本构建和编程
  • 如何使用Android Studio开发Gradle插件
  • Gradle Android客户端程序打包,gradleandroid

相关文章

  • 2017-05-26硅谷新闻3--使用Android系统自带的API解析json数据,androidjson
  • 2017-05-26Webview内存泄漏解决办法1,webview泄漏
  • 2017-05-26VS2015墙内创建ionic2 【利用nrm更换源,完美!】,vs2015ionic2
  • 2017-05-26Android 仿当乐游戏详情页面(二)
  • 2017-05-26Android 5.0(包含5.0以下版本) 获取栈顶应用程序包名,android包名
  • 2017-05-26安卓开发中内存问题分析(一)工具篇
  • 2017-05-26我的android学习经历10,android学习经历10
  • 2017-05-26Android 框架启动流程
  • 2017-05-26Hive 1.2.1&Spark&Sqoop安装指南
  • 2017-05-26Activity之概览屏幕(Overview Screen),activityoverview

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android开发中遇到的问题汇总【九】
    • Android Studio导入第三方库(SlidingMenu)教程,androidslidingmenu
    • 关于Pacemaker集群配置的版本
    • Mac搭建Android开发环境,mac搭建android
    • QQ互联登录以及非官方正版应用报100044错误,互联100044
    • Setting 之dashboard 点击跳转流程,settingdashboard
    • 我的Android进阶之旅------)Android自定义View实现带数字的进度条(NumberProgressBar)
    • Android IPC 之 AIDL(一)
    • Linux 新的API signalfd、timerfd、eventfd使用说明
    • Android中BroadcastReceiver的两种注册方式(静态和动态)详解,broadcastreceiver

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有