您的位置:首页 > 移动开发 > Android开发

Gradle in Android Studio (2) - 配置Gradle

2015-09-14 21:41 441 查看

配置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项目中的
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文件的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/
文件夹中指定的包名。

有关构建文件详细信息,请参阅构建系统概述。

配置签名设置

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
产生单独的文件夹。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: