2017/7/4

如何在 Android Studio 中引用不在專案目錄中的 jar 檔

Android Studio 使用 Gradle 做為建置的工具在 Dependency 的管理上,節省掉很多煩人的工作,讓引用 Library 變成極為單純的作業,也讓開發人員可以更專注在重要的事項。透過 Gradle 的功能,要引用 Project 以外的 Library,只要在 build.gradle 中提供 Library 的識別名稱及對應版本編號,即可透過預先設定好的 Repository 來自動取得 jar,不需要再由人工下載、更新。

以下是一個簡易的引用示範:

就算是公司內部自行開發的 Library,也能在編譯、輸出 jar 後,上傳到私有的 Repository 中。再經由同樣的模式,在 build.gradle 中新增私有 Repository、要引用的 Library 資訊,就可以於 Coding 時使用 Library 中的功能。

例如:

縱使利用 Repository 的形式來管理 Dependency 可以滿足大部份的開發需求,但仍然有一些情境之下必須要使用獨立的 jar 來做為 Dependency。像是有一些小型的團隊,可能沒有足夠的資源來設置自己私有的 Repository,可是還是有跨專案共用功能的需求,這時就只能透過 jar 或共用 Android Studio 的 Module 來達成。

所幸在 Gradle 的設定中,除了使用 Repository 之外,還提供直接引用 jar 的設定方法。在 Android Studio 預設產生的 build.gradle 中都會有以下的內容:

這個內容代表了只要把 jar 的檔案放到 Project 結構中名為 libs 的目錄下,在 Coding 時就可以直接使用 jar 內提供的功能。

只是光這樣還是會有一些不足之處,若是以開發為業,勢必不可能只有一個 Project。團隊內部共用的 jar 在每開一個 Project 就要再複製一份到其下的 libs 目錄中,似乎不是一個好的 Dependency 管理模式,而把 jar 集中在所有專案之外的需求就應運而生。

這時就出現了一個疑問,原先的設定只有把 jar 放在 Project 內的 libs 之下,在 Project 之外的 jar 要如何設定 Dependency?

面對這一個問題,其實解決的方法也很簡單。之前 build.gradle 的例子中,dir: 'libs' 代表的是相對於 Project 的位置,也就是在 Project 之下的 libs 路徑。當 jar 在 Project 之外時,只要調整內容為 Project 之上的路徑即可。

以上面的例子來說,是假定所有的共用 jar 都被放在與 Project 平行的 shared 路徑之下,以下是目錄結構的示意:
+ Project A
  + app
    + libs
    + src
      + androidTest
      + main
      + test
+ Project B
  + app
    + libs
    + src
      + androidTest
      + main
      + test
+ shared
  - *.jar

透過以上的方式,就可以達成類似 Repository 的效果,當 shared 內的 jar 被更新後,Project A 與 Project B 都可以在 Source Code 中使用最新的功能。而當這二個 Project 所使用的 jar 有版本不一致的情況時,只要分別把對應版本的 jar 放到所屬 Project 的 libs 路徑下即可。