編輯:關於Android編程
將Gradle項目發布到Jcenter和Maven Central:為了方便我們理解Android studio是如何幫助我們獲取開源庫的,我們需要理清幾個概念。Apache Maven是Apache開發的一個工具,提供了用於貢獻library的文件服務器。總的來說,只有兩個標准的Android library文件服務器:jcenter 和 Maven Central。
jcenter是一個由 bintray.com維護的Maven倉庫 。你可以在這裡看到整個倉庫的內容。
我們在項目的build.gradle 文件中如下定義倉庫:
allprojects { repositories { jcenter() } }
Maven Central 則是由sonatype.org維護的Maven倉庫。
如我們使用Maven Central:
allprojects { repositories { mavenCentral() } }
注:不管是jcenter還是Maven Central ,兩者都是Maven倉庫。雖然jcenter和Maven Central 都是標准的 android library倉庫,但是它們維護在完全不同的服務器上,由不同的人提供內容,兩者之間毫無關系。
除了兩個標准的服務器之外,如果我們使用的library的作者是把該library放在自己的服務器上,我們還可以自己定義特有的Maven倉庫服務器。Twitter的Fabric.io 就是這種情況,它們在https://maven.fabric.io/public上維護了一個自己的Maven倉庫。如果你想使用Fabric.io的library,你必須自己如下定義倉庫的url。
repositories { maven { url 'https://maven.fabric.io/public' } }
然後在裡面使用相同的方法獲取一個library。
dependencies { compile 'com.crashlytics.sdk.android:crashlytics:2.2.4@aar' }
起初,Android Studio 選擇Maven Central作為默認倉庫。如果你使用老版本的Android Studio創建一個新項目,mavenCentral()會自動的定義在build.gradle中。
但是Maven Central的最大問題是對開發者不夠友好。上傳library異常困難。上傳上去的開發者都是某種程度的極客。同時還因為諸如安全方面的其他原因,Android Studio團隊決定把默認的倉庫替換成jcenter。正如你看到的,一旦使用最新版本的Android Studio創建一個項目,jcenter()自動被定義,而不是mavenCentral()。
有許多將Maven Central替換成jcenter的理由,下面是幾個主要的原因。
Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設置。
?很明顯,Gradle的出現是為了彌補ant和maven構建方式的不足,它不是采用傳統的xml文件構建方式,而是采用groovy方式來構建。具體映射到android中就是使用gradle腳本文件的構建方式。它貫穿了項目的整個生命周期,包括編譯、檢查、測試、打包、部署。
?因此,google將gradle方式作為了android項目管理的默認方式,使用android studio創建的項目下面會默認生成build.gradle文件作為默認構建。
更多的android Gradle介紹請看:
- gradle-android
- wikipedia-gradle介紹
在使用ant構建項目的時候我們要使用第三方庫往往要下載對應的庫並將其jar文件拷貝到項目文件夾下面,這樣會顯得很麻煩。在使用gradle構建方式以後我們只要需要一個坐標就能夠引入項目庫文件,例如:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' }
所謂的gradle依賴就是我們提供一個坐標然後它會自動幫我們從網絡上下載對應的文件,甚至我們可以在本地看到庫文件的源碼。
那我們到底是從哪裡下載到對應的文件呢?我們通過跟蹤項目文件頂級目錄下面的buidle gradle文件:
allprojects { repositories { jcenter() } }
然後查看Jcenter的函數文件
/** * Adds a repository which looks in Bintray's JCenter repository for dependencies. *
* The URL used to access this repository is {@literal "https://jcenter.bintray.com/"}. * The behavior of this repository is otherwise the same as those added by {@link #maven(org.gradle.api.Action)}. *
* Examples: *
* repositories { * jcenter() * } ** * @return the added resolver * @see #jcenter(Action) */ MavenArtifactRepository jcenter();
最終文件指向了Maven倉庫。我們打開jcenter庫
看到了我們常見的一些庫,這樣我終於搞清楚gradle依賴是從哪裡來的了。
?事實上,這個Jcenter庫是一家叫做bintray的機構維護,它作為google android官方默認的中央庫.但在android studio的早期版本中默認使用的是maven庫,它是由sonatype機構維護的。目前主要存在的三個依賴庫為。
今天我們來實踐下如何將函數庫發布到Maven Central上。
為了讓自己的項目也能夠被全世界的開發者使用,我們可以通過將lib項目發布到jcenter庫中,在配置腳本之前我們需要先去官網注冊一個帳號,傳送門:bintray 也可以使用第三方登錄的方式來登錄,包括github、google、facebook帳號等。注冊成功後我們先要獲取到一個api key。
在Jcenter庫中要求上傳到庫中的項目必須包含4個文件:
javadoc.jar sources.jar? aar或者jar pom如果少了審核可能不會通過,當然這幾個文件都可一通過配置gradle腳本來自動生成。
為了創建上面所說的幾個文件,我們需要構建腳本來自動生成對應的文件。可以參考:github-SwipeView-build.gradle
在buide.gradle增加依賴:
dependencies { classpath 'com.android.tools.build:gradle:1.0.0' classpath 'com.github.dcendents:android-maven-plugin:1.2' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }
注意: classpath ‘com.android.tools.build:gradle:1.0.0’ 在默認生成的文件下可能版本不一致,采用默認的有時候會導致構建失敗,最好也修改成1.0.0版本的。
在需要上傳的library項目的build.gradle下增加插件引用和版本號:
apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' version = "1.0"
?生成POM文件build腳本,可以參照下面的腳本:
def siteUrl = 'https://github.com/xiangzhihong/SwipeView' // 項目的主頁 def gitUrl ='https://github.com/xiangzhihong/SwipeView.git' // Git倉庫的url group = "akiyama.swipe" // 根節點添加 install { repositories.mavenInstaller { // This generates POM.xml with proper parameters pom { project { packaging 'aar' name 'swipeView For Android' url siteUrl licenses { license { name 'The Apache Software License, Version 2.0' url 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } developers { developer { id 'akiyama' name 'daliyan' email '[email protected]' } } scm { connection gitUrl developerConnection gitUrl url siteUrl } } } } }
注意:group = “akiyama.swipe”作為項目坐標的前綴,packaging ‘aar’ 為arr包,其它的自己隨意填寫。
添加生成任務
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)) } task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.destinationDir } artifacts { archives javadocJar archives sourcesJar }
注意:在構建生成的時候有可能會報GBK編碼等錯誤,可能需要添加UTF-8聲明,如下:
//添加UTF-8編碼否則注釋可能JAVADOC文檔可能生成不了 javadoc { options{ encoding "UTF-8" charSet 'UTF-8' author true version true links "http://docs.oracle.com/javase/7/docs/api" title "swipeJavaDoc" } }
?使用前面的我們注冊帳號和apikey上傳對應的文件到jcenter庫中:
?
Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) bintray { user = properties.getProperty("bintray.user") key = properties.getProperty("bintray.apikey") configurations = ['archives'] pkg { repo = "maven" name = "swipeView" // project name in jcenter websiteUrl = siteUrl vcsUrl = gitUrl licenses = ["Apache-2.0"] publish = true } }
因為用戶名和apikey是屬於個人的隱私信息,故在local.properties(該文件不會上傳到Git庫中)本地文件中配置用戶名和apikey。
sdk.dir=/home/android-sdk bintray.user=your username bintray.apikey=your apikey
在配置好了上述build.gradle文件後我們打開gradle控制面板就能看到如圖所示的構建任務。
雙擊bintrayUpload就能自動上傳到jcenter庫中了,然後靜等審核成功。
然後成功後可以通過http://jcenter.bintray.com/ 查詢到你的庫文件。
在jcenter中提供了將項目同步到mvnrepository庫中,這樣就不需要操作上傳到mvnrepository庫的繁瑣步驟。在bintray構建腳本最後加上:
/Optional configuration for Maven Central sync of the version mavenCentralSync { sync = true //Optional (true by default). Determines whether to sync the version to Maven Central. user = 'userToken' //OSS user token password = 'paasword' //OSS user password close = '1' //Optional property. By default the staging repository is closed and artifacts are released to Maven Central. You can optionally turn this behaviour off (by puting 0 as value) and release the version manually. }
注意:user和password即為mvnrepository中注冊的用戶名和密碼。如果同步成功你也可以通過http://mvnrepository.com/ 查詢到你上傳的lib項目。
至此使用gradle將lib庫上傳到Maven Central中央庫的介紹就完了,還不趕快試試。
由於Google編譯Android源碼使用的操作系統是Ubuntu,所以此處本人也是安裝Ubuntu操作系統。五筆法安裝Ubuntu系統固然方便簡單,可缺陷是安裝的系統的
首先我們來看下dex文件的格式: class_defs的結構: (1) class_idx 描述具體的 class 類型 ,值是 type_ids 的一
本文實例講述了Android仿英語流利說取詞放大控件的實現方法。分享給大家供大家參考,具體如下:1 取詞放大控件英語流利說是一款非常幫的口語學習app,在app的修煉頁面
本文實例為大家分享了android wheel省市縣三級聯動效果,供大家參考,具體內容如下在github上面有一個叫做 Android-wheel 的開源控件, 代碼地址