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中引用了,網絡一大堆東西都看了,不知道誰對誰錯,就不寫參考鏈接了,有具體通不過的地方直接百度吧。