Android Gradle構(gòu)建學(xué)習(xí)(二):構(gòu)建定制

Manifest屬性

通過SDL可以配置一下manifest選項(xiàng):

  • minSdkVersion
  • targetSdkVersion
  • versionName
  • applicationId (有效的包名 -- 更多詳情請(qǐng)查閱ApplicationId 對(duì)比 PackageName)
  • package Name for the test application
  • Instrumentation test runner

在android元素中的defaultConfig元素中定義所有配置剪况。
在構(gòu)建文件中定義的強(qiáng)大之處在于它是動(dòng)態(tài)的。 例如,可以從一個(gè)文件中或者其它自定義的邏輯代碼中讀取版本信息:

def computeVersionName() {
    ...
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        versionCode 12
        versionName computeVersionName()
        minSdkVersion 16
        targetSdkVersion 16
    }
}

注意:不要使用與在給定范圍內(nèi)的getter方法可能引起沖突的方法名。例如疆股,在defaultConfig{...}中調(diào)用getVersionName()將會(huì)自動(dòng)調(diào)用defaultConfig.getVersionName()方法蜡豹,你自定義的getVersionName()方法就被取代掉了。

Build Types構(gòu)建類型

默認(rèn)情況下蛮放,Android Plugin會(huì)自動(dòng)給項(xiàng)目設(shè)置同時(shí)構(gòu)建應(yīng)用程序的debug和release版本。 兩個(gè)版本之間的不同主要圍繞著能否在一個(gè)安全設(shè)備上調(diào)試走搁,以及APK如何簽名独柑。

Debug版本可采用默認(rèn)簽名。Release版本在構(gòu)建過程中沒有簽名私植,需要稍后再簽名。

這些配置通過一個(gè)BuildType對(duì)象來配置车酣。默認(rèn)情況下曲稼,這兩個(gè)實(shí)例都會(huì)被創(chuàng)建,分別是一個(gè)debug版本和一個(gè)release版本湖员。

Android plugin允許像創(chuàng)建其他構(gòu)建類型一樣定制debug和release實(shí)例贫悄。這需要在buildTypes的DSL容器中配置:

android {
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }

        jnidebug.initWith(buildTypes.debug)
        jnidebug {
            packageNameSuffix ".jnidebug"
            jnidebugBuild true
        }
    }
}

以上代碼片段實(shí)現(xiàn)了以下功能:

  • 配置默認(rèn)的debug構(gòu)建類型
  • 將debug版本的包名設(shè)置為.debug以便能夠同時(shí)在一臺(tái)設(shè)備上安裝debug和release版本的apk。
  • 創(chuàng)建了一個(gè)名為jnidebug的新構(gòu)建類型娘摔,并且這個(gè)構(gòu)建類型是debug構(gòu)建類型的一個(gè)副本窄坦。
  • 繼續(xù)配置jnidebug構(gòu)建類型,允許使用JNI組件凳寺,并且也添加了不一樣的包名后綴鸭津。

創(chuàng)建一個(gè)新的構(gòu)建類型就是簡(jiǎn)單的在buildType標(biāo)簽下添加一個(gè)新的元素,并且可以使用initWith()或者直接使用閉包來配置它肠缨。

簽名配置

對(duì)一個(gè)應(yīng)用程序簽名需要以下:

  • 一個(gè)Keystory
  • 一個(gè)keystory密碼
  • 一個(gè)key的別名
  • 一個(gè)key的密碼
  • 存儲(chǔ)類型
    位置逆趋,鍵名,兩個(gè)密碼晒奕,還有存儲(chǔ)類型一起形成了簽名配置闻书。

默認(rèn)情況下,debug被配置成使用一個(gè)debug keystory脑慧。 debug keystory使用了默認(rèn)的密碼和默認(rèn)key及默認(rèn)的key密碼魄眉。 debug keystory的位置在$HOME/.android/debug.keystroe,如果對(duì)應(yīng)位置不存在這個(gè)文件將會(huì)自動(dòng)創(chuàng)建一個(gè)闷袒。
可以創(chuàng)建其他配置或者自定義內(nèi)建的默認(rèn)配置坑律。通過signingConfigs這個(gè)DSL容器來配置:

android {
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

    buildTypes {
        foo {
            debuggable true
            jniDebugBuild true
            signingConfig signingConfigs.myConfig
        }
    }
}

以上代碼片段修改debug keystory的路徑到項(xiàng)目的根目錄下。在這個(gè)例子中霜运,這將自動(dòng)影響其他使用到debug構(gòu)建類型的構(gòu)建類型脾歇。

這里也創(chuàng)建了一個(gè)新的Single Config(簽名配置)和一個(gè)使用這個(gè)新簽名配置的新的Build Type(構(gòu)建類型)。

注意:只有默認(rèn)路徑下的debug keystory不存在時(shí)會(huì)被自動(dòng)創(chuàng)建淘捡。更改debug keystory的路徑并不會(huì)自動(dòng)在新路徑下創(chuàng)建debug keystory藕各。如果創(chuàng)建一個(gè)新的不同名字的SignConfig,但是使用默認(rèn)的debug keystore路徑來創(chuàng)建一個(gè)非默認(rèn)的名字的SigningConing焦除,那么還是會(huì)在默認(rèn)路徑下創(chuàng)建debug keystory激况。換句話說,會(huì)不會(huì)自動(dòng)創(chuàng)建是根據(jù)keystory的路徑來判斷,而不是配置的名稱乌逐。

依賴關(guān)系

Gradle項(xiàng)目可以依賴于其它組件竭讳。這些組件可以是外部二進(jìn)制包,或者是其它的Gradle項(xiàng)目浙踢。

1. 本地二進(jìn)制包依賴
可以在compile配置中绢慢,添加對(duì)本地jar包或aar包的依賴

dependencies {
    compile files('libs/foo.jar')
}

android {
    ...
}

注意:這個(gè)dependencies DSL標(biāo)簽是標(biāo)準(zhǔn)Gradle API中的一部分,所以它不屬于android標(biāo)簽

這個(gè)compile配置將被用于編譯main application洛波。它里面的所有東西都被會(huì)被添加到編譯的classpath中胰舆,同時(shí)也會(huì)被打包進(jìn)最終的APK。 以下是添加依賴時(shí)可能用到的其它一些配置選項(xiàng):

  • compile main application(主module)蹬挤。
  • androidTestCompile test application(測(cè)試module)缚窿。
  • debugCompile debug Build Type(debug類型的編譯)。
  • releaseCompile release Build Type(發(fā)布類型的編譯)焰扳。

APK默認(rèn)配置了兩個(gè)或兩個(gè)以上的編譯配置:compile和< buildtype >Compile. 創(chuàng)建一個(gè)新的Build Type將會(huì)自動(dòng)創(chuàng)建一個(gè)基于它名字的新配置倦零。

2. 遠(yuǎn)程二進(jìn)制包依賴
Gradle支持從Maven或者Ivy倉庫中拉取文件。首先必須將倉庫添加到列表中吨悍,然后必須在依賴中聲明Maven或者Ivy聲明的文件扫茅。

repositories {
   //maven倉庫
    mavenCentral()
}


dependencies {
    //maven文件
    compile 'com.google.guava:guava:11.0.2'
}

android {
    ...
}

注意:mavenCentral()是指定倉庫URL的簡(jiǎn)單方法。Gradle支持遠(yuǎn)程和本地倉庫畜份。

3. 多項(xiàng)目設(shè)置

Gradle項(xiàng)目也可以通過使用多項(xiàng)目配置依賴于其它Gradle項(xiàng)目诞帐。多項(xiàng)目配置的實(shí)現(xiàn)通常是在一個(gè)根項(xiàng)目路徑下將所有項(xiàng)目作為子文件夾包含進(jìn)去。

例如爆雹,給定以下項(xiàng)目結(jié)構(gòu):

MyProject/
 + app/
 + libraries/
    + lib1/
    + lib2/

我們可以定義3個(gè)項(xiàng)目停蕉。Grand將會(huì)按照以下名字映射它們:

:app
:libraries:lib1
:libraries:lib2

每一個(gè)項(xiàng)目都擁有自己的build.gradle文件來聲明自己如何構(gòu)建。 另外钙态,在根目錄下還有一個(gè)setting.gradle文件用于聲明所有項(xiàng)目慧起。 這些文件的結(jié)構(gòu)如下:

MyProject/
 | settings.gradle
 + app/
    | build.gradle
 + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

其中setting.gradle的內(nèi)容非常簡(jiǎn)單,這里定義了哪一個(gè)文件夾才是真正的Gradle項(xiàng)目册倒。

include ':app', ':libraries:lib1', ':libraries:lib2'

其中:app項(xiàng)目可能依賴于這些庫蚓挤,這是通過以下依賴配置聲明的:

dependencies {
    compile project(':libraries:lib1')
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顶籽,一起剝皮案震驚了整個(gè)濱河市癣缅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扫沼,老刑警劉巖崇呵,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缤剧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡域慷,警方通過查閱死者的電腦和手機(jī)荒辕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門汗销,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抵窒,你說我怎么就攤上這事弛针。” “怎么了李皇?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵削茁,是天一觀的道長。 經(jīng)常有香客問我掉房,道長付材,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任圃阳,我火速辦了婚禮,結(jié)果婚禮上璧帝,老公的妹妹穿的比我還像新娘捍岳。我一直安慰自己,他們只是感情好睬隶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布锣夹。 她就那樣靜靜地躺著,像睡著了一般苏潜。 火紅的嫁衣襯著肌膚如雪银萍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天恤左,我揣著相機(jī)與錄音贴唇,去河邊找鬼。 笑死飞袋,一個(gè)胖子當(dāng)著我的面吹牛戳气,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巧鸭,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼瓶您,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了纲仍?” 一聲冷哼從身側(cè)響起呀袱,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎郑叠,沒想到半個(gè)月后夜赵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锻拘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年油吭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了击蹲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婉宰,死狀恐怖歌豺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情心包,我是刑警寧澤类咧,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站蟹腾,受9級(jí)特大地震影響痕惋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娃殖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一值戳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炉爆,春花似錦堕虹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至郁稍,卻和暖如春赦政,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耀怜。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工恢着, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人封寞。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓然评,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狈究。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碗淌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)抖锥,斷路器亿眠,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項(xiàng),請(qǐng)點(diǎn)擊這里進(jìn)行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,122評(píng)論 8 72
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,871評(píng)論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評(píng)論 6 342
  • 天下其實(shí)就在一張地圖里磅废。指點(diǎn)江山的開始纳像,也是從地圖上找到自己的位置開始的。水系 山脈和疆域才能盡收眼底拯勉。 在閱讀...
    Andylee閱讀 618評(píng)論 0 2