如何在 Android Studio 中引用不在項(xiàng)目文件夾中的 jar

Android Studio 使用 Gradle 做為生成的工具在 Dependency 的管理上,節(jié)省掉很多煩人的工作,讓引用 Library 變成極為單純的作業(yè),也讓開(kāi)發(fā)人員可以更專注在重要的事項(xiàng)。如同在“使用 Android Studio 開(kāi)發(fā) Web 程序 - 設(shè)定共用庫(kù)”或這篇中提到,項(xiàng)目透過(guò) Gradle 的功能,要引用 Project 以外的 Library,只要在 build.gradle 中提供 Library 的識(shí)別名稱及對(duì)應(yīng)版本編號(hào),即可透過(guò)預(yù)先配置好的 Repository 來(lái)自動(dòng)取得 jar,不需要再由人工下載、更新。

以下是一個(gè)簡(jiǎn)易的引用演示:

dependencies {
    // http://m.itdecent.cn/u/fea63707e07f
    compile 'com.android.support:appcompat-v7:24.2.1'
}

就算是公司內(nèi)部自行開(kāi)發(fā)的 Library,也能在編譯、輸出 jar 后,上傳到私有的 Repository 中。再經(jīng)由同樣的模式,在 build.gradle 中新增私有 Repository、要引用的 Library 資訊,就可以于 Coding 時(shí)使用 Library 中的功能。

例如:

repositories {
    maven {
        // http://m.itdecent.cn/u/fea63707e07f
        url "http://192.168.1.1”
    }
}

更多深入的文章請(qǐng)參閱簡(jiǎn)書 http://m.itdecent.cn/u/fea63707e07fwznote.blogspot.com


縱使利用 Repository 的形式來(lái)管理 Dependency 可以滿足大部份的開(kāi)發(fā)需求,但仍然有一些情境之下必須要使用獨(dú)立的 jar 來(lái)做為 Dependency。像是有一些小型的團(tuán)隊(duì),可能沒(méi)有足夠的資源來(lái)設(shè)置自己私有的 Repository,可是還是有跨項(xiàng)目共用功能的需求,這時(shí)就只能透過(guò) jar 或共用 Android Studio 的 Module 來(lái)達(dá)成。

所幸在 Gradle 的設(shè)定中,除了使用 Repository 之外,還提供直接引用 jar 的配置方法。在 Android Studio 預(yù)設(shè)產(chǎn)生的 build.gradle 中都會(huì)有以下的內(nèi)容:

dependencies {
    // http://m.itdecent.cn/u/fea63707e07f
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

這個(gè)內(nèi)容代表了只要把 jar 的文件放到 Project 結(jié)構(gòu)中名為 libs 的目錄下,在 Coding 時(shí)就可以直接使用 jar 內(nèi)提供的功能。

只是光這樣還是會(huì)有一些不足之處,若是以開(kāi)發(fā)為業(yè),勢(shì)必不可能只有一個(gè) Project。團(tuán)隊(duì)內(nèi)部共用的 jar 在每開(kāi)一個(gè) Project 就要再?gòu)?fù)制一份到其下的 libs 目錄中,似乎不是一個(gè)好的 Dependency 管理模式,而把 jar 集中在所有項(xiàng)目之外的需求就應(yīng)運(yùn)而生。

這時(shí)就出現(xiàn)了一個(gè)疑問(wèn),原先的配置只有把 jar 放在 Project 內(nèi)的 libs 之下,在 Project 之外的 jar 要如何設(shè)定 Dependency?

面對(duì)這一個(gè)問(wèn)題,其實(shí)解決的方法也很簡(jiǎn)單。之前 build.gradle 的例子中,dir: 'libs' 代表的是相對(duì)于 Project 的位置,也就是在 Project 之下的 libs 路徑。當(dāng) jar 在 Project 之外時(shí),只要調(diào)整內(nèi)容為 Project 之上的路徑即可。

dependencies {
    // http://m.itdecent.cn/u/fea63707e07f
    compile fileTree(include: ['*.jar'], dir: ‘../../shared’)
}

以上面的例子來(lái)說(shuō),是假定所有的共用 jar 都被放在與 Project 平行的 shared 路徑之下,以下是目錄結(jié)構(gòu)的示意:

+ Project A
  + app
    + libs
    + src
      + androidTest
      + main
      + test
+ Project B
  + app
    + libs
    + src
      + androidTest
      + main
      + test
+ shared
  - *.jar

透過(guò)以上的方式,就可以達(dá)成類似 Repository 的效果,當(dāng) shared 內(nèi)的 jar 被更新后,Project A 與 Project B 都可以在 Source Code 中使用最新的功能。而當(dāng)這二個(gè) Project 所使用的 jar 有版本不一致的情況時(shí),只要分別把對(duì)應(yīng)版本的 jar 放到所屬 Project 的 libs 路徑下即可。

更多深入的文章請(qǐng)參閱簡(jiǎn)書 http://m.itdecent.cn/u/fea63707e07fwznote.blogspot.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容