国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android Studio中的Gradle依賴深入講解

2019-10-21 21:38:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

Android studio依賴項(xiàng)目是使用gradle管理的,依賴一個(gè)項(xiàng)目、一個(gè)jar包、一個(gè)工程,都可以在這里進(jìn)行配置,本文將給大家詳細(xì)介紹關(guān)于Android Studio中Gradle依賴的相關(guān)內(nèi)容,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

一、不同類型的library引入方案:

1、本地Module library依賴:

通過(guò)這種方式依賴的弊端是每次都需要構(gòu)建module,當(dāng)module比較多時(shí)構(gòu)建非常耗時(shí),建議控制module的依賴數(shù)量,避免構(gòu)建耗時(shí)

//module需要在項(xiàng)目根目錄下的settings.gradle中通過(guò)include引入implementation project(':librarydict')

2、本地二進(jìn)制library依賴:jar和aar:

本地的jar和aar需要放在module的libs文件夾下,通過(guò)這種方式依賴的弊端是不知道jar和aar的版本號(hào),如果要按照這種方式依賴,建議將jar/aar的名字加上版本信息,方便確認(rèn)版本

依賴jar:

// 可以一條依賴引入libs下所有的jarimplementation fileTree(dir: 'libs', include: ['*.jar'])// 也可以指定依賴某一個(gè)或幾個(gè)jarimplementation files('libs/dict-v120.jar', 'libs/download-v151.jar')

依賴aar:

// 在module的build.gradle中增加如下語(yǔ)句: repositories { flatDir {  dirs 'libs' }}// 可以一條依賴引入libs下所有的aarimplementation fileTree(dir: 'libs', include: ['*.aar'])// 也可以指定依賴某一個(gè)aarimplementation (name: 'library-download', ext: 'aar')

3、遠(yuǎn)程二進(jìn)制library依賴:

為了安全起見(jiàn),建議搭建公司內(nèi)部的私有maven倉(cāng)庫(kù),統(tǒng)一管理依賴的library,公司內(nèi)部的公共library不要使用公共的maven倉(cāng)庫(kù)。通過(guò)這種方式依賴相比于前兩種方案都要更優(yōu),且配置靈活,可以根據(jù)實(shí)際需求調(diào)整

// 依賴明確的版本,標(biāo)明group、name和versionimplementation group: 'com.android.demo', name: 'library-dict', version: '1.2.0'// 通常按照如下方式簡(jiǎn)寫(xiě)即可implementation 'com.android.demo:library-dict:1.2.0'// 也可以不指定版本,將version改為"+",當(dāng)遠(yuǎn)程倉(cāng)庫(kù)有更新的版本后,構(gòu)建時(shí)會(huì)拉取最新的版本。// 好處是可以始終依賴最新的library;弊端是有可能library的改動(dòng)導(dǎo)致編譯不過(guò)或者功能變更不// 穩(wěn)定,因?yàn)槊看味夹枰獧z查是否有最新版本,所以構(gòu)建效率會(huì)低一些implementation 'com.android.demo:library-dict:+'
// 對(duì)于有多個(gè)APP,依賴內(nèi)部統(tǒng)一SDK的情況時(shí),可以將gradle文件放在服務(wù)器,遠(yuǎn)程控制統(tǒng)一依// 賴版本,避免因?yàn)楦鱾€(gè)APP依賴的SDK版本不統(tǒng)一導(dǎo)致很難管理和維護(hù)// 遠(yuǎn)程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', ]]// 項(xiàng)目根目錄下的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é)如下:

Android,Studio,Gradle

二、不同依賴配置方式的區(qū)別:compile、implementation、api

從Android Gradle plugin 3.0開(kāi)始,對(duì)于依賴包的配置方式,引入了implementation和api,使用Android Studio新建項(xiàng)目時(shí),原來(lái)用compile的地方全部默認(rèn)被替換成了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)上查資料時(shí),依賴配置方式還有:provided、api、apk、compileOnly、runtimeOnly、渠道名+Compile,差異主要在于構(gòu)建內(nèi)容和參與構(gòu)建的時(shí)機(jī),多樣的配置方式滿足了開(kāi)發(fā)者的花樣需求,具體區(qū)別如下:

1、implementation:

依賴包中依賴的library只能在依賴包內(nèi)部使用,主工程無(wú)法訪問(wèn)依賴包依賴的library中的類和方法。使用場(chǎng)景:SDK開(kāi)發(fā)中對(duì)第三方library有依賴,希望控制SDK的大小、不想因?yàn)楹退拗鞴こ桃玫耐粋€(gè)依賴包版本不同導(dǎo)致編譯沖突時(shí)特別適合。

因?yàn)楫?dāng)依賴包依賴的library有改動(dòng)時(shí),只會(huì)重新編譯library和依賴包,不需要重新編譯宿主,所以構(gòu)建速度會(huì)快一些。

對(duì)于各個(gè)渠道還可以單獨(dú)依賴屬于渠道特有的包,通過(guò)渠道名+implementation指定,比如debugImplementation、releaseImplementation、testImplementation。

2、api(原compile):

會(huì)將依賴包中依賴的其它library一同編譯和打包到apk中,宿主工程可以使用依賴包中依賴的其它library的類和方法

對(duì)于各個(gè)渠道還可以單獨(dú)依賴屬于渠道特有的包,通過(guò)渠道名+api/compile指定,比如debugApi、releaseApi、testApi

3、compileOnly(provided):

主要是為了方便程序編譯通過(guò)的,不會(huì)打包到apk中,使用場(chǎng)景:android系統(tǒng)有這個(gè)API,但編譯時(shí)需要引入才能構(gòu)建通過(guò),比如系統(tǒng)的APK依賴framework.jar、gson庫(kù)等

4、runtimeOnly(原apk):

只是打包到apk中,不參與編譯,不能在代碼中直接調(diào)用依賴包的代碼,否則會(huì)在編譯時(shí)出錯(cuò)。一般很少使用

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 台南市| 易门县| 杭州市| 鄱阳县| 沙湾县| 丹凤县| 博野县| 东乡族自治县| 杂多县| 和田县| 武定县| 哈密市| 方正县| 香河县| 玛多县| 增城市| 珠海市| 彰武县| 简阳市| 张家港市| 青冈县| 中超| 怀集县| 安多县| 沧州市| 明水县| 肥西县| 连州市| 庆云县| 甘泉县| 盐源县| 山丹县| 天气| 平塘县| 南阳市| 铁岭县| 鄢陵县| 乳山市| 洛浦县| 疏附县| 临洮县|