Gradle之使用Android Studio 编写Gradle插件并上传Library到JCenter
来源:互联网 发布:淘宝认证企业店铺条件 编辑:程序博客网 时间:2024/06/08 01:40
Gradle之使用Android Studio 编写Gradle插件并上传Library到JCenter
转载请标明出处:
http://blog.csdn.net/lisdye2/article/details/52292896
本文出自:【Alex_MaHao的博客】
项目中的源码已经共享到github,有需要者请移步【Alex_MaHao的github】
在上一篇博客中Gradle 入门,编写channel.gradle
并通过apply from : 'channel.gradle'
引入Gradle 插件,实现了多渠道打包。同样,我们可以编写一个Library ,通过引入的方式引入Gradle 的插件脚本。
编写 Gradle Library
对于编写Gradle Library ,整个流程可分为如下几个步骤:
- 创建Library Module
- 删除 除build.gradle 以外的所有文件
- 修改build.gradle 脚本的内容
- 在Library Module下根目录下创建src/main/groovy 目录,在该目录下可以添加包名,文件等
- 在main目录下创建
resources
目录,并创建META-INF/gradle-plugins目录,该目录下添加的是向外提供的Gralde脚本的资源 - 上传Gradle插件到本地代码库
- 引用Gradle 插件
按照上面的步骤开始进行每一步的操作
创建Library Module
删除 除build.gradle 以外的所有文件
自行删除即可
修改build.gradle 脚本的内容
// 应用插件apply plugin: "groovy"apply plugin: "maven"// 添加依赖dependencies{ compile gradleApi() compile localGroovy()}// 代码仓库repositories{ jcenter()}
在Library Module下根目录下创建src/main/groovy 目录,在该目录下可以添加包名,文件等
创建好groovy 目录之后,会发现该目录自动变蓝,即表示识别了该文件。我们可以在该目录下创建包名,然后添加PluginImple.groovy
文件。注意文件的后缀名,因为Gradle 使用的是Groovy编写,所以后缀必须是.groovy。
编写该文件的代码
package com.alex_mahao.gradleimport org.gradle.api.Pluginimport org.gradle.api.Project/** * 实现Plugin */public class PluginImpl implements Plugin<Project>{ @Override void apply(Project project) { project.task("testTask")<<{ println "Hello gradle plugin" } }}
编写该文件的时候,因为它不像java会自动导入包名,我们需要手动添加package ...
实现Plugin
必须实现apply
方法,见名知意。再次定义了一个任务testTask
,它想控制台输入了Hello gradle plugin
在main目录下创建resources
目录,并创建META-INF/gradle-plugins目录,该目录下添加的是向外提供的Gralde脚本的资源
创建resources
后,会默认变成资源文件夹的标示,创建META-INF/gradle-plugins
目录之后,添加资源。
创建plugin.test.properties
,添加文件
implementation-class = com.alex_mahao.gradle.PluginImpl
文件名plugin.test
为插件的应用名,即apply plugin:'plugin.test'
文件内容添加对应的实现类。
到这里,整个Library Module 就基本完成了,他的目录如图所示
如果我们想使用这个插件,直接引用的方式是行不通的,他和普通的Library Module 不同,我们必须把它发布到代码仓库中,代码仓库分为本地和远程,暂时先实现本地,然后讲解如何将代码发布到远程仓库
上传Gradle插件到本地代码库
在插件的build.gradle
中,添加如下代码:
// 应用插件apply plugin: "groovy"apply plugin: "maven"// 添加依赖dependencies{ compile gradleApi() compile localGroovy()}// 代码仓库repositories{ jcenter()}// 上传到本地代码库uploadArchives{ repositories{ mavenDeployer{ repository(url:uri('../repo')) pom.groupId = 'com.alex_mahao.gradle.plugin' // 组名 pom.artifactId = 'test' // 插件名 pom.version = '2.0.0' // 版本号 } }}
编写好代码之后 sync now 一下。此时打开右边的Gradle,多出了一个uploadArchives 的任务
,双击运行。此时可以看到在工程的根目录下多出了repo的文件夹。其中包含了相关的依赖。
引用Gradle 插件
在app 的 build.gradle
中,添加引用
// 添加本地仓库依赖buildscript{ repositories{ maven{ url uri('../repo') } } dependencies{ classpath 'com.alex_mahao.gradle.plugin:test:1.0.0' }}// 引用插件apply plugin: 'plugin.test'
sync now 一下,Gradle 中多出了一个testTask
任务
ok。实现了效果
到这里,可能有小伙伴就问了,你这有毛线用,其实该篇博客是对后面博客的铺垫,在讲解热修复时,会用到该篇博客的知识点
complie
,classpath
的比较与解析
如果细心的小伙伴会发现,我上面依赖插件使用的是classpath
,而我们平常依赖jar包的时候使用的是complie
,他们有什么区别呢。
此处请自行思考。友情提示:看一下项目根目录下的build.gradle
和app下的build.gradle
。
他们后都跟上了相应jar包的路径:classpath 'com.alex_mahao.gradle.plugin:test:2.0.0'
整个插件或jar包的路径,分为了三个部分:
- 组名:类似于包名
- 插件名 : 项目名称
- 版本号: 2.0.0
上传代码到jcenter
在上面实现了将插件上传到本地,那么同样我们可以把我们的Gradle 插件上传到jcenter 中。
jcenter 和 Maven Central 都是远程仓库,都可以通过依赖的形式添加jar包。在之前Android Studio 默认使用的是Maven Central ,但发现其有一定的入门难度,将其改为了jcenter。
想要把代码上传到jcenter,必须先有账号,登陆网站,直接可以选择使用github登陆。
网站地址https://bintray.com/
在网战中我们需要获取两个重要的信息,用户名和秘钥
用户名显而易见
获取秘钥:
在编写代码之前,需要添加一些Gradle 的依赖,在项目的根目录的build.gradle
中,添加依赖
buildscript { // 添加远程仓库 repositories { jcenter() } // 添加依赖,此依赖从远程仓库中查找 dependencies { classpath 'com.android.tools.build:gradle:2.1.0' // classpath 'com.alex_mahao.gradle.plugin:gradleplugin:2.0.0' // 将项目发布到JCenter 所需要的jar 添加依赖 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 baseUrl = 'https://github.com/AlexSmille'def siteUrl = baseUrldef gitUrl = "${baseUrl}/Android-Gradle-Demo"def issueUrl = "${baseUrl}/issues"install { repositories { mavenInstaller { // This generates POM.xml with proper paramters pom.project { //添加项目描述 name 'Gradle Plugin for Android' url siteUrl //设置开源证书信息 licenses { license { name 'The Apache Software License, Version 2.0' url 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } //添加开发者信息 developers { developer { name 'Alex_Mahao' email 'zziamahao@s163.com' } } scm { connection gitUrl developerConnection gitUrl url siteUrl } } } }}//配置上传Bintray相关信息bintray { user = BINTRAY_USER key = BINTRAY_KEY configurations = ['archives'] pkg { repo = 'maven' // 上传到中央仓库的名称 name = 'tt' // 上传到jcenter 的项目名称 desc = 'test gradle' // 项目描述 websiteUrl = siteUrl issueTrackerUrl = issueUrl vcsUrl = gitUrl labels = ['gradle', 'plugin'] licenses = ['Apache-2.0'] publish = true }}
在代码中,user = BINTRAY_USER
和key = BINTRAY_KEY
是关键字段,需要保密,所以我将他放在了gradle.properties
中,同时选择了.gitignore。
在我们需要上传的Gradle plugin module下,应用插件
// 应用插件apply plugin: "groovy"apply plugin: "maven"// 添加依赖dependencies{ compile gradleApi() compile localGroovy()}// 代码仓库repositories{ jcenter()}group = 'com.alex_mahao.gradle.plugin' // 组名version = '1.0.0' // 版本/*// 上传到本地代码库uploadArchives{ repositories{ mavenDeployer{ repository(url:uri('../repo')) pom.groupId = 'com.alex_mahao.gradle.plugin' // 组名 pom.artifactId = 'test' // 插件名 pom.version = '2.0.0' // 版本号 } }}*/// 应用插件apply from: '../bintray.gradle'
group
和version
和之前的一样,artifactId
没办法定义,他会默认和你的项目名一样
sync now之后,Gradle会出现两个任务,先点击install
,在点击bintrayUpload
。
ps: 总感觉install
没什么用。。但网上的资料都写了。
这样就完成了上传。如何使用呢?
在项目的build.gradle
下,添加依赖
buildscript { // 添加远程仓库 repositories { jcenter() // Gradle 插件的仓库 maven { url "http://dl.bintray.com/alexsmille/maven" } } // 添加依赖,此依赖从远程仓库中查找 dependencies { classpath 'com.android.tools.build:gradle:2.1.0' //自己编写的Gradle插件 classpath 'com.alex_mahao.gradle.plugin:gradleplugin:1.0.0' // 将项目发布到JCenter 所需要的jar classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' classpath 'com.github.dcendents:android-maven-plugin:1.2' }}
两个地方修改,url
和classpath
;这两个值怎么获取,找到上传的项目的页面
此时小伙伴们可能又有疑问,为什么有的的不用添加url呢。
发布到jcenter
,相当于我们之前的只是放到了jcenter
,我们自己的仓库中。
- Gradle之使用Android Studio 编写Gradle插件并上传Library到JCenter
- Android Studio使用Gradle上传到jCenter
- 使用Gradle发布Android Library到JCenter
- Gradle 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- Gradle 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- Gradle 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- Android Studio--gradle,jCenter
- 使用Android Studio,新建library并发布到jCenter
- 使用Android Studio,新建library并发布到jCenter
- Android Studio 将Library 上传到 Jcenter
- Android Studio 上传aar(Library)到JCenter
- Android Studio之maven Central,JCenter build.gradle gradle-wrapper
- Gradle上传 aar到JCenter
- Android Studio上传Library库到JCenter,并同步到Maven Central
- Android Studio上传Library库到JCenter,并同步到Maven Central
- 利用Gradle发布Android Studio项目到JCenter
- Andriod Studio 使用Gradle发布项目到JCenter仓库
- Android基础--Android Studio中使用Gradle发布aar项目到JCenter仓库
- 一定要弄懂GetMemory
- Unreal Engine 4 Gameplay框架介绍
- Android Studio 中建议过滤的文件:
- 构建一个使用mybatis框架的项目
- ViewPager Fragment 禁止预加载数据
- Gradle之使用Android Studio 编写Gradle插件并上传Library到JCenter
- Solr6.1配置中文分词
- linux 改回python2.6
- 'mvc:annotation-driven' must have no character or element问题
- 2016年8月 web前端面试题
- ABAP的PAI和PBO中的字段传递顺序
- AVAudioRecorder录音和AVAudioPlayer播放声音小的问题!
- android studio 添加aar文件库
- synchronized(this)