經(jīng)常在github上看到通過類似的語句引進別人的庫:
repositories {
jcenter()
}
dependencies {
compile 'com.flipboard:bottomsheet-core:1.5.0'
compile 'com.flipboard:bottomsheet-commons:1.5.0' // optional
}
不得不說,使用起來真方便。那如果自己有好的庫,如何分享給其他人,或者放在Bintray,方便自己使用呢?
發(fā)布第一個Android庫(想想還是有點小激動)
先到https://bintray.com注冊,注冊之后獲取API-Key:
必須要特別感謝這位作者:Ashraff Hathibelagal
http://code.tutsplus.com/zh-hans/tutorials/creating-and-publishing-an-android-library--cms-24582
基本上都是按照他的教程做的。
也參考了XRecyclerView的gradle,也表示感謝.
文章雖好,但也有坑....
于是自己又整理了一下
主要分兩步:
1,像往常一樣寫一個library
2,發(fā)布到Bintray
這里需要修改兩個gradle。
Project build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
/*
第 1 步:添加必要的插件
為了在 Android Studio 里與 Bintray 交互,你應該把 Bintray 插件引入到項目的 build.gradle 文件的 dependencies 里。
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
因為你要把庫上傳到 Maven 倉庫,你還應該像下面這樣添加 Maven 插件。
classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"
*/
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Module build.gradle
apply plugin: 'com.android.library'
/*
第 2 步:應用插件
打開您的庫模塊的 build.gradle 文件并添加以下代碼,以應用我們在上一步中添加的插件。
*/
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
/*
第 3 步: 指定 POM 詳細信息
在上傳庫時,Bintray 插件會尋找 POM 文件。 即使 Maven 插件為你生成了它,你也應該自己指定
groupId 標簽和 version 標簽的值。 要這樣做,請使用 gradle文件中的group 和version 的變量。
*/
version = "1.0.0"
group = "com.example"
def siteUrl = 'https://github.com/heinika/MyHelloWorldLibrary'
def gitUrl = 'https://github.com/heinika/MyHelloWorldLibrary.git'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}
/*第 4 步: 生成源 JAR
為了遵守 Maven 標準,你的庫也應該有一個包含了庫的源文件的 JAR 文件。
為了生成 JAR 文件,需要創(chuàng)建一個新的 Jar任務,
generateSourcesJar,并且使用 from 功能指定的源文件的位置。*/
task generateSourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier 'sources'
}
/*
第 5 步: 生成 Javadoc JAR
我們同樣推薦,在你的庫里有一個包含 Javadocs 的 JAR 文件。
因為目前你還沒有任何 Javadocs,需要創(chuàng)建一個新的 Javadoc 任務,generateJavadocs,來生成它們。
使用 source 變量來指定源文件的位置。 你還應該更新 classpath 變量,以便該任務可以找到屬于 Android SDK 的類。
你可以通過把 android.getBootClasspath 方法的返回值添加給他,來這么做。
*/
task generateJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
/*下一步,要從 Javadocs 生成 JAR,需要創(chuàng)建 Jar 任務,generateJavadocsJar
,并把 generateJavadocs 的 destinationDir 屬性傳遞給它的 from 功能。
為了確保在 generateJavadocsJar 任務只在 generateJavadocs 任務完成后才開始,
需要添加下面的代碼片段,它使用了 dependsOn 方法來決定任務的順序:
您的新任務應如下所示:*/
task generateJavadocsJar(type: Jar, dependsOn: generateJavadocs) {
from generateJavadocs.destinationDir
classifier 'javadoc'
}
/*
*第 6 步: 引入生成的 JAR 文件
*為了把源和 Javadoc JAR 文件導入到 artifacts 的列表里,你應該把他們的任務的名字添加到 configuration 里,
* 稱為 archives,artifacts 列表將被上傳到 Maven 倉庫。 使用下面的代碼片段來完成:
*/
artifacts {
archives generateJavadocsJar
archives generateSourcesJar
}
/*第 7 步: 運行任務
現(xiàn)在是運行我們在前幾步里創(chuàng)建的任務的時候了。 打開 Gradle Projects 窗口,搜索名為 install 的任務。*/
/*
第 8 步: 配置 Bintray 插件
要配置插件,你應該使用 Gradle 文件中的 bintray 閉包。 首先,使用與你的 Bintray 用戶名和 API 密鑰對應的 user 和 key 變量進
行身份驗證。在 Bintray,你的庫會被放置在 Bintray package 里。 你應該使用 pkg 閉包里命名直觀的 repo、 name、licenses 和
vcsUrl 參數(shù),提供詳細的相關(guān)信息, 如果這個包不存在,會為你自動創(chuàng)建。當你將文件上傳到 Bintray 時,他們會與 Bintray 包里的一
個版本相關(guān)聯(lián)。 因此,pkg 必須包含一個 version 閉包,閉包的 name 屬性要設為獨一無二的名稱。 另外,你還可以使用 desc,
released 和 vcsTag參數(shù)來提供描述、 發(fā)布日期和 Git 標簽。
最后,為了指定應該上傳的文件,要把 configuration 參數(shù)的值設為 archives。
bintray {
user = 'test-user'
key = '01234567890abcdef01234567890abcdef'
pkg {
repo = 'maven'
name = 'com.github.hathibelagal.mylittlelibrary'
version {
name = '1.0.1-tuts'
desc = 'My test upload'
released = new Date()
vcsTag = '1.0.1'
}
licenses = ['Apache-2.0']
vcsUrl = 'https://github.com/hathibelagal/LibraryTutorial.git'
websiteUrl = 'https://github.com/hathibelagal/LibraryTutorial'
}
configurations = ['archives']
}
*/
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("BINTRAY_USER")
key = properties.getProperty("BINTRAY_KEY")
configurations = ['archives']
pkg {
repo = "maven"
name = "MyHelloWorldLibrary" //發(fā)布到JCenter上的項目名字
version {
name = '1.0.1-tuts'
desc = 'My test upload'
vcsTag = '1.0.0'
}
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
/*
第 9 步: 使用 Bintray 插件上傳文件
再次打開 Gradle Projects 窗口,搜索 bintrayUpload 任務。 雙擊它,啟動上傳文件。*/
/*
一旦任務完成,你就能打開瀏覽器來訪問你的 Bintray 包的詳細信息頁面。 你會看到一個通知,
說你有四個未發(fā)布的文件。 如果要發(fā)布這些文件,單擊 Publish 鏈接。 */
/*
* 使用 Bintray 里的庫
你的庫現(xiàn)在已經(jīng)可以作為 Bintray 包使用了。 只要你分享了你的 Maven 倉庫的 URL,加上 group ID、artifact ID 和 version number,
任何開發(fā)人員都可以訪問你的庫。 例如,為了使用我們剛才創(chuàng)建的庫,開發(fā)人員必須引入下面這個代碼片段:
repositories {
maven {
url 'https://dl.bintray.com/eruzza/maven'
}
}
dependencies {
compile 'com.github.hathibelagal.librarytutorial:mylittlelibrary:1.0.1@aar'
}
注意,在把庫添加為 compile 依賴之前,
開發(fā)人員必須顯式地在 repositories 列表里,引入你的倉庫。*/
/*
* Bintray的用戶手冊:https://bintray.com/docs/usermanual/
*/
將庫添加到 JCenter
默認情況下,Android Studio 會搜索一個名為 JCenter 的倉庫里面的庫。 如果你把自己的庫引入到了 JCenter 存儲庫,開發(fā)人員就不必向他的 repositories
里添加任何東西了。
要將你的庫添加到 JCenter,需要打開瀏覽器并訪問你的 Bintray 的包的詳細信息頁面。 單擊 Add to JCenter 按鈕
接著你進入一個頁面,讓你填寫一些信息。 你可以用 Comments 區(qū)域來提及任何關(guān)于這個庫的細節(jié)。
單擊 Send 按鈕,啟動 Bintray 的審查過程。 在一兩天以內(nèi),Bintray 的工作人員會把你的庫鏈接到 JCenter 倉庫,這樣你就將能在你的包的詳細信息頁面上,看到指向 JCenter 的鏈接了。
任何開發(fā)人員現(xiàn)在都可以使用你的庫,而無需更改 repositories
列表。
使用
以后用到這個庫的時候,只需要下面一句就可以了。是不是很爽,哈哈哈哈。
compile 'com.example:myfristlibrary:1.0.0'
項目地址:https://github.com/heinika/MyHelloWorldLibrary
補坑: gradle 的配置文件不要設置代理.
另外找不到問題的時候看命令行的日志.