###### tags: `Android` `Library`
# aar檔打包與引用
在開發專案時,Android可選擇.jar檔或.aar檔的方式,提供 API 給第三方開發者使用。
- .jar:只包含.class和文件清單,無法引用資源檔(res)
- .aar:可引用所有檔案,通常用於製作UI庫
## 打包
1. 由於我們只提供API,而沒有畫面操作,所以可選擇沒有Activity的Module來製作。
2. 修改 Gradle 的 apply plugin 輸出
```
//要輸出.aar檔,必須將Module配置為 library
apply plugin: 'com.android.application' //預設值為输出 apk
apply plugin: 'com.android.library' //修改成输出 library
```
3. 在 Gradle 刪除 applicationId
```
defaultConfig {
//applicationId "..."
}
```
4. 產生.aar檔
- 打開 Gradle Projects (View -> Tool Windows -> Gradle) 或點擊畫面右方的Gradle側標
- 到根目錄 Projects中,點擊assemble
- 執行成功後,可在module中 build -> outputs -> aar 找到相關的 aar檔
## 引用
1. 打開Project Structure (View -> Project Structure),選擇Import Jar/Aar Package
2. 在 Gradle 的 dependencies 增加 implementation,並Sync即完成
```
dependencies {
implementation project(':module_name-release')
}
```
## 其他引用方式
上述提到的引用方式是比較基本的,使用後發現會在 app 的同一層產生 module
且不能修改原始碼,有些不方便,不過都是Library了,本也就不該修改它XD
以下提供一些引用方式,可依需求來參考(方法1、2使用壓縮檔,方法3為Project):
1. 檔案檢視方式改成Project,打開libs(app -> libs)將aar或jar放入
`在相依庫加入 -> implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')`
- 優點:在Android檢視方式下看不到、模組檔案小
- 缺點:無法修改原始碼
2. 如本文使用方式
- 優點:模組檔案小
- 缺點:在Android檢視方式下看得到、無法修改原始碼
3. 使用import(File -> Import Module -> 選擇Project路徑 -> 勾Import -> 修改模組名稱)
`在相依庫加入 -> implementation project(':module_name')`
- 優點:如同匯入一個新的Project,因此可以修改原始碼
- 缺點:在Android檢視方式下看得到、模組檔案較大
> [aar打包與引用](http://nickthomas55.pixnet.net/blog/post/225790715-android-aar%E6%AA%94%E6%89%93%E5%8C%85%E8%88%87%E5%BC%95%E7%94%A8)
> [官方-創建Library](https://developer.android.com/studio/projects/android-library?hl=zh-cn)
> [aar常識](https://blog.csdn.net/qq_32452623/article/details/79220522)
> [製作公開Library](https://github.com/hehonghui/android-tech-frontier/blob/master/issue-17/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Android-Studio%E6%8A%8A%E8%87%AA%E5%B7%B1%E7%9A%84Android-library%E5%88%86%E5%8F%91%E5%88%B0jCenter%E5%92%8CMaven-Central.md)
> [Adding external library in Android studio](https://stackoverflow.com/questions/25610727/adding-external-library-in-android-studio)