今天遇到一個無法 build apk 的 Error:
Error:Failed to resolve: :AirWatchSDK-release
發生的原因是因為 aar 檔案的檔案沒有被 comiple 成功。解法是把 aar 放到 /app/libs/ 目錄下,就可以正常抓到。
常見的Android Studio 如何 import library,有這在種方式,分別如下:
- Import module
- Import jar file
- Import aar file
- Import maven repository
- Import jitpack repository
1. Import module
這算是最基本的 import 方式了,先將 library project “複製”到 main project 根目錄下面。然後直接使用下面的方式就可以 import 成功了,缺點是 library project 有更新時,無法同步更新。
而在 settings.gradle
設定 module 的 projectDir 雖然可以同步原始碼 (如下程式碼),但是我實測之後沒辦法產生 R.java,對於 library project 來說,若沒辦法產生 R.java 的話那這個方式就沒用了。
2. Import jar file
也算是蠻基本的方式,就是指定 jar file 的路徑,如果你找到的 library 只有 jar file 的話,用這個方式就對了,但一樣對於 library 的更新要重新手動下載 jar file 才行。
3. Import aar file
aar file 是 Android 改用新的 build system 之後類似於 jar file 的檔案格式,全名為 Android Archive Library,簡單說就是把 Android Library Project build 完之後壓縮為一個檔案,原始的 jar file 無法將 Android 的 res 目錄壓縮起來,而 aar 可以,所以只要你所使用或開發的 library project 有用到 res 目錄的話,就要用 aar 打包起來才行。
而上面這種 import 方式就是將所產生的 aar file 複製到 libs 目錄,跟 jar file 是相同方式,只不過要多做一些設定就是了,當然這個更新方式也是要手動處理。
4. Import Maven repository
最常見的 import 方式,因為 library 受到 Maven 管理,所以使用 library 的使用者可以容易地取得更新,也可以用類似 semver 的表示法來管理版本,非常方便。
但對於 library 的開發者來說 Maven release 真的是一個很麻煩的事情,審核、GPG、Nexus……等一大堆事情要做,以開發 library 的開發者來說,我其實不太推 mavenCentral 的上傳機制。
5. Import jitpack repository
因為重寫 map-controller 的關係,想讓大家都透過 Maven 很方便的使用 library,但我又不想在更新的時候這麼麻煩,這時突然想到我既然已經有 GitHub repo 了,那應該有方式也可以拿來作為 Maven repo 才對,找了一下真的有神器出現,就叫做 https://jitpack.io。
我只要將 jitpack.io 與 GitHub repo 連結在一起,就可以用上面的方式 import 我的 map-controller 了,release 非常方便!下一篇我再來用開發者的角度介紹一下如何使用 jitpack 做為你的 Maven repo。
References
AAR Format:http://tools.android.com/tech-docs/new-build-system/aar-format