Android中的Gradle——app/build.gradle

升級(jí)了Android Studio 3.0后 , 首次創(chuàng)建項(xiàng)目就報(bào)錯(cuò)了 , 經(jīng)過一番折騰總算是解決了 , 但是仔細(xì)想想 , 還是感覺自己的gradle相比于java來說還是太弱了.這篇博客也希望能提醒一下各位 , 工欲善其事,必先利其器.

首先是我解決今天遇到問題的解決方法

首先查看對(duì)應(yīng)的gradle版本
  • 手動(dòng)下載Gradle . 即根目錄->gradle->wrapper->gradle-wrapper.properties文件中 , 相對(duì)應(yīng)的gradle版本 , 如圖所示
    筆者這里是4-1-all版本的

其實(shí)對(duì)于這個(gè)問題 , 網(wǎng)上有很多解決方案 , 比如說手動(dòng)修改對(duì)應(yīng)的gradle版本為自己已有的版本坛缕。已有版本可以在如圖所示的文件中找到,一般來說 , 只需要輸入已經(jīng)完整下載的gradle包即可(完整下載指的是魏保,打開文件后有個(gè).ok的文件烂翰,文件大小為0,這個(gè)文件是一個(gè)標(biāo)志文件,標(biāo)志著這個(gè)文件夾下的東西已經(jīng)完全下載)


本地已下載的gradle

但是我們今天不能這樣做,如果你修改了gradle的版本,會(huì)在gradle中報(bào)一大堆錯(cuò)誤指么,錯(cuò)誤稍后再談。所以還是科學(xué)上網(wǎng)驰吓,或者是手動(dòng)下載新版本吧

修改了gradle版本帶來的錯(cuò)誤

修改了gradle的文件時(shí)涧尿,會(huì)提示app/build.gradle文件中大量標(biāo)紅 , 細(xì)心的老哥們會(huì)發(fā)現(xiàn) , 包引入的方式居然發(fā)生了改變:



這里從compile變成了implementation這種新的方式 , 因?yàn)檫@里是使用默認(rèn)的gradle版本來生成的語句,手動(dòng)修改版本必然會(huì)出現(xiàn)問題檬贰」昧可以自己手動(dòng)修改過來就好了,如果直接用新版本的gradle這里不用理會(huì)翁涤。至于為什么會(huì)出現(xiàn)這種改變桥言,這里就不再討論了

仍然報(bào)錯(cuò)?

這就是平時(shí)的習(xí)慣問題了葵礼,檢查設(shè)置中g(shù)radle是不是設(shè)置為離線模式了号阿。在默認(rèn)新版本的gradle下回引入新版本的包,比如v7包鸳粉,離線模式時(shí)候扔涧,在本地當(dāng)然找不到這個(gè)包。如果你把引用的包改掉也可以(會(huì)有不少需要改)届谈,但這里建議你關(guān)閉離線模式枯夜,讓gradle去下載新的包就行啦

其實(shí)說到底,還是對(duì)gradle不夠了解艰山。所以接下來就來總結(jié)一下Gradle文件中湖雹,各個(gè)字段的含義以及用法,小技巧在另一篇博客中收集(待更新)曙搬。

app/build.gradle文件

1. android->defaultConfig 默認(rèn)偏好設(shè)置

動(dòng)態(tài)的在build時(shí)配置AndroidManifest.xml里的項(xiàng)目摔吏,defaultConfig里的配置可以覆蓋manifest里的配置鸽嫂。

  • 在build.gradle文件生成一個(gè)applicationId,對(duì)應(yīng)的屬性值是填寫的package name征讲。applicationId表示真正的包名据某,而package不再被認(rèn)為是包名,因?yàn)閼?yīng)用程序被打包成apk文件的時(shí)候稳诚,原先在manifest聲明的package被applicationId代替哗脖。也剛好說明為什么應(yīng)用程序安裝到手機(jī)后瀑踢,手機(jī)上顯示的是applicationId扳还,而不是顯示package,同時(shí)如果想在應(yīng)用程序中接入第三方的API橱夭,填寫的包名也必須是applicationId氨距。
  • versionName,versionCode: 版本名和版本號(hào)
  • minSdkVersion棘劣,targetSdkVersion: 支持的安卓設(shè)備版本的區(qū)間
  • testInstrumentationRunner:允許自動(dòng)化測(cè)試
  • ndk { // 設(shè)置支持的SO庫(kù)架構(gòu)
    abiFilters 'armeabi', 'x86', 'x86','x86_64', 'armeabi-v7a', 'arm64- v8a'
    }
  • buildConfigField:自定義字段俏让,方便調(diào)試時(shí)打log,如
  buildConfigField("int", "SLEEP_TIME", "5000")
  public static final boolean DEBUG = BuildConfig.API_ENV;

2. android-> signingConfigs 自定義簽名設(shè)置

(懶得配置了,個(gè)人喜歡手動(dòng)簽名)

3. android->buildTypes 構(gòu)建類型

每一個(gè)APP至少包含debug和release兩種構(gòu)建類型茬暇,debug定義APP的調(diào)試版本

  • debug模式的幾個(gè)特點(diǎn):
    支持?jǐn)帱c(diǎn)調(diào)試和log信息打印首昔,debuggable屬性值為true
    使用系統(tǒng)默認(rèn)的密鑰庫(kù)簽署apk文件
    沒有對(duì)apk文件進(jìn)行代碼和資源文件的優(yōu)化(包括文件壓縮、冗余文件刪除)
    沒有對(duì)代碼進(jìn)行混淆
  • release定義APP的發(fā)布版本:
    不支持?jǐn)帱c(diǎn)調(diào)試糙俗,debuggable默認(rèn)為false
    沒有壓縮類文件代碼勒奇,minifyEnabled,默認(rèn)為false
    沒有壓縮資源文件巧骚,shrinkResources赊颠,默認(rèn)為false
    沒有指定自定義簽名文件,默認(rèn)使用系統(tǒng)的密鑰庫(kù)簽署apk
    • minifyEnable定義是否壓縮代碼劈彪,false表示不壓縮
    • proguardFiles定義混淆代碼的默認(rèn)混淆規(guī)則:
      proguard-android.txt表示系統(tǒng)自帶的混淆規(guī)則竣蹦,
      proguard-rules.pro位于當(dāng)前module根目錄下,用于定義開發(fā)者自己的混淆規(guī)則沧奴。


      image.png

      這里貼上自己的代碼:

buildTypes {
        release {
            //混淆配置打開時(shí)痘括,才會(huì)自動(dòng)上傳符號(hào)表到 BugHD
            minifyEnabled false
            //對(duì)齊優(yōu)化設(shè)置為true,否則找不到該task (默認(rèn)不寫也是true)
            zipAlignEnabled true
            //配置正式版簽名證書信息滔吠,否則上傳release版本是unsigned_apk纲菌,導(dǎo)致無法安裝。
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            shrinkResources true //移除無用的資源文件
        }
        debug {
            minifyEnabled false// 是否混淆
            shrinkResources true //移除無用的資源文件
        }
    }

4. android->dexOptions DEX文件構(gòu)建屬性配置(加快構(gòu)建速度)

Android Studio在每次構(gòu)建的時(shí)候屠凶,都感覺花好長(zhǎng)時(shí)間驰后,這時(shí)候我們可以配置一下dexOption加快構(gòu)建速度

  • preDexLibraries 聲明是否預(yù)先編譯依賴庫(kù),實(shí)質(zhì)是通過延時(shí)清除已生成的依賴庫(kù)的構(gòu)建文件矗愧,達(dá)到加快速度的目的灶芝。
  • maxProcessCount 設(shè)置進(jìn)程運(yùn)行過程中可以使用的最大線程數(shù)郑原。默認(rèn)值為4。
  • javaMaxHeapSize 設(shè)置DEX編譯器的最大堆大小夜涕,堆或者棧都是用于存放暫時(shí)不用的垃圾犯犁,當(dāng)內(nèi)存不足時(shí),垃圾回收機(jī)制會(huì)清除過時(shí)的緩存女器,堆大小決定垃圾清除的頻率酸役,影響著構(gòu)建的速度
dexOptions {
       incremental true //使用增量構(gòu)建
       javaMaxHeapSize "4g" //設(shè)置堆內(nèi)存
       jumboMode = true //大工程模式
       maxProcessCount=8
    }

以上的配置,在引入MultiDex的時(shí)候驾胆,有幾率會(huì)在debug模式下報(bào)錯(cuò)涣澡,但是在release時(shí)正常,所以在引入MultiDex的情況下丧诺,debug時(shí)手動(dòng)注釋掉入桂,release時(shí)放開

5. android->splits 將一個(gè)apk拆分成多個(gè)相關(guān)配置(拆分依據(jù):屏幕密度、系統(tǒng)架構(gòu))

(姑且沒用過)

6. dependencies 引入的依賴包

dependencies {
    compile project(':third-party:FilePicker')
    compile files('libs/zxing.jar')
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile group: 'com.android.support', name: 'appcompat-v7', version: '25.1.0'
}

以上的依賴分別對(duì)應(yīng):

  1. 模塊依賴項(xiàng)(工程依賴驳阎,module依賴)
    聲明了一個(gè)名為third-party/FilePicker的本地 Android 庫(kù)模塊作為依賴項(xiàng)抗愁,并要求構(gòu)建系統(tǒng)在構(gòu)建應(yīng)用時(shí)編譯并包含該本地模塊。


    被依賴的項(xiàng)目位置
  2. 本地二進(jìn)制依賴項(xiàng)

  3. 本地二進(jìn)制依賴樹
    本地依賴呵晚,告訴構(gòu)建系統(tǒng)在編譯類路徑和最終的應(yīng)用軟件包中包含 app/libs/ 目錄內(nèi)的指定或全部 JAR 文件蜘腌。如果有模塊需要本地二進(jìn)制依賴項(xiàng),這些依賴項(xiàng)的 JAR 文件必須復(fù)制到項(xiàng)目?jī)?nèi)部的 /libs 中饵隙。

  4. 遠(yuǎn)程二進(jìn)制依賴項(xiàng)

  5. 遠(yuǎn)程二進(jìn)制依賴組
    遠(yuǎn)程二進(jìn)制依賴撮珠,通過指定其 JCenter 坐標(biāo),針對(duì) Android 支持庫(kù)的 添加依賴癞季。默認(rèn)情況下劫瞳,Android Studio 會(huì)將項(xiàng)目配置為使用頂級(jí)構(gòu)建文件中的 JCenter 存儲(chǔ)區(qū)。當(dāng)您將項(xiàng)目與構(gòu)建配置文件同步時(shí)绷柒,Gradle 會(huì)自動(dòng)從 JCenter 中抽取依賴項(xiàng)志于。或者废睦,您也可以通過使用 SDK 管理器下載和安裝特定的依賴項(xiàng)伺绽。當(dāng)然也可以自己制作開源庫(kù)上傳,再到這里用一句話引用嗜湃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奈应,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子购披,更是在濱河造成了極大的恐慌杖挣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刚陡,死亡現(xiàn)場(chǎng)離奇詭異惩妇,居然都是意外死亡株汉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門歌殃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乔妈,“玉大人,你說我怎么就攤上這事氓皱÷氛伲” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵波材,是天一觀的道長(zhǎng)股淡。 經(jīng)常有香客問我,道長(zhǎng)各聘,這世上最難降的妖魔是什么揣非? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮躲因,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忌傻。我一直安慰自己大脉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布水孩。 她就那樣靜靜地躺著镰矿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俘种。 梳的紋絲不亂的頭發(fā)上秤标,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音宙刘,去河邊找鬼苍姜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛悬包,可吹牛的內(nèi)容都是我干的衙猪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼布近,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼垫释!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撑瞧,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤棵譬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后预伺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體订咸,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琅束,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了算谈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涩禀。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖然眼,靈堂內(nèi)的尸體忽然破棺而出艾船,到底是詐尸還是另有隱情,我是刑警寧澤高每,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布屿岂,位于F島的核電站,受9級(jí)特大地震影響鲸匿,放射性物質(zhì)發(fā)生泄漏爷怀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一带欢、第九天 我趴在偏房一處隱蔽的房頂上張望运授。 院中可真熱鬧,春花似錦乔煞、人聲如沸吁朦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逗宜。三九已至,卻和暖如春空骚,著一層夾襖步出監(jiān)牢的瞬間纺讲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工囤屹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熬甚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓牺丙,卻偏偏與公主長(zhǎng)得像则涯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冲簿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,095評(píng)論 25 707
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng)粟判,請(qǐng)點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,131評(píng)論 8 72
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)峦剔,斷路器档礁,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 上周,小升初家長(zhǎng)交流群里就有人發(fā)布這周可能要進(jìn)行K6聯(lián)賽吝沫。 果不其然呻澜,從昨天下午就陸續(xù)收到K6考試的時(shí)間及領(lǐng)準(zhǔn)考證...
    素面迎風(fēng)閱讀 163評(píng)論 0 0
  • 文 | 行之 金庸共寫過“飛雪連天射白鹿羹幸,笑書神俠倚碧鴛”共計(jì)14部長(zhǎng)篇(其中鴛鴦刀是中篇脊髓,另外還寫過短篇《越女劍...
    在下行之閱讀 19,354評(píng)論 60 320