欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

史上最全Android build.gradle配置詳解(小結(jié))

 更新時間:2019年04月08日 10:25:19   作者:Android高級架構(gòu)師  
這篇文章主要介紹了史上最全Android build.gradle配置詳解(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Android Studio是采用gradle來構(gòu)建項目的,gradle是基于groovy語言的,如果只是用它構(gòu)建普通Android項目的話,是可以不去學(xué)groovy的。當(dāng)我們創(chuàng)建一個Android項目時會包含兩個Android build.gradle配置詳解文件,如下圖:

一、Project的build.gradle文件:

對應(yīng)的build.gradle代碼如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {//這里是gradle腳本執(zhí)行所需依賴,分別是對應(yīng)的maven庫和插件

  repositories {
    google()//從Android Studio3.0后新增了google()配置,可以引用google上的開源項目
    jcenter()//是一個類似于github的代碼托管倉庫,聲明了jcenter()配置,可以輕松引用 jcenter上的開源項目
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0'////此處是android的插件gradle,gradle是一個強(qiáng)大的項目構(gòu)建工具

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
  }
}

allprojects {//這里是項目本身需要的依賴,比如項目所需的maven庫
  repositories {
    google()
    jcenter()
  }
}

// 運(yùn)行g(shù)radle clean時,執(zhí)行此處定義的task任務(wù)。
// 該任務(wù)繼承自Delete,刪除根目錄中的build目錄。
// 相當(dāng)于執(zhí)行Delete.delete(rootProject.buildDir)。
// gradle使用groovy語言,調(diào)用method時可以不用加()。
task clean(type: Delete) {
  delete rootProject.buildDir
}
  • buildscript{}閉包里是gradle腳本執(zhí)行所需依賴,分別是對應(yīng)的maven庫和插件。
  • allprojects{}閉包里是項目本身需要的依賴,比如項目所需的maven庫。
  • task clean(type: Delete){}是運(yùn)行g(shù)radle clean時,執(zhí)行此處定義的task任務(wù),該任務(wù)繼承自Delete,刪除根目錄中的build目錄。其中buildscript包含repositories閉包和dependencies閉包。

repositories{}閉包:配置遠(yuǎn)程倉庫

該閉包中聲明了jcenter()和google()的配置,其中jcenter是一個代碼托管倉庫,上面托管了很多Android開源項目,在這里配置了jcenter后我們可以在項目中方便引用jcenter上的開源項目,從Android Studio3.0后新增了google()配置,可以引用google上的開源項目。

dependencies{}閉包:配置構(gòu)建工具

該閉包使用classpath聲明了一個Gradle插件,由于Gradle并不只是用來構(gòu)建Android項目,因此此處引入相關(guān)插件來構(gòu)建Android項目,其中'3.3.3'為該插件的版本號,可以根據(jù)最新的版本號來調(diào)整。

二、Module的build.gradle文件:

從文件內(nèi)容可以看出,主要分為三大部分,如下圖所示:

1、apply plugin:

// 聲明是Android程序,
//com.android.application 表示這是一個應(yīng)用程序模塊
//com.android.library 標(biāo)識這是一個庫模塊
//而這區(qū)別:前者可以直接運(yùn)行,后著是依附別的應(yīng)用程序運(yùn)行
apply plugin: 'com.android.application'

文件中第一行使用apply plugin表示應(yīng)用了一個插件,該插件一般有兩種值可選:

  • 'com.android.application',表示該模塊為應(yīng)用程序模塊,可以直接運(yùn)行,打包得到的是.apk文件
  • 'com.android.library',表示該模塊為庫模塊,只能作為代碼庫依附于別的應(yīng)用程序模塊來運(yùn)行,打包得到的是.aar文件

2、android{}閉包:

這個閉包主要為了配置項目構(gòu)建的各種屬性:

2.1、添加signingConfigs{}閉包:

 signingConfigs {// 自動化打包配置
    release {// 線上環(huán)境
      keyAlias 'test'
      keyPassword '123456'
      storeFile file('test.keystore')
      storePassword '123456'
    }
    debug {// 開發(fā)環(huán)境
      keyAlias 'test'
      keyPassword '123456'
      storeFile file('test.keystore')
      storePassword '123456'
    }
  }

可以手動添加簽名配置,也可以通過Project Structure 選中app,點(diǎn)擊Singing添加,具體步驟如下圖所示:

簽名配置完成后可以方便帶簽名打包,在module的Build Variants中有兩個Type,分別是debug和release,可以選擇任意一個類型進(jìn)行打包,并且他們會利用各自配置的Key進(jìn)行打包,執(zhí)行 Run app或者Build->Build apk就會自動在module name/app/build/outputs/apk路徑下生成Apk文件。另一種打包方式是Build->Generate Signed APK填寫簽名信息生成Apk。

2.2、compileSdkVersion:設(shè)置編譯時用的Android版本

2.3、buildToolsVersion:設(shè)置編譯時使用的構(gòu)建工具的版本,Android Studio3.0后去除此項配置

2.4、defaultConfig{}閉包:

  compileSdkVersion 27//設(shè)置編譯時用的Android版本
  defaultConfig {
    applicationId "com.billy.myapplication"http://項目的包名
    minSdkVersion 16//項目最低兼容的版本
    targetSdkVersion 27//項目的目標(biāo)版本
    versionCode 1//版本號
    versionName "1.0"http://版本名稱
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"http://表明要使用AndroidJUnitRunner進(jìn)行單元測試
  }
  1. applicationId :指定了項目的包名。
  2. minSdkVersion :指定項目最低兼容的版本,如果設(shè)備小于這個版本或者大于maxSdkVersion(一般不用)將無法安裝這個應(yīng)用,這里指定為16,表示最低兼容到Android 4.1系統(tǒng)。
  3. targetSdkVersion :指定項目的目標(biāo)版本,表示在該目標(biāo)版本上已經(jīng)做過充分測試,系統(tǒng)會為該應(yīng)用啟動一些對應(yīng)該目標(biāo)系統(tǒng)的最新功能特性,Android系統(tǒng)平臺的行為變更,只有targetSdkVersion的屬性值被設(shè)置為大于或等于該系統(tǒng)平臺的API版本時,才會生效。例如,若指定targetSdkVersion值為22,則表示該程序最高只在Android5.1版本上做過充分測試,在Android6.0系統(tǒng)上(對應(yīng)targetSdkVersion為23)擁有的新特性如系統(tǒng)運(yùn)行時權(quán)限等功能就不會被啟用。
  4. versionCode :表示版本號,一般每次打包上線時該值只能增加,打包后看不見。
  5. versionName :表示版本名稱,展示在應(yīng)用市場上。
  6. testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"表明要使用AndroidJUnitRunner進(jìn)行單元測試。

2.5、 buildTypes{}閉包:

這個閉包主要指定生成安裝文件的主要配置,一般包含兩個子閉包,一個是debug閉包,用于指定生成測試版安裝文件的配置,可以忽略不寫;另一個是release閉包,用于指定生成正式版安裝文件的配置。兩者能配置的參數(shù)相同,最大的區(qū)別默認(rèn)屬性配置不一樣,兩種模式支持的屬性配置如下圖:

buildTypes {// 生產(chǎn)/測試環(huán)境配置
    release {// 生產(chǎn)環(huán)境
      buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志
      buildConfigField("String", "URL_PERFIX", "\"https://release.cn/\"")// 配置URL前綴
      minifyEnabled false//是否對代碼進(jìn)行混淆
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的規(guī)則文件
      signingConfig signingConfigs.release//設(shè)置簽名信息
      pseudoLocalesEnabled false//是否在APK中生成偽語言環(huán)境,幫助國際化的東西,一般使用的不多
      zipAlignEnabled true//是否對APK包執(zhí)行ZIP對齊優(yōu)化,減小zip體積,增加運(yùn)行效率
      applicationIdSuffix 'test'//在applicationId 中添加了一個后綴,一般使用的不多
      versionNameSuffix 'test'//在applicationId 中添加了一個后綴,一般使用的不多
    }
    debug {// 測試環(huán)境
      buildConfigField("boolean", "LOG_DEBUG", "true")//配置Log日志
      buildConfigField("String", "URL_PERFIX", "\"https://test.com/\"")// 配置URL前綴
      minifyEnabled false//是否對代碼進(jìn)行混淆
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的規(guī)則文件
      signingConfig signingConfigs.debug//設(shè)置簽名信息
      debuggable false//是否支持?jǐn)帱c(diǎn)調(diào)試
      jniDebuggable false//是否可以調(diào)試NDK代碼
      renderscriptDebuggable false//是否開啟渲染腳本就是一些c寫的渲染方法
      zipAlignEnabled true//是否對APK包執(zhí)行ZIP對齊優(yōu)化,減小zip體積,增加運(yùn)行效率
      pseudoLocalesEnabled false//是否在APK中生成偽語言環(huán)境,幫助國際化的東西,一般使用的不多
      applicationIdSuffix 'test'//在applicationId 中添加了一個后綴,一般使用的不多
      versionNameSuffix 'test'//在applicationId 中添加了一個后綴,一般使用的不多
    }
  }

release{}閉包和debug{}閉包兩者能配置的參數(shù)相同,最大的區(qū)別默認(rèn)屬性配置不一樣:

  • minifyEnabled :表明是否對代碼進(jìn)行混淆,true表示對代碼進(jìn)行混淆,false表示對代碼不進(jìn)行混淆,默認(rèn)的是false。
  • proguardFiles :指定混淆的規(guī)則文件,這里指定了proguard-android.txt文件和proguard-rules.pro文件兩個文件,proguard-android.txt文件為默認(rèn)的混淆文件,里面定義了一些通用的混淆規(guī)則。proguard-rules.pro文件位于當(dāng)前項目的根目錄下,可以在該文件中定義一些項目特有的混淆規(guī)則。
  • buildConfigField :用于解決Beta版本服務(wù)和Release版本服務(wù)地址不同或者一些Log打印需求控制的。例如:配置buildConfigField("boolean", "LOG_DEBUG", "true"),這個方法接收三個非空的參數(shù),第一個:確定值的類型,第二個:指定key的名字,第三個:傳值,調(diào)用的時候BuildConfig.LOG_DEBUG即可調(diào)用。
  • debuggable :表示是否支持?jǐn)帱c(diǎn)調(diào)試,release默認(rèn)為false,debug默認(rèn)為true。
  • jniDebuggable :表示是否可以調(diào)試NDK代碼,使用lldb進(jìn)行c和c++代碼調(diào)試,release默認(rèn)為false
  • signingConfig :設(shè)置簽名信息,通過signingConfigs.release或者signingConfigs.debug,配置相應(yīng)的簽名,但是添加此配置前必須先添加signingConfigs閉包,添加相應(yīng)的簽名信息。
  • renderscriptDebuggable :表示是否開啟渲染腳本就是一些c寫的渲染方法,默認(rèn)為false。
  • renderscriptOptimLevel :表示渲染等級,默認(rèn)是3。
  • pseudoLocalesEnabled :是否在APK中生成偽語言環(huán)境,幫助國際化的東西,一般使用的不多。
  • applicationIdSuffix :和defaultConfig中配置是一的,這里是在applicationId 中添加了一個后綴,一般使用的不多。
  • versionNameSuffix :表示添加版本名稱的后綴,一般使用的不多。
  • zipAlignEnabled :表示是否對APK包執(zhí)行ZIP對齊優(yōu)化,減小zip體積,增加運(yùn)行效率,release和debug默認(rèn)都為true。

2.6、sourceSets{}閉包:配置目錄指向

 sourceSets {//目錄指向配置
    main {
      jniLibs.srcDirs = ['libs']//指定lib庫目錄
    }
  }

配置 jniLibs.srcDirs = ['libs'],可以在Android studio的Android視圖下生成jniLibs文件夾,可以方便我們存放jar包和庫文件,其中Android視圖下的jniLibs和project視圖下的libs指向同一文件夾(app→libs),如下圖所示:

2.7、packagingOptions{}閉包:打包時的相關(guān)配置

當(dāng)項目中依賴的第三方庫越來越多時,有可能會出現(xiàn)兩個依賴庫中存在同一個(名稱)文件。如果這樣,Gradle在打包時就會提示錯誤(警告)。那么就可以根據(jù)提示,然后使用以下方法將重復(fù)的文件剔除,比較常用的是通過exclude去除重復(fù)的文件,例如:

  packagingOptions{
    //pickFirsts做用是 當(dāng)有重復(fù)文件時 打包會報錯 這樣配置會使用第一個匹配的文件打包進(jìn)入apk
    // 表示當(dāng)apk中有重復(fù)的META-INF目錄下有重復(fù)的LICENSE文件時 只用第一個 這樣打包就不會報錯
    pickFirsts = ['META-INF/LICENSE']

    //merges何必 當(dāng)出現(xiàn)重復(fù)文件時 合并重復(fù)的文件 然后打包入apk
    //這個是有默認(rèn)值得 merges = [] 這樣會把默默認(rèn)值去掉 所以我們用下面這種方式 在默認(rèn)值后添加
    merge 'META-INF/LICENSE'

    //這個是在同時使用butterknife、dagger2做的一個處理。同理,遇到類似的問題,只要根據(jù)gradle的提示,做類似處理即可。
    exclude 'META-INF/services/javax.annotation.processing.Processor'
  }

2.8、productFlavors{}閉包:多個渠道配置

這個配置是經(jīng)常會使用到的,通常在適配多個渠道的時候,需要為特定的渠道做部分特殊的處理,比如設(shè)置不同的包名、應(yīng)用名等。場景:當(dāng)我們使用友盟統(tǒng)計時,通常需要設(shè)置一個渠道ID,那么我們就可以利用productFlavors來生成對應(yīng)渠道信息的包,如:

android { 
  productFlavors {
    wandoujia {
      //豌豆莢渠道包配置
      manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
      //manifestPlaceholders的使用在后續(xù)章節(jié)(AndroidManifest里的占位符)中介紹
    }
    xiaomi {
      manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
      applicationId "com.wiky.gradle.xiaomi" //配置包名

    }
    _360 {
      manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
    }
    //...
  } 
}

當(dāng)然也有更簡潔的方式:

android { 
  productFlavors {
    wandoujia {}
    xiaomi {}
    _360 {}
    //...
  } 

  productFlavors.all { 
    //批量修改,類似一個循序遍歷
    flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] 
  }
}

配置完之后,在命令行窗口中(Terminal)中輸入gradlew assembleRelease(windows)即可開始打包,在Mac系統(tǒng)中對應(yīng)指令應(yīng)該是./gradlew assembleRelease。當(dāng)然,如果想要debug版本的包,將指令中assembleRelease改為assembleDebug即可。最后生成的包還是在app/build/outputs/apk中,默認(rèn)命名格式如app-wandoujia-release-unsigned.apk,在module的Build Variants中可以選擇相應(yīng)的渠道。

注:Android Studio3.0需在主app的build.gradle里面的

defaultConfig {

targetSdkVersion:***

minSdkVersion :***

versionCode:***

versionName :***

//版本名后面添加一句話,意思就是flavor dimension 它的維度就是該版本號,這樣維度就是都是統(tǒng)一的了

flavorDimensions "versionCode"

}

2.9、lintOptions{}閉包:代碼掃描分析

Lint 是Android Studio 提供的 代碼掃描分析工具,它可以幫助我們發(fā)現(xiàn)代碼結(jié)構(gòu)/質(zhì)量問題,同時提供一些解決方案,而且這個過程不需要我們手寫測試用例。

Lint 發(fā)現(xiàn)的每個問題都有描述信息和等級(和測試發(fā)現(xiàn) bug 很相似),我們可以很方便地定位問題,同時按照嚴(yán)重程度進(jìn)行解決。

 //程序在編譯的時候會檢查lint,有任何錯誤提示會停止build,我們可以關(guān)閉這個開關(guān)
  lintOptions {
    abortOnError false //即使報錯也不會停止打包
    checkReleaseBuilds false //打包release版本的時候進(jìn)行檢測
  }

3、dependencies{}閉包:

該閉包定義了項目的依賴關(guān)系,一般項目都有三種依賴方式:本地依賴、庫依賴和遠(yuǎn)程依賴。本地依賴可以對本地的jar包或目錄添加依賴關(guān)系,庫依賴可以對項目中的庫模塊添加依賴關(guān)系,遠(yuǎn)程依賴可以對jcener庫上的開源項目添加依賴關(guān)系。 從Android Studio3.0后compile引入庫不在使用,而是通過api和implementation,api完全等同于以前的compile,用api引入的庫整個項目都可以使用,用implementation引入的庫只有對應(yīng)的Module能使用,其他Module不能使用,由于之前的項目統(tǒng)一用compile依賴,導(dǎo)致的情況就是模塊耦合性太高,不利于項目拆解,使用implementation之后雖然使用起來復(fù)雜了但是做到降低偶合興提高安全性。

dependencies {//項目的依賴關(guān)系
  implementation fileTree(include: ['*.jar'], dir: 'libs')//本地jar包依賴
  implementation 'com.android.support:appcompat-v7:27.1.1'//遠(yuǎn)程依賴
  implementation 'com.android.support.constraint:constraint-layout:1.1.2'
  testImplementation 'junit:junit:4.12'//聲明測試用例庫
  androidTestImplementation 'com.android.support.test:runner:1.0.2'
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

implementation fileTree(include: ['*.jar'], dir: 'libs'):implementation fileTree是一個本地依賴聲明,表示將libs目錄下所有.jar后綴的文件都添加到項目的構(gòu)建路徑當(dāng)中。

 implementation 'com.android.support:appcompat-v7:27.1.1' :implementation語句為 遠(yuǎn)程依賴聲明,'com.android.support:appcompat-v7:27.1.1'為一個標(biāo)準(zhǔn)的遠(yuǎn)程依賴庫格式,其中com.android.support為域名部分,用于區(qū)分不同公司的庫;appcompat-v7為組件名稱,用于區(qū)分同一個公司的不同庫;27.1.1為版本號,用于區(qū)分同一個庫的不同版本。加上這句聲明后,Gradle在構(gòu)建項目時會先檢查一下本地是否已經(jīng)緩存過該庫,若沒有緩存則自動聯(lián)網(wǎng)下載,下載后自動添加到項目的構(gòu)建路徑中去。

testImplementation和androidTestImplementation :表示聲明測試用例庫。

Module完整的build.gradle配置如下:

// 聲明是Android程序,
//com.android.application 表示這是一個應(yīng)用程序模塊
//com.android.library 標(biāo)識這是一個庫模塊
//而這區(qū)別:前者可以直接運(yùn)行,后著是依附別的應(yīng)用程序運(yùn)行
apply plugin: 'com.android.application'

android {
  signingConfigs {// 自動化打包配置
    release {// 線上環(huán)境
      keyAlias 'test'
      keyPassword '123456'
      storeFile file('test.jks')
      storePassword '123456'
    }
    debug {// 開發(fā)環(huán)境
      keyAlias 'test'
      keyPassword '123456'
      storeFile file('test.jks')
      storePassword '123456'
    }
  }
  compileSdkVersion 27//設(shè)置編譯時用的Android版本
  defaultConfig {
    applicationId "com.billy.myapplication"http://項目的包名
    minSdkVersion 16//項目最低兼容的版本
    targetSdkVersion 27//項目的目標(biāo)版本
    versionCode 1//版本號
    versionName "1.0"http://版本名稱
    flavorDimensions "versionCode"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"http://表明要使用AndroidJUnitRunner進(jìn)行單元測試
  }
  buildTypes {// 生產(chǎn)/測試環(huán)境配置
    release {// 生產(chǎn)環(huán)境
      buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志
      buildConfigField("String", "URL_PERFIX", "\"https://release.cn/\"")// 配置URL前綴
      minifyEnabled false//是否對代碼進(jìn)行混淆
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的規(guī)則文件
      signingConfig signingConfigs.release//設(shè)置簽名信息
      pseudoLocalesEnabled false//是否在APK中生成偽語言環(huán)境,幫助國際化的東西,一般使用的不多
      zipAlignEnabled true//是否對APK包執(zhí)行ZIP對齊優(yōu)化,減小zip體積,增加運(yùn)行效率
      applicationIdSuffix 'test'//在applicationId 中添加了一個后綴,一般使用的不多
      versionNameSuffix 'test'//在applicationId 中添加了一個后綴,一般使用的不多
    }
    debug {// 測試環(huán)境
      buildConfigField("boolean", "LOG_DEBUG", "true")//配置Log日志
      buildConfigField("String", "URL_PERFIX", "\"https://test.com/\"")// 配置URL前綴
      minifyEnabled false//是否對代碼進(jìn)行混淆
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//指定混淆的規(guī)則文件
      signingConfig signingConfigs.debug//設(shè)置簽名信息
      debuggable false//是否支持?jǐn)帱c(diǎn)調(diào)試
      jniDebuggable false//是否可以調(diào)試NDK代碼
      renderscriptDebuggable false//是否開啟渲染腳本就是一些c寫的渲染方法
      zipAlignEnabled true//是否對APK包執(zhí)行ZIP對齊優(yōu)化,減小zip體積,增加運(yùn)行效率
      pseudoLocalesEnabled false//是否在APK中生成偽語言環(huán)境,幫助國際化的東西,一般使用的不多
      applicationIdSuffix 'test'//在applicationId 中添加了一個后綴,一般使用的不多
      versionNameSuffix 'test'//在applicationId 中添加了一個后綴,一般使用的不多
    }
  }

  sourceSets {//目錄指向配置
    main {
      jniLibs.srcDirs = ['libs']//指定lib庫目錄
    }
  }

  packagingOptions{//打包時的相關(guān)配置
    //pickFirsts做用是 當(dāng)有重復(fù)文件時 打包會報錯 這樣配置會使用第一個匹配的文件打包進(jìn)入apk
    // 表示當(dāng)apk中有重復(fù)的META-INF目錄下有重復(fù)的LICENSE文件時 只用第一個 這樣打包就不會報錯
    pickFirsts = ['META-INF/LICENSE']

    //merges何必 當(dāng)出現(xiàn)重復(fù)文件時 合并重復(fù)的文件 然后打包入apk
    //這個是有默認(rèn)值得 merges = [] 這樣會把默默認(rèn)值去掉 所以我們用下面這種方式 在默認(rèn)值后添加
    merge 'META-INF/LICENSE'

    //這個是在同時使用butterknife、dagger2做的一個處理。同理,遇到類似的問題,只要根據(jù)gradle的提示,做類似處理即可。
    exclude 'META-INF/services/javax.annotation.processing.Processor'
  }

  productFlavors {
    wandoujia {}
    xiaomi {}
    _360 {}
  }

  productFlavors.all {
      //批量修改,類似一個循序遍歷
    flavor -> flavor.manifestPlaceholders = [IFLYTEK_CHANNEL: name]
  }

  //程序在編譯的時候會檢查lint,有任何錯誤提示會停止build,我們可以關(guān)閉這個開關(guān)
  lintOptions {
    abortOnError false
    //即使報錯也不會停止打包
    checkReleaseBuilds false
    //打包release版本的時候進(jìn)行檢測
  }

}

dependencies {
  //項目的依賴關(guān)系
  implementation fileTree(include: ['*.jar'], dir: 'libs')
  //本地jar包依賴
  implementation 'com.android.support:appcompat-v7:27.1.1'
  //遠(yuǎn)程依賴
  implementation 'com.android.support.constraint:constraint-layout:1.1.2'
  testImplementation 'junit:junit:4.12'
  //聲明測試用例庫
  androidTestImplementation 'com.android.support.test:runner:1.0.2'
  androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論