集成 bintray,getGlobalExcludes()Ljava/util/Set 問題

最近工作上開始涉獵 SDK 開發(fā)的領(lǐng)域。

這段時(shí)間工作下來的感受就是,SDK 開發(fā)實(shí)際上就是開發(fā)開源軟件。

以前做 App 是為用戶寫代碼,現(xiàn)在做 SDK 是為程序員寫代碼,其實(shí)都是大同小異。

但是畢竟隔行如隔山,很多東西都是以前沒有接觸過的,踩坑的過程里也積累了些經(jīng)驗(yàn)。

簡單記錄一些,希望能夠幫到不論誰吧。

這次先簡單說說 bintray 托管。

注意點(diǎn)

關(guān)于 bintray 具體使用網(wǎng)上很多文章,具體的注冊(cè)流程我就不贅述了。就算是不看文章,自己上官網(wǎng)也能鼓搗個(gè)七七八八。

挑著撿著說說集成時(shí)候關(guān)于配置的注意點(diǎn)。

首先說,不管使用傳統(tǒng)的集成方式還是使用第三方工具,都需要配置大量的 gradle 信息。

我不太習(xí)慣在 app.gradle 文件里添加大量代碼,所以都會(huì)先抽離到 bintrayConfig.gradle 文件中,然后在 app.gradle 中添加依賴,這里先給大家說明一下。

傳統(tǒng)方式配置

1、在 project 的 gradle 文件中添加:

 classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
 classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'

2、之后在你想要發(fā)布的 module 的 gradle 文件中添加:

apply from: 'bintrayConfig.gradle'

3、然后創(chuàng)建這個(gè) bintrayConfig.gradle 文件:

// 需要添加的依賴
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

version = "1.0.0"    //這個(gè)是版本號(hào),必須填寫
def siteUrl = 'https://github.com/YourGitHubId/Repo' // 項(xiàng)目的主頁
def gitUrl = 'https://github.com/YourGitHubId/Repo.git' // Git倉庫的url

group = "你的包名" // 這里是groupId ,必須填寫  一般填你唯一的包名

install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                // 項(xiàng)目描述,復(fù)制我的話,這里需要修改。
                name '測(cè)試 bintary 搭配 maven 上傳'   //項(xiàng)目描述
                url siteUrl
                // 軟件開源協(xié)議,現(xiàn)在一般都是Apache License2.0吧,復(fù)制我的,這里不需要修改。
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                //填寫開發(fā)者基本信息,應(yīng)該不是必填
                developers {
                    developer {
                        id ''  
                        name ''  
                        email '' 
                    }
                }

                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
}

//下面設(shè)置編碼格式,重點(diǎn)注意,如果不設(shè)置可能會(huì)在gradlew install的時(shí)候出現(xiàn)GBK編碼映射錯(cuò)誤
javadoc {
    options {
        encoding "UTF-8"
        charSet 'UTF-8'
        author true
        version true
        links "http://docs.oracle.com/javase/7/docs/api"
        title '這里是 javadoc 的標(biāo)題,按需修改'  
    }
}

artifacts {
    archives sourcesJar
}

// 生成jar包
task releaseJar(type: Copy) {
    from( 'build/intermediates/bundles/release')
    into( '../jar')
    include('classes.jar')
    rename('classes.jar', 'test-sdk-' + version + '.jar')
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {

    //從 local.properties 讀取用戶名和秘鑰
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apiKey")

    configurations = ['archives']
    pkg {
        userOrg = "你的 bintray 組織信息"
        repo = "你在 bintray 創(chuàng)建的倉庫名稱"  
        name = "發(fā)布到 bintray 后的文件名稱"
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true  // 是否是公開項(xiàng)目
    }
}

用戶名不說了,秘鑰的獲取方式是:用戶名 -> 編輯資料 -> API KEY

4、完成以后在終端執(zhí)行:

./gradlew install

install 是上邊 bintray.gradle 里邊配置的方法,如果報(bào)找不到,就看看有沒有配置好

5、成功之后就會(huì)在 build/output 下看到 arr 文件,再執(zhí)行:

./gradlew bintrayUpload

搞定。

使用 bintray-release

這個(gè)是 GitHub 上一個(gè)開源庫,本來挺火的,配置簡單。

但是升級(jí)到 gradle tools 3.1.X, gradle version 4.6+ 后, novoda/bintray-release有個(gè)嚴(yán)重 bug,導(dǎo)致上傳失敗。

com.novoda.gradle.release.AndroidLibrary$LibraryUsage.getGlobalExcludes()Ljava/util/Set #216。

網(wǎng)上很多人說用降低 gradle 版本到 version 4.4,或者其他各種方式,但我怎么都搞不好。

好在找到了另一個(gè)方案,親測(cè)可行,測(cè)試版本 gradle tools 3.6.1,gradle version 5.6.4。

下邊簡單記錄一下。

1、project 的 gradle 下添加:

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        // The current version can be found here https://git.io/fNUnx
        classpath "guru.stefma.bintrayrelease:bintrayrelease:$bintrayReleaseVersion"
    }
}

2、之后在你想要發(fā)布的 module 的 gradle 文件中添加:

apply from: 'bintrayConfig.gradle'

3、同樣的,創(chuàng)建這個(gè) bintrayConfig.gradle 文件:

// 這里有前置依賴,可以是下面幾個(gè)的其中一個(gè),我們是在 library 庫里引用的,所以沒有問題
// com.android.library, java-library, org.jetbrains.kotlin.jvm, kotlin
apply plugin: "guru.stefma.bintrayrelease"

version = "1.0.5"
group = "一般是包名"
androidArtifact { 
    artifactId = "別人添加你這個(gè)項(xiàng)目依賴的時(shí)候看到的名字"
}
publish {
    userOrg = '你的 bintray 用戶名'
    repoName = '上傳的 bintray 以后的名字'
    desc = 'this is a simple description'
    website = 'https://github.com/YourGithubID/Repo'
}

那個(gè) group 和 artifactId 我看了好多資料也沒搞明白,最后自己試了幾次才明白的:

implementation 'group:artifactId:version' // 是這個(gè)結(jié)構(gòu)的
// 比如下邊這個(gè)
// 發(fā)布的時(shí)候 group 就是 androidx.core,artifactId 是 core-ktx,version 是 1.2.0
implementation 'androidx.core:core-ktx:1.2.0'

4、配置完成以后,在終端執(zhí)行:

./gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false

引入到項(xiàng)目中

如果想直接在 gradle 引用,不做其他配置的話,你的賬號(hào)應(yīng)該需要是企業(yè)賬號(hào)。

在你第一次上傳完成后,需要 add to JCenter 提交審核,像這樣:

[站外圖片上傳中...(image-4fc8bf-1584791702981)]

過幾個(gè)小時(shí),通過 jcenter 那邊的審核就會(huì)在 bintray 上收到 jcenter 那邊的同意消息提醒。

然后就可以直接引用了。

如果沒有提交到 jcenter 的話,那就需要在 project 的 gradle 下添加 maven 依賴:

maven { url 'https://你的用戶名.bintray.com/你的 repo 目錄' }

之后再去 module 的 gradle 里邊添加依賴,應(yīng)該就沒有問題啦。

大概就這些內(nèi)容,最后祝大家少出 bug 吧,哈哈。

最后給自己打個(gè)廣告。

不寫代碼的時(shí)候我偶爾寫寫公眾號(hào),「談?wù)務(wù)勫X」,那兒是個(gè)完全不一樣的世界。

歡迎你來看看我,比心~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容