Android Studio Gradle使用詳解

轉(zhuǎn)自:http://www.reibang.com/p/02cb9a0eb2a0

一)基本配置

build配置

buildscript {

? ? ? ?repositories { ? ??

? ? ? ? ? ? ? ? ? ? jcenter()?

?}?

dependencies { ??

? classpath'com.android.tools.build:gradle:1.2.3'

}?

}

Android腳本

applyplugin:'com.android.application'

Android配置

android {?

? ? ? ? ?compileSdkVersion22

? ? ? ? ?buildToolsVersion"22.0.1"


}

項目結(jié)構(gòu)

MyApp├──build.gradle├──settings.gradle└──app├──build.gradle├──build├──libs└──src└──main├──java│ ? └──com.package.myapp└──res├──drawable├──layout└──etc.

Gradle Wrapper結(jié)構(gòu)(這些新建項目時都添加給了用戶袄膏,不需要重新添加)

myapp/ ├── gradlew ?├── gradlew.bat └── gradle/wrapper/ ? ? ├── gradle-wrapper.jar ? ? └── gradle-wrapper.properties

運行build任務 - 列出所有可用任務

$./gradlew tasks

生成App-debug.apk任務

$./gradlew assembleDebug# Apk路徑: MyApp/app/build/ outputs/apk

手動導入Eclipse-Android項目(自動導入請連續(xù)點“下一步”)

在項目路徑下創(chuàng)建build.gradle文件:

buildscript {?

? ? ? ?repositories { ?

? ? ? ? ? ? ? ? ?jcenter() ?

?} ?

dependencies { ??

? ?classpath'com.android.tools.build:gradle:1.2.3'

}

}

apply plugin:'com.android.application'

android { ?

compileSdkVersion22

buildToolsVersion"22.0.1"

sourceSets { ? ??

?main { ? ? ?

?? ?manifest.srcFile'AndroidManifest.xml'

? ? ? ? ? ?java.srcDirs = ['src']

?? ? ? ? ?resources.srcDirs = ['src']

?? ? ? ? ?aidl.srcDirs = ['src']

?? ? ? ? ?renderscript.srcDirs = ['src']

?? ? ? ? ?res.srcDirs = ['res']?

? ? ? ? ?assets.srcDirs = ['assets']

?? ? ?}?

? ? ?androidTest.setRoot('tests')

??}

?}

dependencies { ?

compile fileTree(dir:'libs', include: ['*.jar'])

}

PS也可以復制粘貼Eclipse-Android項目的源代碼到Android Studio的項目里

二)自定義配置

Gradle所有文件結(jié)構(gòu)

MyApp├──build.gradle├──settings.gradle└──app└──build.gradle

settings.gradle

include':app'

MyApp/build.gradle

buildscript {?

repositories {

?? ? jcenter()

?}?

dependencies {

?? ? classpath'com.android.tools.build:gradle:1.2.3'

}

?}

allprojects {

?repositories {

?? ? jcenter()

??}

}

MyApp/app/build.gradle

applyplugin:'com.android.application'android { compileSdkVersion22

buildToolsVersion"22.0.1"

defaultConfig { ? ?

?applicationId"com.gradleforandroid.gettingstarted"

minSdkVersion14

targetSdkVersion22

versionCode1

versionName"1.0"

}

buildTypes {

?? ? release {

?? ? ? ? minifyEnabled false

?? ? ? ? proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

}

?}

?}

dependencies {

compilefileTree(dir:'libs', include: ['*.jar'])

?compile'com.android.support:appcompat-v7:22.2.0'

?}

基礎任務

$./gradlew assemble -為所有構(gòu)建類型創(chuàng)建apk$./gradlew check 運行所有的檢查蓖乘,比如說AndroidLint带欢,如果發(fā)現(xiàn)問題可終止任務$./gradlew build 運行以上兩個任務$./gradlew clean -清除生成的apk++++$./gradlew connectedCheck - 在設備上運行測試$./gradlew deviceCheck - 遠程設備運行測試$./gradlew installDebug/installRelease - 在設備商安裝指定版本$./gradlew uninstall - 卸載

Build Types不同版本的參數(shù)設置 - BuildConfig/Resource Value

android { ?

buildTypes {

?? ? ?debug {? ? ? ? ? buildConfigField"String","API_URL","\\"http://test.example.com/api\\""buildConfigField"boolean","LOG_HTTP_CALLS","true"resValue"string","app_name","Example DEBUG"

} ? ? ?

? ? release { ? ? ? ? ?buildConfigField"String","API_URL","\\"http://example.com/api\\""buildConfigField"boolean","LOG_HTTP_CALLS","false"resValue"string","app_name","Example"

}

??}

}

全局設置(項目根目錄的build.gradle)

allprojects { ?

apply plugin:'com.android.application'android {

?? ? ?compileSdkVersion22

buildToolsVersion"22.0.1"

}

?}

設置全局參數(shù)

ext {

??compileSdkVersion =22

buildToolsVersion ="22.0.1"

}

在MyApp/app/build.gradle里面使用參數(shù)

android{

compileSdkVersion rootProject.ext.compileSdkVersion

buildToolsVersion rootProject.ext.buildToolsVersion

}

默認任務(MyApp/build.gradle)

defaultTasks'clean','assembleDebug'

三) 依賴管理

倉庫

預設配置倉庫

repositories{

mavenCentral()

jcenter()

mavenLocal()

}

遠程倉庫

repositories { maven { ? ? url"http://repo.acmecorp.com/maven2"credentials { ? ? ? ? username'user'password'secretpassword'} } ivy { ? ? url"http://repo.acmecorp.com/repo"}}

本地倉庫

repositories { maven { ? ? url"../repo"}}

本地依賴

項目文件依賴

dependencies { ?compile fileTree(dir:'libs',include: ['*.jar'])}

原生庫結(jié)構(gòu)與配置

# 結(jié)構(gòu):app ├── AndroidManifest.xml └── jniLibs ? ? ├── armeabi ? ? │ ? └── nativelib.so ? ? ├── armeabi-v7a ? ? │ ? └── nativelib.so ? ? ├── mips ? ? │ ? └── nativelib.so ? ? └── x86 ? ? ? ? └── nativelib.so# 配置:android {sourceSets.main { ? ? ?jniLibs.srcDir'src/main/libs'}}

Libray項目

# 修改Android插件:apply plugin:'com.android.library'# settings.gradle新增libray項目:include':app',':library'# app內(nèi)引用library項目:dependencies { ?compile project(':library')}

依賴概念

<待續(xù)>

Android Studio內(nèi)添加依賴

四)構(gòu)建變體

<待續(xù)>

五)多模塊構(gòu)建管理

加速構(gòu)建

在gradle.properties里面添加:org.gradle.parallel=true

六) 測試

單元測試

使用JUnit

# 結(jié)構(gòu):app└─── src├─── main│ ├─── java ? ? │ ? ?│ ? ?└─── com.example.app ? ? │ ? ?└───res ? ? └───test└─── java ? ? ? ? ? ? ? └─── com.example.app# 依賴:dependencies {testCompile'junit:junit:4.12'}

使用Robolectric

# 依賴:applyplugin:'org.robolectric'dependencies {

?? ?compile fileTree(dir:'libs',include:['*.jar'])

?? ?compile'com.android.support:appcompat-v7:22.2.0

'testCompile'junit:junit:4.12'

testCompile'org.robolectric:robolectric:3.0'

testCompile'org.robolectric:shadows-support:3.0'

}

# Demo:@RunWith(RobolectricTestRunner.class)@Config(manifest ="app/src/main/AndroidManifest.xml", sdk =18)publicclassMainActivityTest{@Testpublic void clickingButtonShouldChangeText() {AppCompatActivityactivity =Robolectric.buildActivity(MainActivity.class).create().get();Buttonbutton = (Button) activity.findViewById(R.id.button);TextViewtextView = (TextView) activity.findViewById(R.id.label); ? ? button.performClick(); ? ? assertThat(textView.getText().toString(), equalTo(activity.getString(R.string.hello_robolectric))); } }

功能測試

使用Espresso

<待續(xù)>

測試覆蓋度

使用Jacoco

<待續(xù)>

七)創(chuàng)建任務與插件

<待續(xù)>

八)配置CI

<待續(xù)>

九)自定義配置 - 進階

縮減apk文件大小

使用ProGuard

android { buildTypes { ? ? release { ? ? ? ? minifyEnabledtrueproguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'} } }

收縮資源文件 - 自動 (<手動待續(xù)>)

android { buildTypes { ? ? release { ? ? ? ? minifyEnabledtrueshrinkResourcestrue} } }

加速構(gòu)建

org.gradle.parallel=true# 并行構(gòu)建org.gradle.daemon=true# 開啟Gradle守護進程org.gradle.jvmargs=-Xms256m -Xmx1024m# 配置JVM<參照下圖>

使用Profiling

<待續(xù)>

使用Jack(Java Android Compiler Kit) and Jill(Jack Intermediate Library Linker)

<待續(xù)>

忽略Lint

android { ?lintOptions { ? ? ?abortOnErrorfalse}}

使用Ant

<待續(xù)>

app打包 - 進階

分割apk

android { ?splits { ? ? ?density {enabletrueexclude'ldpi','mdpi'compatibleScreens'normal','large','xlarge'} ?} }生成結(jié)果:app-hdpi-release.apkapp-universal-release.apkapp-xhdpi-release.apkapp-xxhdpi-release.apkapp-xxxhdpi-release.apk

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末黄娘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子兆解,更是在濱河造成了極大的恐慌素挽,老刑警劉巖捌肴,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枪眉,死亡現(xiàn)場離奇詭異,居然都是意外死亡再层,警方通過查閱死者的電腦和手機贸铜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聂受,“玉大人蒿秦,你說我怎么就攤上這事〉凹茫” “怎么了棍鳖?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碗旅。 經(jīng)常有香客問我渡处,道長,這世上最難降的妖魔是什么祟辟? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任医瘫,我火速辦了婚禮,結(jié)果婚禮上旧困,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好窄赋,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布从橘。 她就那樣靜靜地躺著,像睡著了一般拗盒。 火紅的嫁衣襯著肌膚如雪怖竭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天陡蝇,我揣著相機與錄音侵状,去河邊找鬼赞弥。 笑死,一個胖子當著我的面吹牛趣兄,可吹牛的內(nèi)容都是我干的绽左。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼艇潭,長吁一口氣:“原來是場噩夢啊……” “哼拼窥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹋凝,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鲁纠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鳍寂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體改含,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年迄汛,在試婚紗的時候發(fā)現(xiàn)自己被綠了捍壤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞍爱,死狀恐怖鹃觉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睹逃,我是刑警寧澤盗扇,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站沉填,受9級特大地震影響疗隶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翼闹,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一抽减、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橄碾,春花似錦卵沉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拒垃,卻和暖如春停撞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工戈毒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留艰猬,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓埋市,卻偏偏與公主長得像冠桃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子道宅,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

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