build.gradle詳解
簡述:
1 > java開發中有兩個大名鼎鼎的專案構建ANT、Maven。
2 > Google推薦使用的Android Studio是採用Gradle來構建專案的。Gradle是一個非常先進的專案構建工具。Gradle是用了一種基於Groovy的領域特定語言(DSL,Domain Specific Language)來宣告專案設定,摒棄了XML(如ANT和Maven)的各種繁瑣配置。
3 > 專案中一般會出現2個或者多個build.gradle檔案,一個在根目錄下,一個在app目錄下。
如果切換到Android模式下則全部在Gradle Scripts。
系統:Windows 7 64bit
1、根目錄下的build.gradle
1 > repositories閉包,聲明瞭jcenter()的配置
2 > dependencies閉包,聲明瞭一個Gradle外掛
buildscript { repositories { //repositories閉包 google() jcenter() //程式碼託管庫:設定之後可以在專案中輕鬆引用jcenter上的開源專案 } dependencies { //dependencies閉包 classpath 'com.android.tools.build:gradle:3.0.0' ////宣告gradle外掛,外掛版本號為3.0.0 //gradle是一個強大的專案構建工具,不僅可以構建Android,還可以構建java,C++等 //此處引用android的外掛 // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() //程式碼託管庫:設定之後可以在專案中輕鬆引用jcenter上的開源專案 } } task clean(type: Delete) { delete rootProject.buildDir }
2、app 目錄下的build.gradle
1 > apply plugin,宣告是Android應用程式還是庫模組
2 > android 閉包,配置專案構建的各種屬性,compileSdkVersion用於指定專案的編譯SDK版本,buildToolsVersion用於指定專案構建工具的版本。
defaultConfig閉包:預設配置,應用程式包名,最小 sdk 版本,目標 sdk 版本,版本號,版本名
buildTypes閉包:指定生成安裝檔案的配置,是否對程式碼進行混淆
signingConfigs 閉包:簽名信息配置
sourceSets 閉包:原始檔路徑配置
lintOptions 閉包:lint 配置
3 > dependencies 閉包,指定當前專案的所有依賴關係,本地依賴,庫依賴以及遠端依賴
4 > repositories閉包,倉庫配置
// 宣告是Android程式, //com.android.application 表示這是一個應用程式模組,可直接執行 //com.android.library 標識這是一個庫模組,是依附別的應用程式執行 apply plugin: 'com.android.application' android { //程式在編譯的時候會檢查lint,有任何錯誤提示會停止build,我們可以關閉這個開關 lintOptions { //即使報錯也不會停止打包 abortOnError false //打包release版本的時候是否進行檢測 checkReleaseBuilds false } //編譯sdk的版本,也就是API Level,例如API-19、API-20、API-21等等。 compileSdkVersion 26 //build tools的版本,其中包括了打包工具aapt、dx等等。 //這個工具的目錄位於你的sdk目錄/build-tools/下 buildToolsVersion '26.0.2' //關閉Android Studio的PNG合法性檢查 aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false defaultConfig { //預設配置 applicationId "com.hebbe.espressotest" //應用程式的包名 minSdkVersion 22 //最小sdk版本,如果裝置小於這個版本或者大於maxSdkVersion將無法安裝這個應用 targetSdkVersion 26 //目標sdk版本,充分測試過的版本(建議版本) versionCode 1 //版本號,第一版是1,之後每更新一次加1 versionName "1.0" //版本名,顯示給使用者看到的版本號 archivesBaseName = "weshare-$versionName" //指定打包成Jar檔案時候的檔名稱 ndk { moduleName "hebbewifisafe" //設定庫(so)檔名稱 ldLibs "log", "z", "m", "jnigraphics", "android" //引入庫,比如要用到的__android_log_print abiFilters "armeabi", "x86", "armeabi-v7a" //, "x86" 顯示指定支援的ABIs cFlags "-std=c++11 -fexceptions" // C++11 stl "gnustl_static" } //當方法數超過65535(方法的索引使用的是一個short值, //而short最大值是65535)的時候允許打包成多個dex檔案,動態載入dex。這裡面坑很深啊 multiDexEnabled true //Instrumentation單元測試 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } //預設的一些檔案路徑的配置 sourceSets { main { manifest.srcFile 'AndroidManifest.xml'//指定清單檔案 res.srcDirs = ['res']//指定res資源目錄 assets.srcDirs = ['assets'] //asset資源目錄 jni.srcDirs 'src/main/jni' //jni程式碼目錄 jniLibs.srcDir 'src/main/jniLibs' //jni庫目錄 java.srcDirs = ['src']//指定java原始碼目錄 resources.srcDirs = ['src']//指定resource目錄 aidl.srcDirs = ['src']//指定aidl目錄 renderscript.srcDirs = ['src']//指定source目錄 } debug.setRoot('build-types/debug')//指定debug模式的路徑 release.setRoot('build-types/release')//指定release模式的路徑 } //multiDex的一些相關配置,這樣配置可以讓你的編譯速度更快 dexOptions { //讓它不要對Lib做preDexing preDexLibraries = false //開啟incremental dexing,優化編譯效率,這個功能android studio預設是關閉的。 incremental true javaMaxHeapSize "4g" //增加java堆記憶體大小 } signingConfigs {//簽名配置 release {//釋出版簽名配置 storeFile file("fk.keystore")//金鑰檔案路徑 storePassword "123456"//金鑰檔案密碼 keyAlias "fk"//key別名 keyPassword "123456"//key密碼 } debug {//debug版簽名配置 storeFile file("fk.keystore") storePassword "123456" keyAlias "fk" keyPassword "123456" } } //指定生成安裝檔案的配置,常有兩個子包:release,debug,注:直接執行的都是debug安裝檔案 buildTypes { //release版本的配置,即生成正式版安裝檔案的配置 release { zipAlignEnabled true //是否支援zip shrinkResources true // 移除無用的resource檔案 minifyEnabled false //是否對程式碼進行混淆,true表示混淆 //指定混淆時使用的規則檔案; // proguard-android.txt指所有專案通用的混淆規則,proguard-rules.pro當前專案特有的混淆規則 //release的Proguard預設為Module下的proguard-rules.pro檔案 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' debuggable false //是否支援除錯 //ndk的一些配置 ndk { // cFlags "-std=c++11 -fexceptions -O3 -D__RELEASE__" // C++11 // platformVersion = "19" moduleName "hebbewifisafe" //設定庫(so)檔名稱 ldLibs "log", "z", "m", "jnigraphics", "android" //引入庫,比如要用到的__android_log_print abiFilters "armeabi", "x86", "armeabi-v7a"//, "x86" cFlags "-std=c++11 -fexceptions" // C++11 stl "gnustl_static" } //採用動態替換字串的方式生成不同的release.apk applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('release.apk')) { def timeStamp = new Date().format('yyyyMMddHH'); def fileName = "WeShare-${defaultConfig.versionName}" + "-" + timeStamp + "-lj-" + ".apk"; output.outputFile = file("${outputFile.parent}/${fileName}") } } } jniDebuggable false //關閉jni除錯 } debug {//debug版本的配置 minifyEnabled false zipAlignEnabled true shrinkResources true // 移除無用的resource檔案 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' debuggable true // jniDebuggable true ndk { cFlags "-std=c++11 -fexceptions -g -D __DEBUG__" // C++11 } jniDebuggable true } } packagingOptions { exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/MANIFEST.MF' } compileOptions { //在這裡你可以進行 Java 的版本配置, //以便使用對應版本的一些新特性 } productFlavors { //在這裡你可以設定你的產品釋出的一些東西, //比如你現在一共軟體需要釋出到不同渠道, //且不同渠道中的包名不同,那麼可以在此進行配置; //甚至可以設定不同的 AndroidManifest.xml 檔案。 hebbe { } googlePlay { } solo { } } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } //所謂ProductFlavors其實就是可定義的產品特性, //配合 manifest merger 使用的時候就可以達成在一次編譯 //過程中產生多個具有自己特性配置的版本。 //上面這個配置的作用就是,為每個渠道包產生不同的 UMENG_CHANNEL_VALUE 的值。 } //指定當前專案的所有依賴關係:本地依賴、庫依賴、遠端依賴 //本地依賴:可以對本地Jar包或目錄新增依賴關係 //庫依賴:可以對專案中的庫模組新增依賴關係 //遠端依賴:可以對jcenter庫上的開源專案新增依賴 //標準的遠端依賴格式是 域名:組織名:版本號 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) //本地依賴 //遠端依賴,com.android.support是域名部分,appcompat-v7是組名稱,26.1.0是版本號 implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation project(':hello')//庫依賴 testImplementation 'junit:junit:4.12' //宣告測試用列庫 androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } //宣告是要使用谷歌服務框架 apply plugin: 'com.google.gms.google-services' //第三方依賴庫的本地快取路徑 task showMeCache << { configurations.compile.each { println it } } //使用maven倉庫。android有兩個標準的library檔案伺服器,一個jcenter一個maven。兩者毫無關係。 //jcenter有的maven可能沒有,反之亦然。 //如果要使用jcenter的話就把mavenCentral()替換成jcenter() repositories { mavenCentral() }
簡單的例子:
// 宣告是Android程式, //com.android.application 表示這是一個應用程式模組,可直接執行 //com.android.library 標識這是一個庫模組,是依附別的應用程式執行 apply plugin: 'com.android.application' android { //編譯sdk的版本,也就是API Level,例如API-19、API-20、API-21等等。 compileSdkVersion 26 //build tools的版本,其中包括了打包工具aapt、dx等等。 //這個工具的目錄位於你的sdk目錄/build-tools/下 buildToolsVersion '26.0.2' //關閉Android Studio的PNG合法性檢查 aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false defaultConfig { //預設配置 applicationId "com.hebbe.espressotest" //應用程式的包名 minSdkVersion 22 //最小sdk版本,如果裝置小於這個版本或者大於maxSdkVersion將無法安裝這個應用 targetSdkVersion 26 //目標sdk版本,充分測試過的版本(建議版本) versionCode 1 //版本號,第一版是1,之後每更新一次加1 versionName "1.0" //版本名,顯示給使用者看到的版本號 //Instrumentation單元測試 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { //build配置 release { minifyEnabled false //是否對程式碼進行混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } //指定當前專案的所有依賴關係:本地依賴、庫依賴、遠端依賴 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) //本地依賴 //遠端依賴,com.android.support是域名部分,appcompat-v7是組名稱,26.1.0是版本號 implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' //宣告測試用列庫 androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' }
3、聊聊Groovy
Gradle選擇了Groovy。Groovy基於Java並拓展了Java。 Java程式設計師可以無縫切換到使用Groovy開發程式。Groovy說白了就是把寫Java程式變得像寫指令碼一樣簡單。寫完就可以執行,Groovy內部會將其編譯成Javaclass然後啟動虛擬機器來執行。
Groovy是一種動態語言。Groovy對自己的定義是:Groovy是在java平臺上的、 具有像Python, Ruby 和 Smalltalk 語言特性的靈活動態語言, Groovy保證了這些特性像 Java語法一樣被 Java開發者使用。
相關推薦
app目錄下的build.gradle詳解
主要參考自《第一行程式碼》 // 表示這是一個Android程式模組,如果是作為庫,就宣告為Library'com.android.library' apply plugin: 'com.androi
Android Studio中Module的build.gradle詳解
Gradle版本 我們在進行採用AS進行安卓專案的開發時,就必須接觸gradle,它是目前最新潮的一個構建專案的一個系統,而google也與時俱進,用著最新的東西,順便說下,eclipse之前是用Ant來構建專案的,還有一個用的比較多的就是maven。而AS的
build.gradle詳解
簡述: 1 > java開發中有兩個大名鼎鼎的專案構建ANT、Maven。 2 > Google推薦使用的Android Studio是採用Gradle來構建專案的。Gradle是一個非常先進的專案構建工具。 Gradle是用了一種基於Groovy的領域特
gradle中的build script詳解
[toc] gradle中的build script詳解 # 簡介 build.gradle是gradle中非常重要的一個檔案,因為它描述了gradle中可以執行的任務,今天本文將會帶大家體驗一下如何建立一個build.gradle檔案和如何編寫其中的內容。 # project和task gradl
eclipse打包說明 Run as ---Maven build 命令詳解
Goals: clean 清除編譯,compile 編譯,test 編譯並測試,install 打包併發送到本地倉庫,package 只是打成jar包,並不會傳送到本地倉庫 測試: run as maven build.. goals 輸入 clean test 打包: run as
Ubuntu 18.04/18.10上安裝Gradle詳解
Gradle是一個主要用於Java專案的通用構建工具。它結合了Ant和Maven的最佳功能。與使用XML進行指令碼編寫的前輩不同,Gradle使用Groovy,這是一種動態的,面向物件的Java平臺程式語言,用於定義專案和構建指令碼。 前提條件 為了能夠在Ubuntu系統上安裝軟體包,您必須以具有sud
Gradle詳解
先看下Gradle的定義: Gradle是一個基於Apache Ant和Apache Maven概念的專案自動化構建開源工具。它使用一種基於Groovy的特定領域語言(DSL)來宣告專案設定,拋棄了基於XML的各種繁瑣配置。 抽住定義中的核心就是DSL版本的編譯工具,解決XML版本編譯工具的
Ant之build.xml詳解
Ant的概念 可能有些讀者並不連線什麼是Ant以及入可使用它,但只要使用通過Linux系統得讀者,應該知道make這個命令。當編譯Linux核心及一些軟體的源程式時,經常要用這個命令。Make命令其實就是一個專案管理工具,而Ant所實現功能與此類似。像make,gnumake
Android Gradle詳解
瞭解Gradle配置對於我們日常開發太重要了,我們要知道為什麼要這樣配置,這樣配置的優缺點,不能盲目。 一,預設配置 1,defaultConfig是Android物件中預設配置,它是一個ProductFlavor。預設配置有包名,版本號,版本名稱等資訊 android{
Ant之build.xml詳解(有例項)
Ant的概念 可能有些讀者並不連線什麼是Ant以及入可使用它,但只要使用通過Linux系統得讀者,應該知道make這個命令。當編譯Linux核心及一些軟體的源程式時,經常要用這個命令。Make命令其實就是一個專案管理工具,而Ant所實現功能與此類似。像make,gnumake和nmake這些編譯工具都有一
gradle 詳解——你真的瞭解Gradle嗎?
前段時間忽然發現自己對於Android studio的Gradle打包並不瞭解,這篇部落格參考網上眾多教程,為大家詳細介紹Gradle。 Gradle簡介 We would like to intro
Ant之build.xml詳解---可用
Ant的概念 :在Eclipse中使用Ant Ant是Java平臺下非常棒的批處理命令執行程式,能非常方便地自動完成編譯,測試,打包,部署等等一系列任務,大大提高開發效率。 Ant和make命令很像。當編譯Linux核心及一些軟體的源程式時,經常要用這個命令。Make命令其
docker build命令詳解
docker build命令用於根據給定的Dockerfile和上下文以構建Docker映象。 docker build命令的使用格式:docker build [OPTIONS] <PATH | URL | -> 1. 常用選項說明--build-arg,設定
Gradle 詳解
Gradle是當前非常“勁爆”的構建工具。本篇文章就是專為講解Gradle而來。介紹Gradle之前,先說點題外話。 一、題外話 說實話,我在索尼工作的時候,就見過Gradle。但是當時我一直不知道這是什麼東西。而且索尼工具組的工程師還將其和And
深入理解Android(一):Gradle詳解
作者 鄧凡平 編者按:隨著移動裝置硬體能力的提升,Android系統開放的特質開始顯現,各種開發的奇技淫巧、黑科技不斷湧現,InfoQ特聯合《深入理解Android》系列圖書作者鄧凡平,開設深入理解Android專欄,探索Android從框架到應用開
eclipse中java專案的build path詳解
BuildPath中只支援加入jar檔案,具體方法如下: 在eclips裡在工程名上右鍵->build path->contigure bud path->java build path裡有個 libraries-> add external j
Android Gradle 詳解 2016 乾貨
為啥要說Gradle,因為這哥們是在是個坑啊,而且還是繞不開的坑啊。 就像我,上來就一心想著幹程式碼,完成專案,但是往往有的時候就會掉到這個坑裡而無法自拔。實在是恨死了啊。說多了都是眼淚,那麼直接上圖,從簡到難,深入淺出的來了解一下Gradle到底是個什麼東西
gradle 詳解——你真的瞭解Gradle嗎
前段時間忽然發現自己對於Android studio的Gradle打包並不瞭解,這篇部落格參考網上眾多教程,為大家詳細介紹Gradle。 Gradle簡介 We would like to introduce Gradle to you, a build system th
Gradle詳解(二)——Gradle
1 Gradle概述 參考 配置環境 去gradle官網下載gradle程式的壓縮包,解壓到硬碟。 在解壓得到的目錄中找到“gradle.bat”檔案,將其所在路徑(如“E:\gradle-4.2.1\bin”)新增到Windows系統的PATH
build.gradle文件詳解<三>
服務器 mea target rule ttr github -1 ply dot 參考:http://blog.csdn.net/baidu_31093133/article/details/51860637 build.gradle配置參數詳解 //聲