TShopping

 找回密碼
 註冊
搜索
查看: 452|回復: 0

[教學] Android匯入Library或模組,的幾種方法

[複製鏈接]
發表於 2020-5-13 16:17:54 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk  
       Android 匯入 Library 的方法有以下幾種:
1. Import module
2. Import jar file
3. Import aar file
4. Import maven repository
5. Import jitpack repository


Import module:


        這算是最基本的 import 方式了,先將 library project "複製"到 main project 根目錄下面。然後直接使用下面的方式就可以 import 成功了,缺點是 library project 有更新時,無法同步更新。這邊筆者使用自己開發的 library project 當範例,這個 library 會同步更新在 git (版本控制工具) 上,連結會收錄在最後面的附錄裡,有興趣的讀者可以去看看,內容包括更進階的 layout 方式、資料庫使用、非同步呼叫API等等。


Android Library 模組 方法

Android Library 模組 方法


settings.gradle

  1. include ':app', ':easyclass'
複製代碼


Android Library 模組 方法

Android Library 模組 方法


build.gradle

  1. dependencies {
  2.   compile project(':easyclass')
  3. }
複製代碼

        上述的 gradle 設定完成之後記得都要點擊上面紅色框框的「Sync Project with Gradle Files」,這樣 Android Studio 才會將這些 library 都連結起來喔!如果要確定 library 是不是有正確的被引入了,可以在程式碼裡面試試看 auto-complete 有沒有出現該 library 裡的類別(class) 就可以知道了,例如在 easyclass 中有一個類別,名稱是 FreeLayout,如下:

Android Library 模組 方法

Android Library 模組 方法


        而在 settings.gradle 設定 module 的 projectDir 雖然可以同步原始碼 (如下程式碼),但是我實測之後沒辦法產生 R.java,對於 library project 來說,若沒辦法產生 R.java 的話那這個方式就沒用了,所以不建議用此方式喔。

  1. project(':easyclass'').projectDir = new File('../easyclass'')
複製代碼



Import jar file

        jar file 在 Java 算是相當程用的一種引入 library 的方式,因為使用非常簡單,基本上只要 jar file 放在正確的路徑裡,不用做什麼設定就可以直接使用,是大家都非常喜歡的一個做法,但 jar file 是很單純的 Java code 而已,即是說, jar file 沒有產生 res 的功能,所以這不是主流的 library 引入方式,優點是網路上相當多 Java 的 library 都是  jar file,所以還是保有一定的地位。

        在 Android Studio 中,我們會把 jar file 放在 main project 的 libs 資料夾中,如下面這張圖的資料夾位置,這裏筆者將檢視方式改成「project」,這樣比較容易看到整個資料夾的結構:

Android Library 模組 方法

Android Library 模組 方法


        預設的 build.gradle就已經有下面這行程式碼,這行程式碼代表自動引入「libs」資料夾中的所有 jar file。

build.gradle

  1. dependencies {
  2.   compile fileTree(dir: 'libs', include: '*.jar')
  3. }
複製代碼


       另外也可以指定 jar file 的路徑,如果你找到的 library 有特定的置放路徑的話,用這個方式就對了,但一樣對於 library 的更新要重新手動下載 jar file 才行,這方式也沒有特別推薦,可以的話就都放「libs」資料夾裡即可。

build.gradle

  1. dependencies {
  2.     ...
  3.     compile files('path/SOME-LIBRARY.jar')
  4. }
複製代碼


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 打包起來才行。

        另外 aar file 也可以透過網路做更新,一些大公司出的 aar file 可以透過特定的
網址指定需要的 aar file,也可以設定 aar file 的版本號,這樣一來就不需要手動更新 library,例如知名的 crash 回報工具,Crashlytics,就是用這種做法,一般來說在他們網頁上都會有淺顯易懂的設定方式。

Android Library 模組 方法

Android Library 模組 方法

build.gradle

  1. repositories {
  2.   flatDir {
  3.     dirs 'libs'
  4.   }
  5. }

  6. dependencies {
  7.   compile(name: 'easyclass, ext: 'aar')
  8. }
複製代碼
或是
  1. apply plugin: 'io.fabric'

  2. repositories {
  3.     maven { url 'https://maven.fabric.io/public' }
  4. }


  5. dependencies {
  6.      ...
  7.      compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') {
  8.         transitive = true;
  9.      }

  10.      compile('com.optimizely:optimizely:+@aar') {
  11.         transitive = true
  12.      }
  13.      ...
  14. }
複製代碼


        上面只是兩個簡單的示意範例,實際使用時可以參考開發者的介紹方式去 import 喔,基本上都不會太複雜的。

Import Maven repository

        這種 import 方式相當重要,常見的 Google Play Service 或是 Android v7 support library 都是走這種做法,例如下面的 build.gradle 設定方式:

build.gradle

  1. dependencies {
  2.     ...
  3.     compile 'com.android.support:appcompat-v7:25.3.1'
  4.     compile 'com.android.support.constraint:constraint-layout:1.0.2'
  5.     compile 'com.google.android.gms:play-services-location:9.6.1'
  6.     compile 'com.google.android.gms:play-services-maps:9.6.1'
  7.     ...

  8. }
複製代碼

        最常見的 import 方式,因為 library 受到 Maven 管理,所以使用 library 的使用者可以容易地取得更新,也可以用類似 semver 的表示法來管理版本,非常方便。

        但對於 library 的開發者來說 Maven release 真的是一個很麻煩的事情,審核、GPG、Nexus......等一大堆事情要做,以開發 library 的開發者來說,我其實不太推 mavenCentral 的上傳機制。



Import jitpack repository

        這個做法其實筆者也很少用到,因為 Maven 的審核有點麻煩,看到有人利用 git (版本控制工具) 來達到類似 Maven 的效果,筆者是覺得蠻酷的,寫在這邊分享是如果有讀者遇到這樣的 library 的話會比較知道如何下手去 import。

build.gradle

  1. repositories {
  2.   maven {
  3.     url "https://jitpack.io"
  4.   }
  5. }

  6. dependencies {
  7.   compile 'com.github.kewang:map-controller:v2.1.0'
  8. }
複製代碼

        這個做法是參考了 Kewang 這位開發者(http://kewang.logdown.com/posts/705432-jitpack)的開發心得,一開始是想讓大家都透過 Maven 很方便的使用 library,但不想在更新的時候這麼麻煩,這時突然想到已經有 GitHub repo 了,那應該有方式也可以拿來作為 Maven repo 才對,找了一下真的有神器出現,就叫做 https://jitpack.io

        只要將 jitpack.io 與 GitHub repo 連結在一起,就可以用上面的方式 import git 上的 library 了,release 非常方便!


        透過 library 達到開發事半功倍的效果是很重要的,開發者不太可能所有功能都從零開始開發,很多時候必須站在巨人的肩膀上才能做更多的事情,下面兩張就要進入實際的範例了,分別是介紹日記本的開發以及地圖功能的開發,第一個會用到筆者的 library 中資料庫工具,第二個則是使用 google play service 中的 map 功能,實際開發時會用到很多之前提過的開發觀念以及接觸新的類別,希望能對讀者們在開發上有一些幫助喔!


文章出處
http://androidthinkermobile.blogspot.com/2017/10/android-library.html

 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2020-8-4 09:41 , Processed in 0.061710 second(s), 24 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表