【踩坑速記】開源日歷控件,順便全面解析開源庫打包發布到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.pswp.cn/news/542099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542099.shtml
英文地址,請注明出處:http://en.pswp.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…