配置Gradle
轉載請註明出處 : 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項目中的module
的build.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
元素控制如何構建和打包應用程序。默認情況下,構建系統定義了兩種版本類型:debug
和release
。debug
類型包括debug標示,並且使用debug key密鑰來進行簽名。release
類型默認情況下沒有簽名。在這個例子中,release
版本使用ProGuard
。dependenceies
元素在android
元素之外,Android的元素之後。此元素爲依賴模塊。後面章節介紹。
注意:當
build.gradle
文件有改動時,Android Studio需要同步構建配置。點擊Android Studio黃色通知欄上的SyncNow
。
聲明依賴
在這個例子中的app
module聲明瞭三個依賴:
...
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文件的Android的部分。
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/
文件夾中指定的包名。
有關構建文件詳細信息,請參閱構建系統概述。
配置簽名設置
debug
和release
版本不同的應用程序是否能夠在安全設備,以及如何將APK進行簽名進行調試。構建系統簽署的調試版本使用已知的憑據,以避免密碼提示在構建時默認密鑰和證書。構建系統沒有簽字的發行版,除非你明確地定義了簽約配置此版本。如果您還沒有release
版本的key,你可以生成一個,參考Signing your Applications。
使用build variants
本節將介紹 構建系統幫助你從一個單一的項目中創建不同的版本。如果你有一個演示版本,有付費版本,你要在Google Paly
針對不同的設備分發多個APK,這個很有用。
構建系統使用 product flavors
來創建的不同的產品版本。您的應用程序的每一個產品版本可以有不同的功能或設備的要求。構建系統還使用build type
構建和打包不同的設置到不同的版本。每個product flavor
和build type
組合形成一個構建變量。編譯系統會生成不同的APK版本。
Build variants
這個例子項目包括兩個默認生成(debug和release)和兩個類型(demo和full)的。要了解有關構建變種高級應用的詳細信息,請參閱構建系統概述。
Product flavors
要創建您的應用程序不同的產品版本:
- 在
build.gradle
文件中定義product flavors
- 爲每個
flavors
添加不同的設置。 - 添加香精的具體來源,您的項目。
...
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每個味道。要創建演示味源目錄結構:
- 在項目面板中,展開
BuildSystemExample
,然後展開應用程序目錄。 - 右鍵單擊src目錄下的應用程序,並選擇 New > Directory.。
創建demo作爲新目錄的名稱,然後單擊確定。
類似地,創建以下目錄:
- app/src/demo/java
- app/src/demo/res
- app/src/demo/res/layout
- app/src/demo/res/values
由此產生的目錄結構如下圖1所示。
添加一個新的活動,各味
要SecondActivity添加到demo
flavors:
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. 拖動SecondActivity
到 app/src/demo/java下。
8. 接受默認值,然後單擊Refactor。
要增加對SecondActivity佈局和一個字符串資源到demo
flavors:
- 從 * app/src/main/res/layout*拖動
activity_second.xml
到app/src/demo/res/layout。 - 接受出現的窗口中的默認值,然後單擊OK。
- 複製的strings.xml從應用程序/ src目錄/主/ RES到應用程序/ src目錄/演示/資源。
- 取代的strings.xml具有以下的新副本的內容:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello_world">Demo version only.</string>
</resources>
現在,通過複製demo的源碼來創建full
flavors:
- 在項目面板中,右鍵點擊下應用程序/ src目錄demo目錄,然後選擇複製。
- 在src /目錄下用鼠標右鍵單擊下的應用程序/然後選擇粘貼。
- 在出現的窗口中,輸入“滿”作爲新的名稱,然後單擊確定。
- 具有下列下的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-specific
Activity
由於香味比活度(SecondActivity)有兩種口味相同的包名稱和活動名稱,你可以從主活動,這是通用於所有的口味啓動它。要修改的主要活動:
- 編輯
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>
- 下面的代碼添加到
MainActivity
的onButton2Clicked
方法:
public void onButton2Clicked(View view) {
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
- 編輯應用程序的
Manifest
文件引用SecondActivity
:
<manifest ...>
<application ...>
...
<activity
android:name="com.buildsystemexample.app.SecondActivity"
android:label="@string/title_activity_second" >
</activity>
</application>
</manifest>
構建類型
構建類型代表每個應用程序包生成編譯包裝的版本。默認情況下,提供了debug
和release
版本的類型。
...
android {
...
defaultConfig { ... }
signingConfigs { ... }
buildTypes { ... }
productFlavors {...}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
}
}
}
...
注:雖然只有
release
類型出現在默認build.gradle
文件,但是每個版本都會生成release
和debug
版本。
在這個例子中,該product flavors
和build types
創建以下build variants
:
- demoDebug
- demoRelease
- fullDebug
- fullRelease
要構建這個例子中,點擊Android Studio中Build菜單選項,或調用命令行的 assemble
任務。
注:* Build > Make Project* 選項編譯自上次編譯修改過整個項目的所有源文件。Build > Rebuild Project選項重新編譯項目中的所有源文件。
每個build variant
產生單獨的文件夾。