gradle學習記錄

一、概念


什麼是gradle

1、獨立項目,和Google無關
2、Grdle基於Groovy。(Maven、Ant基於xml)
3、Gradle兼容Maven、Ant
4、Gradle 的推出主要以 Java 應用爲主,當然還支持 Android、C、C++等。

那麼我們平時在AS中使用的Gradle是什麼呢,其實那就是一個Gradle插件


二、命令


如下是使用gradle中使用的幾個命令,如果是本地使用可以使用的到,如果是在AS上就由AS來自動使用

  • assemble:對所有的 buildType 生成 apk 包。
  • clean:移除所有的編譯輸出文件,比如apk
  • check:執行lint檢測編譯。
  • build:同時執行assemblecheck命令

三、目錄


下面看一下在AS中的目錄結構


1、第一個是gradle文件夾,其中包含一個gradle-wrapper.jar和一個gradle-wrapper.properties,其中jar是做低版本兼容用的,properties文件中有該gradle的版本號

2、下面來看一個工程下的build.gradle
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}
內容主要包含了兩個方面:一個是聲明倉庫的源,這裏可以看到是指明的jcenter(), 之前版本則是mavenCentral(), jcenter可以理解成是一個新的中央遠程倉庫,兼容maven中心倉庫,而且性能更優。另一個是聲明瞭android gradle plugin的版本,android studio 1.0正式版必須要求支持gradle plugin 1.0的版本。

3、下面來看一個Moudle下的build.gradle
// com.android.application 說明了這是一個項目
// 如果是作爲庫的module 是 apply plugin: 'com.android.library'
apply plugin: 'com.android.application'

// android 相關 構建參數
android {

    compileSdkVersion 23    // 編譯使用SDK版本
    buildToolsVersion "23.0.3"   // 編譯工具的版本   buildTools

    defaultConfig {
        applicationId "com.am.gradletest"  // 用於標識的包名
        minSdkVersion 14   // sdk最低支持版本
        targetSdkVersion 23  //  目標SDK版本,如果目標設備的API版本正好等於此數值,就不會爲此程序開啓兼容性檢查判斷的工作
        versionCode 1   //版本號
        versionName "1.0"
    }

    // 編譯類型
    // 下面 聲明瞭 debug 和 release 兩種類型,名字隨意
    buildTypes {
        // release 發佈 ,release裏面是關於發佈的配置
        release {
            minifyEnabled false  // minifyEnabled 是否開啓混淆,false不開啓
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 混淆文件
        }

        // debug(不作爲發佈版)時候的配置,這個debug的代碼塊默認不帶,這裏是手動加的
        debug{

        }

    }
}

// 依賴 三種依賴,第一種是本地的jar,第二種是本地的module庫,第三種是利用gradle遠程的依賴管理
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar']) // 這句代碼會自動依賴本地的所有jar,就不要逐個依賴了
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}
文件開頭apply plugin是最新gradle版本的寫法。buildToolsVersion這個需要你本地安裝該版本才行,很多人導入新的第三方庫,失敗的原因之一是build version的版本不對,這個可以手動更改成你本地已有的版本或者打開 SDK Manager 去下載對應版本。applicationId代表應用的包名,也是最新的寫法,這裏就不在多說了。

4、local.properties
Android studio 自動生成,用於配置本地的 SDK、NDK 路徑。
因爲這是針對設備的設置,不同的設備SDK路徑不一定一樣。

5、setting.gradle
這個是用來配置模塊的,程序最開始的時候要先執行到這裏,看看有哪幾個模塊,然後分別進行編譯
就是在初始化時,讀取setting.gradle中的項目配置,來確定編譯的工程,通過每個工程中的build.gradle來確定編譯的任務,而這些任務是由對應的plugin來決定的,比如 'com.android.application'插件決定編譯成apk,而'com.android.library'插件決定項目編譯成.aar庫文件等。


四、原理


Gradle中,每一個待編譯的工程都叫一個Project。每一個Project在構建的時候都包含一系列的Task。比如一個Android APK的編譯可能包含:Java源碼編譯Task、資源編譯Task、JNI編譯Task、lint檢查Task、打包生成APK的Task、簽名Task等。一個具體的編譯過程是由一個一個的Task來定義和執行的。

Gradle的生命週期

1. Initialization -初始化階段

2. Configuration -配置階段

3. Execution -執行階段

如下是構建過程


1. 編譯器將您的源代碼轉換成 DEX(Dalvik Executable)文件(其中包括運行在Android設備上的字節碼),將所有其他內容轉換成已編譯資源。

2. APK 打包器將 DEX文件和已編譯資源合併成單個APK。不過,必須先簽署APK,才能將應用安裝並部署到Android設備上。

3. APK 打包器使用調試或發佈密鑰庫簽署您的APK







尊重作者,尊重原創,參考文章:

http://blog.csdn.net/a_ycmbc/article/details/53924734
https://segmentfault.com/a/1190000002439306
http://www.jianshu.com/p/01281d1c3384
http://www.jianshu.com/p/9df3c3b6067a


發佈了228 篇原創文章 · 獲贊 45 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章