Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Gradle系列二

Gradle系列二

編輯:關於Android編程

1.Introduction

1.1.gradle構建系統的目標

1)讓重用代碼和資源變得更加容易

2)讓創建同一應用程序的不同版本變得更加容易,無論是多個apk發布版本還是同一個應用的不同定制版本。讓構建過程變得更加容易配置,擴展和定制 1.2.為什麼使用gradle

1)它允許通過插件創建自定義的構建邏輯

2)采用了Domain Specific Language(DSL語言)來描述和控制構建邏輯。

3)構建文件基於Groovy,並且允許通過混合聲明DSL元素和使用代碼來控制DSL元素以控制自定義的構建邏輯。

4)支持Maven或者Ivy的依賴管理。

5)插件可以提供自己的DSL和API以供構建文件使用。 2.Basic Project(基本項目)

2.1.簡單的構建文件
//項目本身需要聲明自己的倉庫和依賴關系
//這裡的配置只影響控制構建過程的代碼,不影響項目源代碼
buildscript {//配置了驅動構建過程的代碼
    repositories {//倉庫
        mavenCentral()//聲明了使用Maven倉庫
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.11.1'//並且聲明了一個maven文件的依賴路徑,包含了1.3.1版本android gradle插件的庫。
    }
}
//
apply plugin: 'android'

//配置了所有android構建過程需要的參數。這裡也是Android DSL的入口點
android {
    compileSdkVersion 19//要配置目標編譯SDK版本
    buildToolsVersion "19.0.0"//編譯工具版本
}

  //設置腳本的運行環境
  buildscript {
       //支持java 依賴庫管理(maven/ivy),用於項目的依賴。
repositories {
          mavenCentral()
      }
      //依賴包的定義。支持maven/ivy,遠程,本地庫,也支持單文件
      dependencies {
          classpath 'com.android.tools.build:gradle:0.4'
      }
  }
  //聲明構建的項目類型,這裡當然是android了
  apply plugin: 'android'
  //設置編譯android項目的參數
  android {
      compileSdkVersion 17
      buildToolsVersion "17"

      defaultConfig {
          minSdkVersion 8
          targetSdkVersion 17
      }
      //Android默認配置
      sourceSets {
          main {
              manifest.srcFile 'AndroidManifest.xml'
              java.srcDirs = ['src']
              resources.srcDirs = ['src']
              aidl.srcDirs = ['src']
              renderscript.srcDirs = ['src']
              res.srcDirs = ['res']
              assets.srcDirs = ['assets']
          }
          //測試所在的路徑,這裡假設是tests文件夾,沒有可以不寫這一行
          instrumentTest.setRoot('tests')
      }

      //這個是解決lint報錯的代碼
      lintOptions {
          abortOnError false
      }
      /**
       * 簽名設置
       */
      signingConfigs {
          myConfigs {
              storeFile file("簽名文件地址")
              keyAlias "..."
              keyPassword "..."
              storePassword "..."
          }
      }
      /**
       * 混淆設置
       */
      buildTypes {
          release {
              signingConfig signingConfigs.myConfigs
              runProguard true
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          }
      }
      /**
       * 渠道打包(不同包名)
       */
      productFlavors {
          qqqq {
              applicationId = '包名'
          }
          hhhhh {
              applicationId='包名'
          }
      }
  }
  /**
   * .so文件的導入
   */
  task copyNativeLibs(type: Copy) {
      from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
  }

  tasks.withType(Compile) {
      options.encoding = "UTF-8"
  }

  tasks.withType(Compile) {
      compileTask -> compileTask.dependsOn copyNativeLibs
  }
  clean.dependsOn 'cleanCopyNativeLibs'
  tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
      pkgTask.jniFolders = [new File(buildDir, 'lib')]
  }
  //依賴庫
  dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  }

-dependencies {
//單文件依賴
compile files(‘libs/android-support-v4.jar’)
//某個文件夾下面全部依賴
compile fileTree(dir: ‘libs’, include: ‘*.jar’)
}

android {

}

 - 2.3遠程依賴
repositories {  
        //從中央庫裡面獲取依賴
    mavenCentral()  
    //或者使用指定的本地maven 庫
    maven{
        url "file://F:/githubrepo/releases"
    }   
    //或者使用指定的遠程maven庫
    maven{
        url "遠程庫地址"
    }
}

dependencies {  
        //應用格式: packageName:artifactId:version
    compile 'com.google.android:support-v4:r13'}

android {

}
3.android library 依賴
3.1.gradle mulit project .aar 3.2.你就會在 build/libs 目錄下看到兩個*.aar文件,一個debug包用的,一個是release 下用的,看個人需求使用,這裡我們用的是release 版本的 .aar 文件
dependencies {
    compile(name: 'pulltorefresh', ext: 'aar')
}
4.
4.1.一個項目可以包括多個工程,gradle可以構建多個工程,每個工程子目錄都可以有build.gradle文件 4.2.build.gradle (Module: app)用來描述如何構建app工程 4.3.settings.gradle:include ‘:app’, ‘:model’, ‘:api’, ‘:core’ 表示當前有4個模塊
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
//為Android的gradle插件指定位置和版本
        classpath 'com.android.tools.build:gradle:1.2.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
//事先對整個構建可能包含的所有工程進行統一的配置
allprojects {
    repositories {
        jcenter()
    }
}
build.
apply plugin: 'com.android.library'

android {
    compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
//defaultConfig元素裡的配置對應AndroidManifest.xml文件,優先級比AndroidManifest.xml文件裡的配置高
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
        versionCode 1
        versionName "1.0"
    }
//buildTypes元素默認定義了debug和release兩種構建
    buildTypes {
//debug構建出來的APK將包含調試符號,並且以debug key進行簽名
        release {//release類型的默認是沒有簽名的
            minifyEnabled false//minifyEnabled為true表示啟用自動清除無用代碼
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//proguardFiles指定了代碼混淆使用的相關文件
        }
    }
}
//指定此工程依賴什麼
dependencies {
//compile這個方法指定要添加什麼來編譯主程序,這些東西將最終被打包進APK中。
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.google.code.gson:gson:2.3'
    compile project(':model')
}
5.Android app/build.gradle。
5.1.buildscript{}:Configures the build script classpath for this project. 說白了就是設置腳本的運行環境 5.2.repositories{}:支持java 依賴庫管理(maven/ivy),用於項目的依賴。這也是gradle 強力的地方.Returns a handler to create repositories which are used for retrieving dependencies and uploading artifacts produced by the project. 5.3.dependencies{}:依賴包的定義。支持maven/ivy,遠程,本地庫,也支持單文件,如果前面定義了repositories{}maven 庫,使用maven的依賴(我沒接觸過ivy。。)的時候只需要按照用類似於com.android.tools.build:gradle:0.4,gradle 就會自動的往遠程庫下載相應的依賴,The dependency handler of this project. The returned dependency handler instance can be used for adding new dependencies. For accessing already declared dependencies, the configurations can be used.。
repositories {
    mavenCentral()  
}   
dependencies {
    classpath 'com.android.tools.build:gradle:1.0.0'
}

說白了就是數據庫和表的關系

5.4.apply plugin: ‘android’:聲明構建的項目類型,這裡當然是android了。。。
5.5.android{}:設置編譯android項目的參數,接下來,我們的構建android項目的所有配置都在這裡完成。

6.補充簡介:

1)Gradle構建腳本(build.gradle)指定了一個項目和它的任務。 2)Gradle屬性文件(gradle.properties)用來配置構建屬性。 3)Gradle設置文件(gradle.settings)對於只有一個項目的構建而言是可選的,如果我們的構建中包含多於一個項目,那麼它就是必須的,因為它描述了哪一個項目參與構建。每一個多項目的構建都必須在項目結構的根目錄中加入一個設置文件。

7.依賴管理:

7.1.倉庫是一種存放依賴的容器 7.2.Gradle支持的倉庫格式:Ivy倉庫/ Maven倉庫/ Flat directory倉庫,更多參考http://blog.jobbole.com/72992/ 7.3.目前只考慮在構建中加入Maven倉庫:
1)我們可以通過URL地址或本地文件系統地址,將Maven倉庫加入到我們的構建中。
2)如果想通過URL地址添加一個Maven倉庫,我們可以將以下代碼片段加入到build.gradle文件中:
repositories {
    maven {
        url "http://maven.petrikainulainen.net/repo"
    }
}

3)如果想通過本地文件系統地址添加一個Maven倉庫,我們可以將以下代碼片段加入到build.gradle文件中:

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

7.4.在加入Maven倉庫時,Gradle提供了三種“別名”供我們使用
**1)**mavenCentral()別名,表示依賴是從Central Maven 2 倉庫中獲取的。
**2)**jcenter()別名,表示依賴是從Bintary’s JCenter Maven 倉庫中獲取的。
3)mavenLocal()別名,表示依賴是從本地的Maven倉庫中獲取的。

8.聲明外部依賴
\
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'//用來編寫單元測試
    compile 'com.android.support:appcompat-v7:23.2.1'
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved