一、写在前面
自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻麻再也不用担心依赖第三方jar包繁琐无趣啦。而,如果自己写一个开源库是一种怎样的体验,此乃利(装)国(逼)利(神)民(器)呀!
而一路装逼不易,你会发现如果你要发布你的开源库到官方的Bintray/Jcenter并非易事,所以先去网上一探究竟,简单的,难的,五花八门,全(误)面(人)具(子)备(弟)!
不得不感叹,学技术本身不难,难于达到一个目的的有多种方式,而各种方式参差不齐,给新手带来很大困惑。但是没办法,谁叫你是初学者呢,你所能做的,只能一步一步的折腾自己。
网上的帖子真多呀,五花八门,注册账号有问题,编写过程有问题,版本不一致有问题,install有问题....每个人的步骤都不一致,所以难于得到一个真正正确的东西,导致你错了,却不知道错在何处,这是最难受的,好吧,程序员加班就是因为这些细节末梢的事情导致的,所以,我们要细致!!!
其实,给个全面解析,楼主是诚惶诚恐,深怕一个小细节没有注意又去误人子弟,不过楼主也是折腾了很多时间才得以处理的,所以真心希望能给大家带来一点帮助,不足的地方,还请各位拍砖~
废话不多说,直接进入正题,这里拿我一个随便的开源库来做处理,git地址:https://github.com/nanchen2251/CalendarView,这是一个炫酷的日历选择控件(支持左右滑动,农历,节假日显示等)
演示效果:
二、注册账号
1)首先你的有开门的钥匙,先去https://bintray.com注册一个账号吧(你也可以使用第三方登录Github,Google,但楼主发现,如果你的github一直都不能成功,原来是邮箱地址不能用qq邮箱);
2)注册
3)提交注册信息
4)创建组织和仓库
5)填写基本信息
三、配置项目相关
1)在project的build.grald添加
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
2)module里面添加
//配置插件
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
3)Module的build.gradle里面添加如下代码,注意注释
version = "1.0.7" //这个是版本号,必须填写
def siteUrl = 'https://github.com/nanchen2251/CalendarView' // 项目的主页
def gitUrl = 'https://github.com/nanchen2251/CalendarView' // Git仓库的url group = "com.nanchen.calendarview" // 这里是groupId ,必须填写 一般填你唯一的包名 install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// 项目描述,复制我的话,这里需要修改。
name 'a view with the lunar calendar' //项目描述
url siteUrl
// 软件开源协议,现在一般都是Apache License2.0吧,复制我的,这里不需要修改。
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
//填写开发者基本信息,复制我的,这里需要修改。
developers {
developer {
id 'nanchen' //你公司的id
name 'nanchen2251' //你的用户名
email 'liushilin520@foxmail.com' // 你的邮箱
}
} // SCM,复制我的,这里不需要修改。
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
// 生成jar包的task,不需要修改。
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
// 生成javaDoc的jar,不需要修改
task javadoc(type: Javadoc) {
options.encoding = "UTF-8"
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
} //下面设置编码格式,重点注意,如果不设置可能会在gradlew install的时候出现GBK编码映射错误
javadoc {
options {
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
title 'A CalendarView Support Lunar Calendar For Android' // 文档标题
}
} artifacts {
// archives javadocJar
archives sourcesJar
} // 生成jar包
task releaseJar(type: Copy) {
from( 'build/intermediates/bundles/release')
into( '../jar')
include('classes.jar')
rename('classes.jar', 'okgo-' + version + '.jar')
} // 这里是读取Bintray相关的信息,我们上传项目到github上的时候会把gradle文件传上去,
// 所以不要把帐号密码的信息直接写在这里,写在local.properties中,这里动态读取。
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray { //读取 local.properties 文件里面的 bintray.user
user = properties.getProperty("bintray.user") //读取 local.properties 文件里面的 bintray.apikey
key = properties.getProperty("bintray.apikey") configurations = ['archives']
pkg {
userOrg = "nanchen" //发布到JCenter的组织,注意新版本的bintray是需要手动创建的
repo = "maven" //发布到JCenter上的仓库名称,注意新版本的bintray是需要手动创建的
// 发布到Bintray上的项目名字
name = "calendarview-library"
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true // 是否是公开项目
}
}
4)一些说明
注意把你的user和apikey信息放在项目的gradle.properties里面(当然这是最好的建议)
sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk1\\Sdk
bintray.user=***
bintray.apikey=***
注意:上面的userOrg是组织(organization)的id(上面创建过的),很多帖子都没有这个或者写的是用户名,新版本要使用你创建的组织名称,否则失败;repo是仓库(repository)的名称(上面创建的),我当初就是看的帖子这里说的不清楚怎么也不能成功。
如果忘记了,则可以这样查看,组织对应id,仓库对应repo,项目对应上面的name。
5)如果不出意外,这时候你已经可以在android studio的命令行操作Terminal工作空间输入gradlew install;
6)如果你成功了,则可以在module的build/outputs下面看到你的aar文件
7) 这时候你可以通过命令行输入gradlew bintrayUpload上传到bintray仓库。
8)一切准备就绪,你这时候已经可以在bintray中看到你的库了,最后点击Add to Jcenter申请审核吧(一般2-3小时可以审核)
9)发送请求
填下你的groupId,直接send,就会发起一个打包版本的请求,
过几个小时,通过jcenter那边的审核就会在bintray上收到jcenter那边的同意消息提醒。
恭喜你,你的类库上传到jcenter成功了!大家都可以用你的类库了。
10)开源库的后续更新
我们上传完成后,如果发现类库中出现类库中的一个bug,这就涉及到更新问题,那么怎么更新呢?
你只需要在,修改代码后,该本地build.gradle的版本号,按上面的操作,执行gradlew install,gradlew bintrayUpload,到bintray上点击Stage snapshots on oss.jfrog.org”同样发送一个请求,不用几分钟,就可以用了,升级,不像首次提交那样,非常快。马上就你可以更新github上的引用版本号,瞬间心情爽爽哒。
五、一些踩过的坑
1)Lint found errors in the project
Lint 检查默认是开启的,Lint 会检查项目中的语法错误,如果没有通过则无法继续。只需要在 Module 的 build.gradle 添加如下代码:
android {
lintOptions {
abortOnError false
}
}
2)编码问题
也许你会遇到这样:
在 windows 下 javadoc 默认的是系统编码,Windows 就是 GBK 编码。所以一旦 java 文件中出现中文注释就会报错,提示无法映射的GBK编码。
task javadoc(type: Javadoc) {
options.encoding = "utf-8"
}
如果还不行,则采用我上面的方式
//下面设置编码格式,重点注意,如果不设置可能会在gradlew install的时候出现GBK编码映射错误
javadoc {
options {
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
title 'A CalendarView Support Lunar Calendar For Android' // 文档标题
}
}
【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~的更多相关文章
-
js非常强大的日历控件fullcalendar.js, 日期时间库: moment.js
日历控件: https://fullcalendar.io/docs/ https://fullcalendar.io/docs/event_data/events_function/ https:/ ...
-
Android自定义View(CustomCalendar-定制日历控件)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/54020386 本文出自:[openXu的博客] 目录: 1分析 2自定义属性 3onMeas ...
-
JS实现日历控件选择后自动填充
最近在做人事档案的项目,在做项目的初期对B/S这块不是很熟悉,感觉信心不是很强,随着和师哥同组人员的交流后发现,调试程序越来越好了,现在信心是倍增,只要自己自己踏实的去研究.理解代码慢慢的效果就出来了 ...
-
Android开源的精美日历控件,热插拔设计的万能自定义UI
Android开源的精美日历控件,热插拔设计的万能自定义UI UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的 ...
-
Fullcalendar 日历控件的基本使用
1:Fullcalendar 日历控件的基本简介 Fullcalendar是一款十分强大的开源日历免费控件,提供了丰富的属性设置和方法调用. 官网地址:https://fullcalendar.io/ ...
-
Android自己定义组件之日历控件-精美日历实现(内容、样式可扩展)
需求 我们知道.Android系统本身有自带的日历控件,网络上也有非常多开源的日历控件资源.可是这些日历控件往往样式较单一.API较多.不易于在实际项目中扩展并实现出符合详细样式风格的,内容可定制的效 ...
-
WdatePicker日历控件动态设置属性参数值
首先吐槽一下需求人员给了我一个很坑的需求:WdatePicker日历控件里面选择的最小时间(minDate)的值是级联动态改变的,而且这个值要从数据库获取,这样子只能使用 ajax 来发起请求获取mi ...
-
ckeditor添加日历控件
这里日历控件用的是开源的My97DatePicker,先看下效果图: 1.点击左侧自定义的日历控件按钮,弹出日历控件对话框. 2.点击确定,日历控件添加的表单设计器中,同时保留日历的控件样式 3.点击 ...
-
JQuery日历控件
日历控件最后一弹——JQuery实现,换汤不换药.原理一模一样,换了种实现工具.关于日历的终于写完了,接下来研究研究nodejs.嗯,近期就这点事了. 同样还是将input的id设置成calendar ...
随机推荐
-
OC 协议
OC 协议 概念:定义了一个接口,其他类负责来实现这些接口.如果你的类实现了一个协议的方法时,则说该类遵循此协议. 非正式协议:非正式协议虽名为协议,但实际上是挂于NSObject上的未实现分类(Un ...
-
String高效编程优化(Java)
1, substring截取超大字符串可能造成的“内存泄漏” 2,+ 操作符的优化和局限 3,StringBuilder和StringBuffer 4,split和StringTokenizer做简单 ...
-
CommonUtils
package com.utils; import java.lang.reflect.Field; import java.math.BigDecimal; import java.sql.Time ...
-
【android开发】Android防止内存溢出浅析
近期项目做得差点儿相同了,測试出现了一些问题,当中一个就是内存溢出问题,在三星手机上測试最easy出现内存溢出,在其它手机上,比方华为就没有发生,也是比較郁闷.这个问题在之前的公司,做项目时也遇到过, ...
-
高密度Java应用部署的一些实践
传统的Java应用部署模式,一般遵循“硬件->操作系统->JVM->Java应用”这种自底向上的部署结构,其中JEE应用可以细化为“硬件->操作系统->JVM->J ...
-
Resharper 8.0 的最实用的功能
在 8.0 里面.resharper 加入了 插件nuget方式 以前引用resharper插件.都是从新安装,复制进去,或者其他方式.比如resharper xunit 测试 我用xunit 插件 ...
-
Re-enable extensions not coming from Chrome Web Store on Chrome v35+ (with enhanced security)
1. Add the --enable-easy-off-store-extension-install flag when you start chrome (create shortcut, ed ...
-
20165228《网络对抗技术》Exp0 Kali安装 Week1
2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 Kali下载:来自官网 Kali安装 参考自kali安装教程 (因为写博客时已经安装好kali,所以这部分没有自 ...
-
iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted
之前介绍了怎么操作越狱的iOS设备(以下简称为手机),但简单操作手机并不是目标,小程的目标是手机上特定的APP,比如微信.淘宝.QQ音乐等等,因为小程可以从这些APP上拿到一些有用的信息或资源--比如 ...
-
Spring使用笔记(四) 面向切面的Spring
面向切面的Spring 一.面向切面的概念 在软件开发中,散布于应用多处的功能被称为横切关注点(cross-cutting concern). 通常来讲这些横切关注带点从概念上来讲是与应用逻辑相分离的 ...