一、寫在前面
自使用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' // 文檔標題 } }