【踩坑速記】開源日歷控件,順便全面解析開源庫打包發布到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'            //你公司的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'   // 文檔標題
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM