Android發(fā)布Library到JitPack

對于開發(fā)者來說,總會有一些自己寫的東西,包括但不限于自定義View,自定義一些框架,有時我們開發(fā)中覺得很多大牛的東西很好用,他們一般都是托管到Github上,而他們的庫都是有一些倉庫來進行托管,最常用的就是maven跟jcenter了,但是對于國內(nèi)開發(fā)者來說,這兩個倉庫的下載速度真的是一言難盡,所以最近幾年出現(xiàn)了另外一個倉庫,JitPack。這個托管倉庫與Github銜接真的很棒,現(xiàn)在很多開源庫都是托管在這里了,下載速度也是很不錯的,下面介紹怎么將自己的開源庫托管到JitPack。

創(chuàng)建自己的開源庫并提交到Github

這里不多解釋了,相信看這篇文章的同學對Android開發(fā)很熟練了,所以自動跳過這一步了。

配置maven倉庫

這里說的配置maven倉庫,是指Github的倉庫插件,因為你需要通過Github來發(fā)布你的開源庫嘛,肯定需要他們的插件了,這里加入插件也很簡單,首先在你的項目根目錄下的build.gradle文件中添加:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        // add github maven plugin
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

這里我使用的是1.5版本的,因為我使用的gradle版本是3.3的,各個不同的版本使用的插件版本也不一樣,具體見這里。

配置好插件之后呢,還要配置一些東西,在你需要發(fā)布的library中的build.gradle文件中加入以下:

apply plugin: 'com.android.library'
// add these
apply plugin: 'com.github.dcendents.android-maven'
group='com.github.××××' // ××××代表你github名字

沒錯,這里就是運用插件的地方了。
這樣我們的配置就完成了。有的同學可能看到有的文章寫了要配置倉庫,像這樣:

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" } // add this
    }
}

其實這步不需要的,這步一般是驗證你的庫已經(jīng)托管成功了才會加,所以你可加可不加,在發(fā)布庫時是不需要加的。

配置好了之后,我們就可以提交代碼進行發(fā)布了嗎?不不不,有一重要的一步必須要執(zhí)行,那就是需要我們在根目錄下執(zhí)行

./gradlew install

如果你不執(zhí)行該命令,那么在JitPack上你的庫是編譯不過的,我開始沒執(zhí)行這句命令,一直發(fā)布不上去,查看了Log才發(fā)現(xiàn)。

Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
java.lang.IllegalStateException: buildToolsVersion is not specified.
    at com.google.common.base.Preconditions.checkState(Preconditions.java:173)
    at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:558)
    at com.android.build.gradle.BasePlugin.lambda$null$4(BasePlugin.java:526)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:81)
    at com.android.build.gradle.BasePlugin.lambda$createTasks$5(BasePlugin.java:522)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:93)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:82)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:79)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:30)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy15.afterEvaluate(Unknown Source)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:82)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:76)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.access$000(LifecycleProjectEvaluator.java:33)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$1.execute(LifecycleProjectEvaluator.java:53)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$1.execute(LifecycleProjectEvaluator.java:50)
    at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:628)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:129)
    at org.gradle.api.internal.project.DefaultProjectAccessListener.evaluateProjectAndDiscoverTasks(DefaultProjectAccessListener.java:32)
    at org.gradle.api.internal.project.DefaultProjectAccessListener.beforeResolvingProjectDependency(DefaultProjectAccessListener.java:28)
    at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency.beforeResolved(DefaultProjectDependency.java:107)
...
FAILURE: Build failed with an exception.

* Where:
Build file '/home/jitpack/build/percentview/build.gradle' line: 2

* What went wrong:
A problem occurred evaluating project ':percentview'.
> Failed to apply plugin [id 'com.github.dcendents.android-maven']
   > Could not create plugin of type 'AndroidMavenPlugin'.
      > No service of type Factory<LoggingManagerInternal> available in ProjectScopeServices.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

WARNING:
Gradle 'install' task not found. Please add the 'maven' or 'android-maven' plugin.
See the documentation and examples: https://jitpack.io/docs/

具體Log如上。
執(zhí)行命令后就可以直接提交代碼到Github了。

發(fā)布自己的開源庫

因為Github與JitPack對接很好,所以我們在Github上操作后JitPack也會同步,在提交代碼后我們需要Release我們的版本,操作也很簡單,
如下圖:

圖1

點擊上面四個選項中的releases即可,然后按照提示創(chuàng)建tag以及相關信息,保存。

查看使用自己的開源庫

當我們Release我們的開源庫之后,就可以登錄JitPack來查看開源庫的情況,比如查看我的開源庫情況:

圖2

這是我開源庫的編譯情況,在Log那欄,綠色代表編譯通過,紅色代表編譯失敗,然后點擊Get it會告訴你怎么使用:

圖3

這段你也可以復制到你的README.md中去,修改一下,這里JitPack還告訴怎么生成快捷鏈接的圖標,你也可以加入到你的README.md中去

圖4

到此,發(fā)布到自己的開源庫到JitPack就結束了,如果在發(fā)布過程中遇到問題可以使勁戳這里,這里才是最專業(yè)的!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內(nèi)容