【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到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'   // 文档标题
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scala集合中添加元素_如何在Scala中获得列表的第一个元素?

scala集合中添加元素清单 (List) A list is a linear data structure. It is a collection of elements of the same data types. 列表是线性数据结构。 它是相同数据类型的元素的集合。 Scala libraries have many functions to support the functioning of lists. Methods l…

python—列表、字典生成式

1 列表生成式 Python内置的一种极其强大的生成列表 list 的表达式。返回结果必须是列表。 示例: 需求1:接收变量 k a b s 51 5000 10000 a s.split() li [] for item in s.split():li.append(int(item)) k,a,b li print(k,a,b)运行结果:…

excel数据平均分配给多人_excel表格 怎样均分数据-用Excel怎么才能将组数据平均分配给几个人...

怎样在Excel表格中求平均数?在excel中怎样自动生成各班各科的平均成绩可以调用Excel函数库的函实现。步骤如下:1. 在单元格内点击上公式-平均值”。2. 点击需要参与计算的单元格数据,符号用键盘输入,最后回车即可。百度百科-Excel函数exce…

Java中List和Map接口之间的区别

列表与地图界面 (List vs Map interface) Here, we will see how List differs from Map interface in Java and we will see the points given below, 在这里,我们将看到List与Java中的Map接口有何不同,并且我们将看到以下几点, 列表界面 (…

python—高阶函数

什么是内置高阶函数: 一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。 Python中内置了几个常用的高阶函数,…

功能区不显示工具条_【新老客户必知】软件支持超高清屏显示器了

随着计算机硬件的不断更新换代显示设备的不断更新从原来的分辨率640 X 480啥原来分辨这么低呀?还记得DOS吗?或者Win95,win98吗当时显示器分辨率能调到800X 600很好了2000年左右随着纯平显示器的推出也有了高清显示器的概念那么一般我们说的高清显示器分辨…

nginx1.10.2源码安装配置参数参考

[rootlocalhost nginx-1.10.2]# ./configure --help--help print this message--prefixPATH set installation prefix #Nginx安装的根路径,默认为 /usr/local/nginx。--sbin-pathPATH set nginx binary pathname #指定nginx二进制文件的路径,默认为PATH/sbin/n…

c ++查找字符串_C ++朋友功能| 查找输出程序| 套装1

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {int A, B;friend void fun();};void fun(){Sample S;S.A 10;S.B 20;cout << S.A << " " << S.B << endl;}int main(){fun();retu…

Spring定时器的运用

为什么80%的码农都做不了架构师&#xff1f;>>> 一、spring4定时器任务配置如下&#xff1a; <bean id"jsapiTask" class"chan.ye.dai.wexin.JsapiTicketTimeTask" /><bean id"jobDetail"class"org.springframework.s…

python—装饰器

装饰器概念&#xff1a; 把一个函数当作参数传递给一个函数&#xff0c;返回一个替代版的函数 本质上就是一个返回函数的函数 在不改变原函数的基础上&#xff0c;给函数增加功能 python 中装饰器做的事情&#xff01;它们封装一个函数&#xff0c;并且用这样或者那样的方式来修…

ad18原理图器件批量修改_Altium Designer 15原理图设计基础

Altium Designer 15成为越来越多电子设计开发工程师EDA电路设计软件的首选&#xff0c;在学校学习Altium Designer的也越来较多&#xff0c;像单片机开发学习一样&#xff0c;EDA设计只要学会了&#xff0c;再学其他的设计软件就容易多了。上一节分享了《Altium Designer 15集成…

c++freopen函数_使用示例的C语言中的freopen()函数

cfreopen函数C语言中的freopen()函数 (freopen() function in C) Prototype: 原型&#xff1a; FILE* freopen(const char *str, const char *mode, FILE *stream);Parameters: 参数&#xff1a; const char *str, const char *mode, FILE *streamReturn type: FILE* 返回类型…

python—文件

1 . 文件的基本操作&#xff1a; 文件读取三部曲&#xff1a; 打开操作关闭&#xff08;如果不关闭会占用文件描述符&#xff09; 打开文件&#xff1a; f open(/tmp/passwdd,w)操作文件&#xff1a; 1 . 读操作&#xff1a; f.read()content f.read()print(content) 2 …

基本概念学习(7000)--P2P对等网络

对等网络&#xff0c;即对等计算机网络&#xff0c;是一种在对等者&#xff08;Peer&#xff09;之间分配任务和工作负载的分布式应用架构[1] &#xff0c;是对等计算模型在应用层形成的一种组网或网络形式。“Peer”在英语里有“对等者、伙伴、对端”的意义。因此&#xff0c;…

c语言for循环++_C ++程序使用循环查找数字的幂

c语言for循环Here, we are going to calculate the value of Nth power of a number without using pow function. 在这里&#xff0c;我们将不使用pow函数来计算数字的N 次幂的值 。 The idea is using loop. We will be multiplying a number (initially with value 1) by t…

厦门one_理想ONE真是“500万内最好的车”?

提起罗永浩&#xff0c;不少人还停留在“砸冰箱、造手机”等早期事件。随着网络直播的兴起&#xff0c;罗永浩转战直播带货行业&#xff0c;但老罗毕竟是老罗&#xff0c;雷人语录一点没比以前少。前一段时间&#xff0c;罗永浩在微博中称&#xff1a;“理想ONE是你能在这个价位…

Data Collection

众所周知&#xff0c;计算机领域论文是要以实验为基础的&#xff0c;而实验的原料就是数据。不管是在图像&#xff0c;文字或者语音领域&#xff0c;开源的数据都十分宝贵和重要。这里主要收集各领域的一些常用的公开数据集。 计算机视觉&#xff1a; 【ImageNet】 【Caltech P…

python—os模块、时间模块

os模块 作用&#xff1a;os模块是python标准库中的一个用于访问操作系统功能的模块&#xff0c; os模块提供了其他操作系统接口&#xff0c;可以实现跨平台访问。 使用&#xff1a; 1 . 返回操作系统类型 &#xff1a;os.name 值为&#xff1a;posix 是linux操作系统 值为&…

kotlin键值对数组_Kotlin程序检查数组是否包含给定值

kotlin键值对数组Given an array and an element, we have to check whether array contains the given element or not. 给定一个数组和一个元素&#xff0c;我们必须检查数组是否包含给定的元素。 Example: 例&#xff1a; Input:arr [34, 56, 7, 8, 21, 0, -6]element to…

enter sleep mode黑屏怎么解决_【linux】 不要再暴力关机了,讲讲我最近遇到的问题和完美解决方案...

欢迎关注我的个人公众号&#xff1a;AI蜗牛车前言结束了每天的紧张的工作&#xff0c;这两天真的有些肝。这两天打打字&#xff0c;突然感觉手指头疼起来了&#xff0c;想意识到成天打了十多个小时的键盘&#xff0c; 手指头都疲劳了 之后这两天基本上除了基本的吃睡&#xff…