詳解2個(gè)build.gradle文件

注意:本篇文章是本人閱讀相關(guān)文章的總結(jié)锉试,方便以后查閱扛禽,所有內(nèi)容非原創(chuàng),侵權(quán)刪艘儒。

本篇文章內(nèi)容來自于
1.Android第一行代碼 郭霖
2.相對應(yīng)的知識塊的最下方會給出原來的帖子的鏈接

目錄

  1. 最外層目錄下的build.gradle文件
  2. app目錄下的build.gradle文件
    --2.1 Android Studio3.0中dependencies依賴由compile變?yōu)閕mplementation/api的區(qū)別
    --2.2 versionCode和versionName

項(xiàng)目中有兩個(gè)build.gradle文件赞赖。
一個(gè)在最外層目錄下甜害,一個(gè)在app目錄下。兩個(gè)文件對構(gòu)建AS項(xiàng)目都起到了至關(guān)重要的作用卑硫。

1. 最外層目錄下的build.gradle文件

通常情況不用修改這個(gè)文件中的內(nèi)容徒恋。除非添加一些全局的項(xiàng)目構(gòu)建的配置

buildscript { //構(gòu)建腳本
    //兩處repositories都有jcenter()
    //jcenter是一個(gè)代碼托管倉庫,很多Android開源項(xiàng)目都會選擇將代碼托管到j(luò)center上欢伏。
    //進(jìn)行了這行聲明后入挣,我們就可以在項(xiàng)目中輕松引用任何jcenter上的開源項(xiàng)目了。
    repositories { //倉庫
        google()
        jcenter()
    }
    dependencies { //依賴
        //使用classpath聲明了一個(gè)Gradle插件硝拧。
        //為什么要聲明這個(gè)插件呢径筏?因?yàn)镚radle并不是專門為構(gòu)建Android項(xiàng)目而開發(fā)的。java C++等多個(gè)項(xiàng)目都可以使用Gradle來創(chuàng)建障陶。
        //如果我們想用他來構(gòu)建項(xiàng)目滋恬,則必須聲明這個(gè)插件
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

allprojects {
    repositories { //倉庫
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2. app目錄下的build.gradle文件

apply plugin: 'com.android.application'
//應(yīng)用了一個(gè)插件
//兩種值可以選 com.android.application(表示這是一個(gè)應(yīng)用程序模塊) 和 com.android.library(表示這是一個(gè)庫模塊)
//應(yīng)用程序模塊和庫模塊最大的區(qū)別:前者可以直接運(yùn)行,后者只能作為代碼庫依附于別的應(yīng)用程序模塊來運(yùn)行抱究。

android { //android閉包 可以用來配置項(xiàng)目構(gòu)建的各種屬性
    compileSdkVersion 26 //指定項(xiàng)目的編譯版本 24就是使用Android 7.0系統(tǒng)的SDK編譯
    buildToolsVersion "26.0.2" //指定項(xiàng)目構(gòu)建工具的版本 有更新版本系統(tǒng)會自動(dòng)提示恢氯?
    
    defaultConfig { //可以對項(xiàng)目的更多細(xì)節(jié)進(jìn)行配置
        applicationId "com.example.apple.systemdemo1" //指定項(xiàng)目的包名(創(chuàng)建時(shí)設(shè)置,后期修改則在這里修改)
        minSdkVersion 15 //指定項(xiàng)目最低兼容的Android系統(tǒng)版本媳维,15表示最低兼容到Android4.0系統(tǒng)
        targetSdkVersion 26 //targetSdkVersion表示你在該目標(biāo)版本上已經(jīng)做過了充分的測試酿雪。系統(tǒng)將會為你的應(yīng)用程序啟用一些最新的功能和特性。
        //比如Android6.0系統(tǒng)引入了運(yùn)行時(shí)權(quán)限這個(gè)功能侄刽,將targetSdkVersion指定成23或者更高,那么系統(tǒng)會啟動(dòng)運(yùn)行時(shí)權(quán)限朋凉。
        //但如果你將targetSdkVersion指定成22 那么說明你的程序最高只在Android5.1系統(tǒng)上做過充分的測試州丹。Android6.0系統(tǒng)中引入的新功能自然不會啟用。
        versionCode 1 //用于指定項(xiàng)目版本號
        versionName "1.0" //用于指定項(xiàng)目的版本名
        //versionCode和versionName在生成安裝文件時(shí)特別重要
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    //buildTypes閉包用于指定生成安裝文件的相關(guān)配置
    //通常只會有2個(gè)子閉包,一個(gè)是debug 一個(gè)是release
    //debug包用于指定生成測試版安裝文件的配置 release閉包用于指定生成正式版安裝文件的配置
    //debug包可以忽略不寫墓毒。
    //通過AS直接運(yùn)行項(xiàng)目生成的都是測試文件
    buildTypes {
        release {
            minifyEnabled false //用于指定是否對項(xiàng)目的代碼進(jìn)行混淆 true表示混淆 false表示不混淆
            //proguardFiles用于指定混淆時(shí)使用的規(guī)則文件
            //這里指定了2個(gè) proguard-android.txt是AndroidSDK目錄下的tools/proguard的吓揪,里面是所有項(xiàng)目通用的混淆規(guī)則
            //proguard-rules.pro是當(dāng)前項(xiàng)目根目錄下的,里面可以編寫當(dāng)前項(xiàng)目特有的混淆規(guī)則
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

//dependencies閉包可以指定當(dāng)前項(xiàng)目所有的依賴關(guān)系
//通常AS項(xiàng)目有三種依賴方式:本地依賴+庫依賴+遠(yuǎn)程依賴
//本地依賴可以對本地的jar包或者目錄添加依賴關(guān)系
//庫依賴可以對項(xiàng)目中的庫模塊添加依賴關(guān)系
//遠(yuǎn)程依賴則可以對jcenter庫上的開源項(xiàng)目添加依賴關(guān)系
dependencies {
    //本地依賴聲明 表示將libs目錄下的所有.jar后綴的文件都添加到項(xiàng)目的構(gòu)建路徑中
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //遠(yuǎn)程依賴 com.android.support是域名(用于和其他公司的庫作區(qū)分) appcompat-v7是組名稱(用于和同一個(gè)公司中不同的庫作區(qū)分) 26.1.0是版本號(用于對同一個(gè)庫中不同的版本作區(qū)分)
    //加上遠(yuǎn)程依賴的聲明后:Gradle會在構(gòu)建項(xiàng)目時(shí)先檢查以下本地是否已經(jīng)有這個(gè)庫的緩存所计,沒有則自動(dòng)聯(lián)網(wǎng)下載柠辞,然后添加到項(xiàng)目的構(gòu)建目錄中。
    implementation 'com.android.support:appcompat-v7:26.1.0'
    //庫依賴 compile project +要依賴的庫的名稱 比如一個(gè)庫模塊叫helper 則為compile project(':helper')
    //testImplementation是用于聲明測試用例庫的
    testImplementation 'junit:junit:4.12'
}

2.1 Android Studio3.0中dependencies依賴由compile變?yōu)閕mplementation/api的區(qū)別

//3.0之前
compile fileTree(dir: 'libs', include: ['*.jar'])
//3.0之后
implementation fileTree(dir: 'libs', include: ['*.jar'])
或
api fileTree(dir: 'libs', include: ['*.jar'])

在3.0版本中主胧,compile 指令被標(biāo)注為過時(shí)方法叭首,而新增了兩個(gè)依賴指令,一個(gè)是implementation和api踪栋,這兩個(gè)都可以進(jìn)行依賴添加
推薦:依賴首先應(yīng)該設(shè)置為implementation的焙格,如果沒有錯(cuò),那就用implementation夷都,如果有錯(cuò)眷唉,那么使用api指令,這樣會使編譯速度增快囤官。

api和implements的區(qū)別:
api 完全等同于compile指令
implementation 將該依賴隱藏在內(nèi)部冬阳,而不對外部公開。則對該項(xiàng)目有依賴的項(xiàng)目將無法訪問到使用該命令編譯的依賴中的任何程序党饮。好處是編譯速度會加快摩泪。
比如:A用implements依賴gson庫,B又依賴A劫谅,此時(shí)B無法直接使用gson庫见坑。

來自/具體參考:Android Studio3.0中dependencies依賴由compile變?yōu)閕mplementation的區(qū)別

2.2 versionCode和versionName

versionCode 1 //用于指定項(xiàng)目版本號
versionName "1.0" //用于指定項(xiàng)目的版本名

VersionCode只能輸入整形,
VersionName輸入隨意捏检,可為"1.6.0"荞驴,也可以為"兩只老虎,兩只老虎"贯城。

Google為APK定義了兩個(gè)關(guān)于版本屬性:VersionCode和VersionName熊楼,他們有不同的用途。
VersionCode:對消費(fèi)者不可見能犯,僅用于應(yīng)用市場鲫骗、程序內(nèi)部識別版本,判斷新舊等用途踩晶。
VersionName:展示給消費(fèi)者执泰,消費(fèi)者會通過它認(rèn)知自己安裝的版本

重要結(jié)論:
1.不同版本的VersionCode一定要不一樣,否則應(yīng)用市場不會讓你通過審核渡蜻。目測术吝,各種應(yīng)用市場都是通過VersionCode來判斷是否提醒用戶更新的计济。
2.VersionName一般取成方便理解的標(biāo)識。1.2.0明顯比1.1.1的版本要新排苍。而我們普通人也習(xí)慣了這種記錄版本的方式沦寂。

命名規(guī)則:
VersionName-------
常見軟件版本號的形式是major.minor.maintenance.build
major是主版本號,一般在軟件有重大升級時(shí)增長
minor是次版本號淘衙,一般在軟件有新功能時(shí)增長
maintenance是維護(hù)版本传藏,一般在軟件有主要的問題修復(fù)后增長
build構(gòu)建版本(測試版本一般會用到)
正式版本:major.minor.maintenance----1.0.0
測試版本:major.minor.maintenance.build----1.0.0.5

VersionCode-------
我公司以5位數(shù)的 int 來表示 (每次升級版本時(shí),versioncode的值都要比以前的值要大)
正式版本:major.minor.maintenance----1.0.0(versioncode:10000)
測試版本:major.minor.maintenance.build----1.0.0.5(versioncode:10005)

從manifest讀取versionName的代碼

    PackageManager pm = context.getPackageManager();  
    PackageInfo pi;  
    String versionName = "";  
    try {  
        pi = pm.getPackageInfo(context.getPackageName(), 0);  
        versionName = pi.versionName;  
    } catch (NameNotFoundException e) {  
        e.printStackTrace();  
    }  

具體參考/來自
android中的VersionCode和VersionName到底有什么區(qū)別
Android APP VersionCode和VersionName命名規(guī)則VersionName的命名規(guī)則

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市彤守,隨后出現(xiàn)的幾起案子毯侦,更是在濱河造成了極大的恐慌,老刑警劉巖遗增,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叫惊,死亡現(xiàn)場離奇詭異,居然都是意外死亡做修,警方通過查閱死者的電腦和手機(jī)霍狰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饰及,“玉大人蔗坯,你說我怎么就攤上這事×呛” “怎么了宾濒?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屏箍。 經(jīng)常有香客問我绘梦,道長,這世上最難降的妖魔是什么赴魁? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任卸奉,我火速辦了婚禮,結(jié)果婚禮上颖御,老公的妹妹穿的比我還像新娘榄棵。我一直安慰自己,他們只是感情好潘拱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布疹鳄。 她就那樣靜靜地躺著,像睡著了一般芦岂。 火紅的嫁衣襯著肌膚如雪瘪弓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天盔腔,我揣著相機(jī)與錄音杠茬,去河邊找鬼月褥。 笑死弛随,一個(gè)胖子當(dāng)著我的面吹牛瓢喉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舀透,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栓票,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愕够?” 一聲冷哼從身側(cè)響起走贪,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惑芭,沒想到半個(gè)月后坠狡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遂跟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年逃沿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幻锁。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凯亮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哄尔,到底是詐尸還是另有隱情假消,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布岭接,位于F島的核電站富拗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鸣戴。R本人自食惡果不足惜啃沪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葵擎。 院中可真熱鬧谅阿,春花似錦、人聲如沸酬滤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盯串。三九已至氯檐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間体捏,已是汗流浹背冠摄。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工糯崎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人河泳。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓沃呢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拆挥。 傳聞我的和親對象是個(gè)殘疾皇子薄霜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)纸兔,斷路器惰瓜,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 本文原作者為:kale2010 .blog地址:http://www.cnblogs.com/tianzhijie...
    NoValue閱讀 3,555評論 0 11
  • 不同于 Eclispse,Android Studio 是采用 Gradle 來構(gòu)建項(xiàng)目的汉矿,Gradle 是一個(gè)非...
    QDJdeveloper閱讀 919評論 0 0
  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/5255b100930e 0. 前言 完全由個(gè)人翻...
    王三的貓阿德閱讀 2,516評論 0 4
  • 風(fēng)是兇手導(dǎo)致月的殘崎坊,所以烏云還未出現(xiàn),沙漠里就凋落許多花瓣洲拇。只有 沉默的溪澗奈揍,流傳著彩虹的幻現(xiàn)。一場雨終究是一場災(zāi)...
    李一十八閱讀 400評論 0 0