將Library Module上傳Jcenter的文章,網上一搜一大堆,主要分爲兩類,一類是正常的流程,使用gradle上傳到Jcenter,還有一種較爲簡便,是將上傳的方法封裝成一個gradle插件,你直接依賴,設置,調用方法便可。在寫這篇文章以前,我特地將兩種方法都作了測試,我我的仍是感受用原生的方法較好,一是能瞭解上傳流程,其次,遇到坑了也知道該怎麼找問題。javascript
在開始以前,須要說明因爲上傳依賴的都是gradle,但願開發者能有一些基本的gradle語法常識,因此這裏推薦我以前寫的兩篇文章:
Android工程gradle詳解
Groovy基礎java
首先確定是須要去官網註冊一個帳號:android
帳號有了,你要想上傳Module,至少你要有一個Module,你能夠新建,也可使用現有已經寫好的。可是要注意,要上傳的Module,必需要是Library Module,有人可能問,這有啥區別?
區別在這裏:git
defaultConfig {
minSdkVersion 9
targetSdkVersion 24
versionCode 1
versionName "1.0"
}複製代碼
Library Module沒有applicationId,App Module有applicationId,也就是你的包名。github
注意這裏說的是根目錄,也就是Project的build.gradle:web
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'//2.1.2對應1.3
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.0.0" //
}
}複製代碼
須要注意若是用的2.1.2的gradle使用的上傳插件是1.3,若是別的版本,可能須要修改版本,不然編譯會報錯。api
正常來講,根目錄的配置就完成了。若是你的Project下的Module有多個要上傳,建議將配置的基本資料放在這裏:網絡
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'//2.1.2對應1.3
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.0.0" //
}
}
allprojects {
repositories {
jcenter()
}
}
ext {
siteUrl = 'https://github.com/xxx/xxxx'
gitUrl = 'https://github.com/xxxx/xxxx.git'
group = "com.xxx.xxxx"
version = "1.4"
id = 'xxx'
name = 'xxx'
email = xxxx@vip.qq.com'
packaging = 'aar'
}
task clean(type: Delete) {
delete rootProject.buildDir
}複製代碼
看到上面代碼中ext部分就是須要本身根據本身工程信息填寫的部分。
好了,這裏的配置就完成了app
這兩個信息咱們須要寫在local.properties中,固然,你可能會問爲何非要寫在這個文件中,不能寫在剛纔的ext中嗎?
能夠,可是這兩個信息涉及保密的東西,通常不對外,你將代碼上傳到github上,build.gradle文件是暴露的,可是local.properties是不暴露的。
首先須要先登陸到Jcenter官網->Edit Profile->API Key:maven
而後打開local.properties放入,這個文件裏面應該還有你的android sdk或ndk的路徑配置:
sdk.dir=/Users/xxxx/Library/Android/sdk
BINTRAY_USER=xxxx
BINTRAY_KEY=xxxxxxx複製代碼
接下來就是重頭戲了,上傳的代碼。這些代碼須要寫在你要上傳的Module的build.gradle中,你能夠就寫在dependencies
的底下。
首先須要引入兩個插件(爲了讓看官們,理解應該寫在哪,我在上面加入了dependencies部分,這個與上傳無關):
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'複製代碼
接下來是定義寫基本信息:
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
def libname = 'sina_full'//項目的名字 這個與以後生成的路徑無關,單純是在網站上的顯示
def libdesc = '新浪完整版' //項目的名字 這個與以後生成的路徑無關,單純是在網站上的顯示
version = rootProject.ext.version//版本號,這個咱們寫在ext中了,沒看到的朋友,往前看
group = rootProject.ext.group//這個就是路徑名的group了複製代碼
這裏要特別注意group就是上傳成功以後,依賴的group,具體能夠參照下圖:
//生成源文件
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
//生成文檔
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
options.encoding "UTF-8"
options.charSet 'UTF-8'
options.author true
options.version true
failOnError false
}
//文檔打包成jar
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
//拷貝javadoc文件
task copyDoc(type: Copy) {
from "${buildDir}/docs/"
into "docs"
}
//上傳到jcenter所須要的源碼文件
artifacts {
archives javadocJar
archives sourcesJar
}
// 配置maven庫,生成POM.xml文件
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging rootProject.ext.packaging
name libname
url siteUrl
licenses {
license {
name libname
url rootProject.ext.siteUrl
}
}
developers {
developer {
id rootProject.ext.id
name rootProject.ext.name
email rootProject.ext.email
}
}
scm {
connection rootProject.ext.gitUrl
developerConnection rootProject.ext.gitUrl
url rootProject.ext.siteUrl
}
}
}
}
}複製代碼
以上代碼就是生成上傳所須要的東西,接着就是上傳了:
Properties properties = new Properties()//先要讀取local.properties中的name和key
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("BINTRAY_USER") //讀取 local.properties 文件裏面的 bintray.user
key = properties.getProperty("BINTRAY_KEY") //讀取 local.properties 文件裏面的 bintray.apikey
configurations = ['archives']
pkg {
repo = "maven"
name = libname //發佈到JCenter上的項目名字,必須填寫
desc = libdesc //項目描述
websiteUrl = rootProject.ext.siteUrl
vcsUrl = rootProject.ext.gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}複製代碼
至此,一切配置都完成了,能夠運行了。
運行分紅兩步:
gradlew install
gradle install
gradlew bintrayUpload
gradle bintrayUpload
在maven庫列表界面找你你剛纔上傳的maven庫點進去便可看到相關的項目詳情:
在這裏,我會總結一下上傳的時候可能遇到的坑,如下內容不必定是我遇到的,有部分摘自網絡,方便你們查看:
task javadoc(type: Javadoc) {
options.encoding "UTF-8"
options.charSet 'UTF-8'
}複製代碼
android {
lintOptions {
abortOnError false
}
}複製代碼
allprojects {
repositories {
jcenter()
}
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
options.addStringOption('encoding', 'UTF-8')
}
}複製代碼
最後仍是推薦一下個人公衆號,歡迎給我留言。
更多的開發知識,能夠關注個人公衆號: