【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~...
一、写在前面
自使用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' //你公司的idname 'nanchen2251' //你的用户名email 'liushilin520@foxmail.com' // 你的邮箱 }}// SCM,复制我的,这里不需要修改。 scm {connection gitUrldeveloperConnection gitUrlurl siteUrl}}}} } // 生成jar包的task,不需要修改。 task sourcesJar(type: Jar) {from android.sourceSets.main.java.srcDirsclassifier = 'sources' } // 生成javaDoc的jar,不需要修改 task javadoc(type: Javadoc) {options.encoding = "UTF-8"source = android.sourceSets.main.java.srcDirsclasspath += 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 trueversion truelinks "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.useruser = properties.getProperty("bintray.user")//读取 local.properties 文件里面的 bintray.apikeykey = properties.getProperty("bintray.apikey")configurations = ['archives']pkg {userOrg = "nanchen" //发布到JCenter的组织,注意新版本的bintray是需要手动创建的repo = "maven" //发布到JCenter上的仓库名称,注意新版本的bintray是需要手动创建的// 发布到Bintray上的项目名字name = "calendarview-library"websiteUrl = siteUrlvcsUrl = gitUrllicenses = ["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 trueversion truelinks "http://docs.oracle.com/javase/7/docs/api"title 'A CalendarView Support Lunar Calendar For Android' // 文档标题 } }
【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~...相关推荐
- ExtJs定制日历控件——定制部分解析
日历控件中,我们自己需要写的就是每一个日期单元格中的部分,在日历控件部分代码的最后面,有三个for循环,用来控制上个月当前月和下个月日期,其中第二个循环是当前月(日历标题部分选择的月份)控制部分. 代 ...
- JS踩坑标注:input控件的ONINPUT方法
问题描述:添加联动配置按钮,一次性添加4行联动配置,需要保证联动配置名称相同,所以打算在配置第一条联动配置名称时将该名称同步到余下3个联动配置. 初始页面: 点击添加联动配置按钮: 联动配置名称为in ...
- Android自定义View精品(CustomCalendar-定制日历控件)
版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 目录: 文章目录 1.分析 2.自定义属性 3.onMeasure() 4.onDraw() ①.绘制月份 ...
- Android开发之如何实现日历控件
我们大家都知道,在Android平台3.0中才新增了日历视图控件,可以显示网格状的日历内容,那么对于3.0以下的版本要使用日历控件只能借助第三方,目前用的最多的是CalendarView. 先简单介绍 ...
- 开源一个ReactNative日历控件
项目地址: react-native-slideable-calendar-strip 演示地址: Calendar-Strip.mp4 为何要再实现一个日历控件 已经有了react-native-c ...
- Android开源的精美日历控件,热插拔设计的万能自定义UI
UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的插座接口,与自定义Behavior是一样的思想. 听说第一页无 ...
- Android开源的精美日历控件,热插拔设计的万能自定义UI,看完直接怼产品经理
<attr name="current_month_text_color" format="color" /> <!--当前月份的字体颜色-- ...
- android+高仿+日历,Android开源的精美日历控件,热插拔设计的万能自定义UI
UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的插座接口,与自定义Behavior是一样的思想. 听说第一页无 ...
- Android开源的精美日历控件,热插拔设计的万能自定义UI,flutter调用原生sdk
XML用法 如果需要在日历控件下方使用其它控件,使用CalendarLayout控件即可,calendar_content_view_id为其它控件的id,支持任意控件,如RecyclerView.L ...
最新文章
- Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”
- 【机器学习基础】优化算法详解
- elastic-job 的简单使用
- Linux网络编程 之 UDP编程(六)
- matlab距离保护程序,基于MATLAB的距离保护仿真.doc
- android 支付模块封装,Android集成支付----支付宝支付总结与封装
- 如何改变对话或窗体视窗的背景颜色
- Windows环境中jdk的下载、安装与配置
- Leetcode 456.132模式
- jsonp多次请求报错 not a function的解决方法
- 安装SQLserver时候报错:应用程序中发生了无法处理的异常。如果单击继续。。。。。
- 技术问题解答-AOP原理
- 天锐绿盾解密_天锐绿盾数据防泄密系统
- 1、NESSUS安装
- 计算一个数的二进制中一的个数(三种方法)
- 编程中常见的Foo是什么意思
- google浏览器打开出现“喔唷,崩溃啦”解决办法
- 知识图谱认知智能理论与实战----------第一章 知识图谱概述
- Ebay API item_get - 获得EBAY商品详情
- 如何创新与加强个人领导力
热门文章
- java ip 范围内打卡_定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
- android os自动安裝软件,[图]Bliss OS 12进入开发阶段:可在桌面设备上安装Android 10系统...
- numpy支持比python更多的数据类型_NumPy数据类型
- html5中的css特性,浅谈HTML5 CSS3的新交互特性
- 计算机管理员受限用户,如何设置权限,使管理员能上网,而受限用户却不能上网?...
- 蓝桥杯 算法提高 日期计算
- .gitignore文件_【第1739期】为Git仓库里的.idea文件夹正名
- 新颖的c语言题目,新颖版c语言经典习题100例(全面面)
- php获取h1,jQuery获取h1-h6标题元素值方法实例
- js遍历json数组给html td赋值,JS实现给json数组动态赋值的方法示例