Android Studio中的Gradle依賴深入講解
前言
Android studio依賴項目是使用gradle管理的,依賴一個項目、一個jar包、一個工程,都可以在這里進行配置,本文將給大家詳細介紹關于Android Studio中Gradle依賴的相關內(nèi)容,下面話不多說了,來一起看看詳細的介紹吧
一、不同類型的library引入方案:
1、本地Module library依賴:
通過這種方式依賴的弊端是每次都需要構建module,當module比較多時構建非常耗時,建議控制module的依賴數(shù)量,避免構建耗時
//module需要在項目根目錄下的settings.gradle中通過include引入 implementation project(':librarydict')
2、本地二進制library依賴:jar和aar:
本地的jar和aar需要放在module的libs文件夾下,通過這種方式依賴的弊端是不知道jar和aar的版本號,如果要按照這種方式依賴,建議將jar/aar的名字加上版本信息,方便確認版本
依賴jar:
// 可以一條依賴引入libs下所有的jar implementation fileTree(dir: 'libs', include: ['*.jar']) // 也可以指定依賴某一個或幾個jar implementation files('libs/dict-v120.jar', 'libs/download-v151.jar')
依賴aar:
// 在module的build.gradle中增加如下語句: repositories { flatDir { dirs 'libs' } } // 可以一條依賴引入libs下所有的aar implementation fileTree(dir: 'libs', include: ['*.aar']) // 也可以指定依賴某一個aar implementation (name: 'library-download', ext: 'aar')
3、遠程二進制library依賴:
為了安全起見,建議搭建公司內(nèi)部的私有maven倉庫,統(tǒng)一管理依賴的library,公司內(nèi)部的公共library不要使用公共的maven倉庫。通過這種方式依賴相比于前兩種方案都要更優(yōu),且配置靈活,可以根據(jù)實際需求調(diào)整
// 依賴明確的版本,標明group、name和version implementation group: 'com.android.demo', name: 'library-dict', version: '1.2.0' // 通常按照如下方式簡寫即可 implementation 'com.android.demo:library-dict:1.2.0' // 也可以不指定版本,將version改為"+",當遠程倉庫有更新的版本后,構建時會拉取最新的版本。 // 好處是可以始終依賴最新的library;弊端是有可能library的改動導致編譯不過或者功能變更不 // 穩(wěn)定,因為每次都需要檢查是否有最新版本,所以構建效率會低一些 implementation 'com.android.demo:library-dict:+'
// 對于有多個APP,依賴內(nèi)部統(tǒng)一SDK的情況時,可以將gradle文件放在服務器,遠程控制統(tǒng)一依 // 賴版本,避免因為各個APP依賴的SDK版本不統(tǒng)一導致很難管理和維護 // 遠程http://172.28.2.93/remote/library-config.gradle: ext.libraryBuildConfig = [ deps: [ "dict-library" : 'com.android.demo:library-dict:1.2.0', "download-library" : 'com.android.demo:library-download:1.5.1', ] ] // 項目根目錄下的build.gradle全局引入: apply "http://172.28.2.93/remote/library-config.gradle" ext { dependencies = [ "dict-library" : libraryBuildConfig.deps.'dict-library', "download-library" : libraryBuildConfig.deps.'download-library', ] } // 在module的build.gradle中依賴: implementation rootProject.ext.dependencies["dict-library"] implementation rootProject.ext.dependencies["download-library"]
總結(jié)如下:
二、不同依賴配置方式的區(qū)別:compile、implementation、api
從Android Gradle plugin 3.0開始,對于依賴包的配置方式,引入了implementation和api,使用Android Studio新建項目時,原來用compile的地方全部默認被替換成了implementation 比如:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:27.1.1' compile 'com.android.support.constraint:constraint-layout:1.1.3' }
變成下面的樣子:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.3' }
網(wǎng)上查資料時,依賴配置方式還有:provided、api、apk、compileOnly、runtimeOnly、渠道名+Compile,差異主要在于構建內(nèi)容和參與構建的時機,多樣的配置方式滿足了開發(fā)者的花樣需求,具體區(qū)別如下:
1、implementation:
依賴包中依賴的library只能在依賴包內(nèi)部使用,主工程無法訪問依賴包依賴的library中的類和方法。使用場景:SDK開發(fā)中對第三方library有依賴,希望控制SDK的大小、不想因為和宿主工程引用的同一個依賴包版本不同導致編譯沖突時特別適合。
因為當依賴包依賴的library有改動時,只會重新編譯library和依賴包,不需要重新編譯宿主,所以構建速度會快一些。
對于各個渠道還可以單獨依賴屬于渠道特有的包,通過渠道名+implementation指定,比如debugImplementation、releaseImplementation、testImplementation。
2、api(原compile):
會將依賴包中依賴的其它library一同編譯和打包到apk中,宿主工程可以使用依賴包中依賴的其它library的類和方法
對于各個渠道還可以單獨依賴屬于渠道特有的包,通過渠道名+api/compile指定,比如debugApi、releaseApi、testApi
3、compileOnly(provided):
主要是為了方便程序編譯通過的,不會打包到apk中,使用場景:android系統(tǒng)有這個API,但編譯時需要引入才能構建通過,比如系統(tǒng)的APK依賴framework.jar、gson庫等
4、runtimeOnly(原apk):
只是打包到apk中,不參與編譯,不能在代碼中直接調(diào)用依賴包的代碼,否則會在編譯時出錯。一般很少使用
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
android 實現(xiàn)ScrollView自動滾動的實例代碼
這篇文章主要介紹了android 實現(xiàn)ScrollView自動滾動的實例代碼,有需要的朋友可以參考一下2014-01-01Android 官推 kotlin-first 的圖片加載庫——Coil的使用入門
這篇文章主要介紹了Android 官推 kotlin-first 的圖片加載庫——Coil的使用入門,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-04-04Kotlin中的handler如何避免內(nèi)存泄漏詳解
Handler,我們已經(jīng)相當熟悉了,而且經(jīng)常用得不亦樂乎,但就是因為太熟悉了,才會偶爾被它反捅一刀,血流不止,下面這篇文章主要給大家介紹了關于Kotlin中handler如何避免內(nèi)存泄漏的相關資料,需要的朋友可以參考下。2017-12-12Android使用Gradle依賴配置compile、implementation與api的區(qū)別介紹
這篇文章主要給大家介紹了關于Android使用Gradle依賴配置compile、implementation與api區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧2018-09-09Android應用中使用及實現(xiàn)系統(tǒng)“分享”接口實例
為了應用的推廣、傳播,很多的應用中都有“分享”功能,這篇文章主要介紹了Android應用中使用及實現(xiàn)系統(tǒng)“分享”接口實例,有興趣的可以了解一下。2016-12-12Android官方下拉刷新控件SwipeRefreshLayout使用詳解
這篇文章主要為大家詳細介紹了Android官方下拉刷新控件SwipeRefreshLayout使用方法,實例展示如何使用下拉刷新控件,感興趣的小伙伴們可以參考一下2016-07-07Android自定義View實現(xiàn)葉子飄動旋轉(zhuǎn)效果(四)
這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)葉子飄動旋轉(zhuǎn)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03Android編程使用WebView實現(xiàn)與Javascript交互的方法【相互調(diào)用參數(shù)、傳值】
這篇文章主要介紹了Android編程使用WebView實現(xiàn)與Javascript交互的方法,可實現(xiàn)基于WebView與JavaScript相互調(diào)用參數(shù)、傳值的功能,需要的朋友可以參考下2017-03-03