#配置Gradle
转载请注明出处 : https://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
如下所示:
1 | apply plugin: 'com.android.application' |
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声明了三个依赖:
1 | ... |
每个这些相关性进行说明。构建系统将所有编译依赖于编译类路径,并将它们包含在最终方案。
###模块依赖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的发布版本:
1 | ... |
getDefaultProguardFile('proguard-android.txt')
获得从Android SDK安装的默认ProGuard的设置。 AndroidStudio 增加了模块特定的规则文件proguard-rules.pro的模块,在这里你可以添加自定义的ProGuard规则的根源。
##对包装标识应用程序ID
构建系统的applicationID
属性是用来唯一标识应用程序包进行发布。应用程序ID设置在build.gradle文件的Android的部分。
1 | apply plugin: 'com.android.application' |
注意:的applicationID仅指定在build.gradle文件,而不是在AndroidManifest.xml文件。
当使用 build variants
,构建系统为每个product flavors
指定的build types生成不同的后缀ID。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16productFlavors {
pro {
applicationId = "com.example.my.pkg.pro"
}
free {
applicationId = "com.example.my.pkg.free"
}
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
....
包名必须在manifest文件中指定。这是用在你的源代码来引用您的R
文件,并解决任何相关activity
service
的注册。
1 | 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
添加不同的设置。 - 添加香精的具体来源,您的项目。
1 | ... |
注意:要在多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:
创建一个新的Activity。
选择Blank Activity,然后单击Next。
输入
SecondActivity
作为该Activity的名称。输入
com.buildsystemexample.app
作为包名,然后单击Finish。右键单击app/src/demo的java目录,并选择New> Package。
输入
com.buildsystemexample.app
作为包名,然后单击OK。拖动
SecondActivity
到 app/src/demo/java下。接受默认值,然后单击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具有以下的新副本的内容:
1
2
3
4<?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中的内容:
1
2
3
4<?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
并添加一个按钮:1
2
3
4
5
6
7
8
9<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
方法:1
2
3
4public void onButton2Clicked(View view) {
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
} - 编辑应用程序的
Manifest
文件引用SecondActivity
:1
2
3
4
5
6
7
8
9<manifest ...>
<application ...>
...
<activity
android:name="com.buildsystemexample.app.SecondActivity"
android:label="@string/title_activity_second" >
</activity>
</application>
</manifest>
####构建类型
构建类型代表每个应用程序包生成编译包装的版本。默认情况下,提供了debug
和release
版本的类型。
1 | ... |
注:虽然只有
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
产生单独的文件夹。