【Android】 項目(庫)上傳Jcenter方法參考(內含兩種方法)

Android 項目上傳Jcenter

本文僅用於個人學習記錄使用,不爲幫助他人,如果你覺得我寫的對你有用,我表示感謝,如果沒用,請跳過,拒絕網絡憤青,拒絕網絡暴力。批評指點可以幫助別人,接受批評指點,不接受噴子。

準備工作

去bintray官網註冊賬號,賬號類型有兩種,第一種是公司類型(Sign Up to a Free Trial):https://bintray.com/signup

第二種是個人開源類型( Sign Up to an Open Source account):https://bintray.com/signup/oss

我們要用的是第二個鏈接!第二個鏈接!!第二個鏈接!!!


註冊郵箱不要用QQ、163,我就是在QQ郵箱這裏鬱悶了半晌,主要是這網站它不提醒郵箱有誤,只是把郵箱那一欄給用紅色邊框圈了起來,這誰TM知道啥意思啊,算了不吐槽了,後來用了Gmail(偷偷告訴你,翻牆用的SSR),算註冊成了。

不想上圖了,直接文字描述吧,真的感覺寫這個好費勁啊,真心感覺那些提供文章的朋友們,太辛苦了,感同身受啊。
1、註冊登錄成功後,點擊 Add New Repository 進入添加倉庫界面
2、倉庫名(Name)稱可以隨便起,沒試過中文,用英文吧,哪怕是拼音
3、類型(Type)選擇Maven
4、開源協議(Default Licenses(Optional))可以選擇你喜歡的協議,個人喜歡Apache-2.0
5、倉庫描述(Description(Potional))這個就隨便寫了,不過本着認真負責的態度,你應該寫個能表示倉庫作用的文檔

接下來就是獲取ApiKey

1、頁面右上角有個個人賬號的位置,點擊之後的下拉框中選擇Edit Profile選項
2、新的頁面中,點擊左邊的一列選項的最後一欄,API Key ,然後輸入你的登錄密碼,就可以獲取到一串API key了

下面是正文

第一種方式

看法:個人認爲這種方式比較全面一些,能配置的東西也比較多,但是比較複雜,坑也不少,不過,不跳幾次坑又怎能體會從坑裏爬出來的喜悅呢?

  • 1、android studio中新建項目,然後再新建一個library的module,這個過程大家應該都已經輕車熟路了,不再浪費篇幅,記住把library依賴到app的module下就行了

  • **2、項目的build.gradle 的dependencies 項代碼結果

dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        //以下兩項是添加的
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
}
  • *3、library下的build.gradle文件,我儘量爲我能想到的每一項加上了註釋
apply plugin: 'com.android.library'
//以下兩項是添加的插件
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

android {
    compileSdkVersion 25
    buildToolsVersion "26.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    //這項可以不讓報過多檢查的錯誤,不知道理解對不對,反正加了也不多,那就加吧
    lintOptions {
        abortOnError false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.4.0'
    testCompile 'junit:junit:4.12'
}

//這裏讀取本地的local.properties文件
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

//這裏讀取local.properties文件中配置的屬性
def projectName = properties.getProperty("project.name")
def projectGroupId = properties.getProperty("project.groupId")
def projectPackaging = properties.getProperty("project.packaging")
def projectSiteUrl = properties.getProperty("project.siteUrl")
def projectGitUrl = properties.getProperty("project.gitUrl")

def versionName = properties.getProperty("version.name")
def versionDesc = properties.getProperty("version.desc")

def pkgName = properties.getProperty("pkg.name")
def pkgRepo = properties.getProperty("pkg.repo")
def pkgUserOrg = properties.getProperty("pkg.userOrg")

def developerId = properties.getProperty("developer.id")
def developerName = properties.getProperty("developer.name")
def developerEmail = properties.getProperty("developer.email")

def bintrayUser = properties.getProperty("bintray.user")
def bintrayApikey = properties.getProperty("bintray.apikey")

//以下兩項也加上吧,不知道能不能缺,沒時間測試了
group = projectGroupId
version = versionName

bintray {
    //bintray用戶名
    user = bintrayUser
    //上面獲取的API Key
    key = bintrayApikey

    pkg {
        //創建的倉庫名字,就是點擊Add New Repository 時新建的倉庫的Name,
        //不然系統不知道傳到哪個倉庫
        repo = pkgRepo
        //自己bintray創建的organization名稱,個人的其實就是用戶名
        userOrg = pkgUserOrg 
        //項目名稱,名字起得有點怪,別介意,其實它不起啥毛用
        name = pkgName
        //以下兩項最好都有,不然別人就只能依賴你的項目,當想下載你的源碼看看時就找不到地方了
        //項目首頁,比如https://www.github/***/***
        websiteUrl = projectSiteUrl
        //項目拉取地址,比如https://www.github/***/***.git
        vcsUrl = projectGitUrl

        licenses = ['Apache-2.0']//創建倉庫時選擇的license type
        publish = true // 是否是公開項目。

        version {
            //版本號
            name = versionName
            //版本描述
            desc = versionDesc
            released = new Date()
            vcsTag = 'v1.0'
            attributes = ['gradle-plugin': 'com.use.less:com.use.less.gradle:gradle-useless-plugin']
        }
    }
    configurations = ['archives']
}



// This generates POM.xml with proper parameters
install {
    repositories.mavenInstaller {
        pom {
            project {
                //項目名,感覺沒啥重要作用
                name projectName
                //包名,比如( com.ergouzi )
                groupId projectGroupId
                //項目名稱,可以自己定義一個,比如( test ),不一定就是android studio項目名
                version versionName
                //打包類型,一般是aar
                packaging projectPackaging
                url projectSiteUrl
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        //開發者id
                        id developerId
                        //開發者姓名
                        name developerName
                        //開發者郵箱
                        email developerEmail
                    }
                }
                scm {
                    connection projectGitUrl
                    developerConnection projectGitUrl
                    url projectSiteUrl
                }
            }
        }
    }
}

//打包源碼
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}
//打包源碼doc文檔
task javadoc(type: Javadoc) {
    //這裏設置的兩個UTF-8的編碼是爲了不讓報 “編碼UTF-8的不可映射字符”的錯,現在看到這個錯就噁心
    options.encoding = "UTF-8"
    options.charSet = '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
}
artifacts {
    archives javadocJar
    archives sourcesJar
}


//提交命令:首先執行gradlew install,成功後執行gradlew bintrayUpload,再次成功後就已經成功上傳到bintray了

  • 4、下面給出我的本地的local.properties配置作爲參考
ndk.dir=D\:\\ANDROID\\AndroidNDK\\android-ndk-r14b-windows-x86_64\\android-ndk-r14b
sdk.dir=D\:\\ANDROID\\AndroidSDK

#用戶名和API Key
bintray.user=xiao******
bintray.apikey=ab58**************************489e

#project
#項目名
project.name=項目名
project.groupId=com.ergouzi包名
project.packaging=aar
project.siteUrl=https://www.github/***/***
project.gitUrl=https://www.github/***/***.git

#version
version.name=1.0.0最好從1.0.0開始(阿里強條)
version.desc=項目描述.

#pkg
pkg.name=
pkg.userOrg=xiao******
#倉庫名
pkg.repo=

#developer
developer.id=xiao******
developer.name=ergouzi
developer.email=liu********@gmail.com
  • 最後就是在android studio 的Terminal中輸入gradlew install命令,等成功後,再輸入gradlew bintrayUpload進行提交到bintray,再次成功後就可以去bintray網站上去申請上傳到Jcenter上了

第二種方式

看法:這種方式實在是簡單,但是,容易下載novoda這個插件失敗,我試了很久才成功。

  • 1、android studio中新建項目,這個module須是library類型的,就是項目僅僅有一個庫,沒有application,不然怎麼提交都提交不上,官方文檔好像也是這麼做的,我就是在這個坑裏爬了一天才爬出來

  • 2、項目的build.gradle 的 dependencies 項和 allprojects 項代碼結果

dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        //以下兩項是添加的
        classpath 'com.novoda:bintray-release:0.7.0'
}

allprojects {
    repositories {
        google()
        jcenter()
    }
    //下面這項解決  編碼UTF-8的不可映射字符  親測可用
    tasks.withType(Javadoc) {
        options{
            encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}
  • 3、library下的build.gradle文件,我儘量爲我能想到的每一項加上了註釋
apply plugin: 'com.android.library'
//下面這項是添加的插件
apply plugin: 'com.novoda.bintray-release'



android {
    compileSdkVersion 26
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    lintOptions {
        abortOnError false
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
// read properties

//賬戶名
def bintrayUser = properties.getProperty("bintray.user")
//項目apikey
def bintrayApikey = properties.getProperty("bintray.apikey")
//novoda默認認識的bintray項目名稱是maven,但是也可以自己定義,但是名稱要和bintray上的對應
def publishRepoName     = properties.getProperty("publish.repoName")
//賬戶名
def publishUserOrg      = properties.getProperty("publish.userOrg")
//包名
def publishGroupId      = properties.getProperty("publish.groupId")
//項目名
def publishArtifactId   = properties.getProperty("publish.artifactId")
//版本號
def version             = properties.getProperty("publish.publishVersion")
//項目描述
def publishDesc         = properties.getProperty("publish.desc")
//項目首頁地址
def publishWebsite      = properties.getProperty("publish.website")

//這種方式簡單倒是簡單了,但是一直找不到解決編碼錯誤的問題
//註釋有中文時總是報  GBK的不可映射文件  的錯,找不到解決辦法,於是回到老方式去了
publish {
    repoName        = publishRepoName
    userOrg         = publishUserOrg
    groupId         = publishGroupId
    artifactId      = publishArtifactId
    publishVersion  = version
    desc            = publishDesc
    website         = publishWebsite
}


/*
項目上傳bintray命令,在android studio Terminal中執行

gradlew clean build bintrayUpload -PbintrayUser=hyman -PbintrayKey=xxxxxxxxxxxxxxxxxxxxxx -PdryRun=false

***一行輸入,不要回車,中間的分割是空格***
 */

  • 4、下面給出我的本地的local.properties配置作爲參考
ndk.dir=D\:\\ANDROID\\AndroidNDK\\android-ndk-r14b-windows-x86_64\\android-ndk-r14b
sdk.dir=D\:\\ANDROID\\AndroidSDK

#賬戶名
bintray.user=xiao******
#項目apikey
bintray.apikey=ab58***************************489e

#novoda默認認識的bintray項目名稱是maven,看publish的源碼發現repoName這個屬性默認值是maven,也是相當的坑啊,但是也可以自己定義,不過名稱要和bintray上的倉庫名要對應
publish.repoName=maven
#賬戶名
publish.userOrg=xiao******
#包名
publish.groupId=com.ergouzi
#項目名
publish.artifactId=
#版本號
publish.publishVersion=1.0.0
#項目描述
publish.desc=.
#項目首頁地址
publish.website=https://github.com/****/****

最後 就是在android studio 的Terminal中輸入

gradlew clean build bintrayUpload -PbintrayUser=### -PbintrayKey=##### -PdryRun=false

命令,PbintrayUser是你的bintray用戶名,PbintrayKey是你的API Key,等成功後就可以去bintray網站上去申請上傳到Jcenter上了

具體申請方式也說一下吧
//在Add New Repository 按鈕的下邊是已經成功創建的倉庫,如果你的本地項目已經上傳成功,那麼點擊這個項目,裏面會有一個上傳成功的項目在下面被一個框圈起來,還有幾個評分的小星星,點擊這個項目,然後在右邊的中下部會有一個 Add to Jcenter 的按鈕,點擊,然後寫一下申請理由,發送申請就行了,應該不到一天就會給回覆。

  • 終於寫完了,成功通過申請後就可以在gradle中引用了,網絡一大堆東西都看了,不知道誰對誰錯,就不寫參考鏈接了,有具體通不過的地方直接百度吧。

成功後查看地址:https://jcenter.bintray.com/com/liuchaoya/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章