Gradle in Android Studio (2) - 配置Gradle

配置Gradle

來自AndroidDevelopers

轉載請註明出處 : http://blog.csdn.net/hpu_zyh/article/details/48447255
博客主頁 | 簡書 | 知乎 | 微博 | github

建立基本配置

Android Studio創建的project包含一個頂級構建文件(build.gradle), 並且每個module都包含一個構建文件(build.gradle)。他們是純文本文件,使用Groovy的語法來配置構建,使用Android的Gradle插件生成。在大多數情況下,你只需要修改module下的build.gradle。例如,在BuildSystemExample項目中的modulebuild.gradle如下所示:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile project(":lib")
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

apply plugin: 'com.android.application'表示將Android plugin for Gradle應用到編譯。這增加了Android的特定的構建任務,以頂級的構建任務,使得Android {...}提供給指定的Android特定的構建選項元素。

android {...}配置所有的Android特定的構建選項:

  • compileSdkVersion 用來編譯的sdk的版本。
  • buildToolsVersion 使用什麼版本的編譯工具。使用SDK Manager安裝多個版本的編譯工具。

注:請始終使用其主要版本號 >= 您的編譯目標和目標SDK的構建工具版本。

  • defaultConfig配置的清單文件(AndroidManifest.xml)的一些設置。defaultConfig的配置將覆蓋AndroidManifest.xml中的設置。
    defaultConfig元素指定的配置適用於所有的版本(build variants),除非一個build variants的配置將覆蓋一些值。
  • buildTypes元素控制如何構建和打包應用程序。默認情況下,構建系統定義了兩種版本類型:debugreleasedebug類型包括debug標示,並且使用debug key密鑰來進行簽名。release類型默認情況下沒有簽名。在這個例子中,release版本使用ProGuard
  • dependenceies元素在android元素之外,Android的元素之後。此元素爲依賴模塊。後面章節介紹。

注意:當build.gradle文件有改動時,Android Studio需要同步構建配置。點擊Android Studio黃色通知欄上的SyncNow

這裏寫圖片描述

聲明依賴

在這個例子中的appmodule聲明瞭三個依賴:

...
dependencies {
    // Module dependency
    compile project(":lib")

    // Remote binary dependency
    compile 'com.android.support:appcompat-v7:19.0.1'

    // Local binary dependency
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

每個這些相關性進行說明。構建系統將所有編譯依賴於編譯類路徑,並將它們包含在最終方案。

模塊依賴

app模塊依賴lib模塊, compile project(":lib") 聲明瞭BuildSystemExample對lib模塊的依賴關係。當您生成應用程序模塊,構建系統裝配,包括lib模塊。

遠程庫依賴

app程序和lib模塊從Android支持庫都使用ActionBarActivity類,所以這些模塊依賴於它。
編譯com.android.support:appcompat-v7:19.0.1通過指定的Maven聲明對Android Support Library的19.0.1版本的依賴。 如果你的SDK安裝沒有這個包,下載並使用SDK管理器進行安裝。

AndroidStudio爲默認使用Maven的中央倉庫項目。 (該配置被包括在頂層構建文件)。

本地庫依賴

如果您有需要本地庫依賴模塊,JAR文件,這些依賴關係複製到<moduleName>/libs中。
compile fileTree(dir: 'libs', include: ['*.jar'])告訴構建系統依賴 app/libs的所有JAR文件,應該包含在編譯類路徑,並在最後的封裝。

詳細信息,請參見 Dependency Management Basics用戶指南中。

運行ProGuard

構建系統可以在構建過程中運行ProGuard混淆你的類。在BuildSystemExample,修改生成文件的應用程序模塊運行的ProGuard的發佈版本:

...
android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
...

getDefaultProguardFile('proguard-android.txt')獲得從Android SDK安裝的默認ProGuard的設置。 AndroidStudio 增加了模塊特定的規則文件proguard-rules.pro的模塊,在這裏你可以添加自定義的ProGuard規則的根源。

對包裝標識應用程序ID

構建系統的applicationID屬性是用來唯一標識應用程序包進行發佈。應用程序ID設置在build.gradle文件的Andr​​oid的部分。

 apply plugin: 'com.android.application'

    android {
        compileSdkVersion 19
        buildToolsVersion "19.1"

    defaultConfig {
        applicationId "com.example.my.app"
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    ...

注意:的applicationID僅指定在build.gradle文件,而不是在AndroidManifest.xml文件。

當使用build variants,構建系統爲每個product flavors指定的build types生成不同的後綴ID。
“`
productFlavors {
pro {
applicationId = “com.example.my.pkg.pro”
}
free {
applicationId = “com.example.my.pkg.free”
}
}

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

“`

包名必須在manifest文件中指定。這是用在你的源代碼來引用您的R文件,並解決任何相關activity service的註冊。

 package="com.example.app">

注意:如果有多個清單(例如,product flavors爲某個build type配置了不同的manifest),包名是可選的體現。如果在這些清單規定,包的名稱必須與在清單在src/main/文件夾中指定的包名。

有關構建文件詳細信息,請參閱構建系統概述。

配置簽名設置

debugrelease版本不同的應用程序是否能夠在安全設備,以及如何將APK進行簽名進行調試。構建系統簽署的調試版本使用已知的憑據,以避免密碼提示在構建時默認密鑰和證書。構建系統沒有簽字的發行版,除非你明確地定義了簽約配置此版本。如果您還沒有release版本的key,你可以生成一個,參考Signing your Applications

使用build variants

本節將介紹 構建系統幫助你從一個單一的項目中創建不同的版本。如果你有一個演示版本,有付費版本,你要在Google Paly針對不同的設備分發多個APK,這個很有用。

構建系統使用 product flavors來創建的不同的產品版本。您的應用程序的每一個產品版本可以有不同的功能或設備的要求。構建系統還使用build type構建和打包不同的設置到不同的版本。每個product flavorbuild type組合形成一個構建變量。編譯系統會生成不同的APK版本。

Build variants

這個例子項目包括兩個默認生成(debug和release)和兩個類型(demo和full)的。要了解有關構建變種高級應用的詳細信息,請參閱構建系統概述。

Product flavors

要創建您的應用程序不同的產品版本:

  1. build.gradle文件中定義product flavors
  2. 爲每個flavors添加不同的設置。
  3. 添加香精的具體來源,您的項目。
...
android {
    ...
    defaultConfig { ... }
    signingConfigs { ... }
    buildTypes { ... }
    productFlavors {
        demo {
            applicationId "com.buildsystemexample.app.demo"
            versionName "1.0-demo"
        }
        full {
            applicationId "com.buildsystemexample.app.full"
            versionName "1.0-full"
        }
    }
}
...

注意:要在多APK支持分發您的應用程序到Google Play,分配相同的包名稱爲所有變體,並給每個變體的不同VERSIONCODE。要分發您的應用程序在谷歌播放單獨的應用程序的不同變種,指定不同的包名給每個變量。

針對每個flavor添加其他目錄

現在,您創建源文件夾,並添加一個SecondActivity每個味道。要創建演示味源目錄結構:

  1. 在項目面板中,展開BuildSystemExample,然後展開應用程序目錄。
  2. 右鍵單擊src目錄下的應用程序,並選擇 New > Directory.。
    創建demo作爲新目錄的名稱,然後單擊確定。
    類似地,創建以下目錄:
    • app/src/demo/java
    • app/src/demo/res
    • app/src/demo/res/layout
    • app/src/demo/res/values
      由此產生的目錄結構如下圖1所示。
      這裏寫圖片描述

添加一個新的活動,各味

要SecondActivity添加到demoflavors:
1. 創建一個新的Activity。
2. 選擇Blank Activity,然後單擊Next
3. 輸入SecondActivity作爲該Activity的名稱。
4. 輸入com.buildsystemexample.app作爲包名,然後單擊Finish
5. 右鍵單擊app/src/demo的java目錄,並選擇New> Package
6. 輸入com.buildsystemexample.app作爲包名,然後單擊OK
7. 拖動SecondActivityapp/src/demo/java下。
8. 接受默認值,然後單擊Refactor
要增加對SecondActivity佈局和一個字符串資源到demo flavors:

  1. 從 * app/src/main/res/layout*拖動activity_second.xmlapp/src/demo/res/layout
  2. 接受出現的窗口中的默認值,然後單擊OK
  3. 複製的strings.xml從應用程序/ src目錄/主/ RES到應用程序/ src目錄/演示/資源。
  4. 取代的strings.xml具有以下的新副本的內容:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello_world">Demo version only.</string>
</resources>

現在,通過複製demo的源碼來創建full flavors:

  1. 在項目面板中,右鍵點擊下應用程序/ src目錄demo目錄,然後選擇複製。
  2. 在src /目錄下用鼠標右鍵單擊下的應用程序/然後選擇粘貼。
  3. 在出現的窗口中,輸入“滿”作爲新的名稱,然後單擊確定。
  4. 具有下列下的src /全速/ RES /值替換strings.xml中的內容:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello_world">This is the full version!</string>
</resources>

注:從這一點上,可以獨立開發SecondActivity內部各的味道。例如,你可以在韻味十足的增加更多的功能到這個活動。

檢查設置的product flavors生效,打開Android studio的Build Variants面板,如下圖
這裏寫圖片描述

圖2.構建變體面板。

MainActivity啓動一個flavor-specificActivity

由於香味比活度(SecondActivity)有兩種口味相同的包名稱和活動名稱,你可以從主活動,這是通用於所有的口味啓動它。要修改的主要活動:

  1. 編輯activity_main.xml並添加一個按鈕:
<LinearLayout ...>
    ...
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button2"
        android:onClick="onButton2Clicked"/>
</LinearLayout>
  1. 下面的代碼添加到MainActivityonButton2Clicked方法:
public void onButton2Clicked(View view) {
    Intent intent = new Intent(this, SecondActivity.class);
    startActivity(intent);
}
  1. 編輯應用程序的Manifest文件引用SecondActivity
<manifest ...>
    <application ...>
        ...
        <activity
            android:name="com.buildsystemexample.app.SecondActivity"
            android:label="@string/title_activity_second" >
        </activity>
    </application>
</manifest>

構建類型

構建類型代表每個應用程序包生成編譯包裝的版本。默認情況下,提供了debugrelease版本的類型。

...
android {
    ...
    defaultConfig { ... }
    signingConfigs { ... }
    buildTypes { ... }
    productFlavors {...}
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
         debug {
            debuggable true
        }
    }
}
...

注:雖然只有release類型出現在默認build.gradle文件,但是每個版本都會生成releasedebug版本。

在這個例子中,該product flavorsbuild types創建以下build variants
- demoDebug
- demoRelease
- fullDebug
- fullRelease

要構建這個例子中,點擊Android Studio中Build菜單選項,或調用命令行的 assemble任務。

注:* Build > Make Project* 選項編譯自上次編譯修改過整個項目的所有源文件。Build > Rebuild Project選項重新編譯項目中的所有源文件。

每個build variant產生單獨的文件夾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章