Building Your Project with Gradle
Android Studio打造系统是用于构建,测试,运行和打包的应用程序的工具包。构建系统是独立于Android Studio,这样你就可以从Android Studio或在命令行调用它。当你写你的应用程序时,您可以使用构建系统的功能:
- 自定义,配置和扩展的构建过程。
- 创建多个的APK与使用同一项目不同的功能您的应用程序。
- 重用代码和资源。
在Android Studio生成系统的灵活性可以让您实现这一切,而无需修改你的应用程序的核心项目文件。
构建系统的概述
而Android Studio生成系统由一个Android插件的Gradle , Gradle 是一种先进的编译工具,它管理的依赖关系,并允许您定义自定义生成逻辑。许多软件项目都使用Gradle来管理他们的基础之上。Android的插件Gradle不依赖于Android Studio,尽管Android Studio完全与它集成。这意味着:
- 你可以在命令行上你的机器有关,或者与Android Studio没有安装(如持续集成服务器)的机器建立自己的Android应用程序。
- 您可以从Android Studio中使用相同的自定义生成配置和逻辑,当你在命令行建立为建立自己的Android应用程序。
生成的输出是一样的,不管你是在命令行中建立一个项目,在远程计算机上,或采用Android Studio。
构建配置
生成配置为您的项目定义里面Gradle build files, ,这是使用从Gradle 和Android插件的语法和选项来配置您的构建以下几个方面的纯文本文件:
- Build variants。构建系统可以生成多个具有的APK为同一个项目不同的配置。当你想建立不同版本的应用程序,而不必为每个人单独的项目,这是很有用的。
- Dependencies。构建系统管理项目的依赖,并从本地文件系统和远程存储库支持的依赖。这可以防止你不必搜索,下载和复制二进制包为你的依赖到你的项目目录。
- Manifest entries。构建系统使您可以指定的值在生成配置清单文件中的某些元素。这些新的值将覆盖在manifest文件中的现有值。如果你想生成多个的APK为您的项目中,他们每个人都有不同的包名,最小的SDK版本,或目标SDK版本,这是很有用的。
- Signing。构建系统使您可以指定生成配置签名设置,它可以在生成过程中签署您的APK。
- ProGuard。构建系统使您可以指定一个不同的 ProGuard规则文件的每个版本变种。构建系统可以运行ProGuard的生成过程来混淆你的类。
- Testing。构建系统生成的项目中的测试源测试APK,所以你不必创建一个单独的测试项目。构建系统可以在生成过程中运行测试。
Gradle 构建文件使用 Groovy syntax。 的Groovy是一种动态语言,你可以用它来 定义自定义生成逻辑,并与Android的插件Gradle 提供了Android特有的元素进行交互。
按照惯例建立
而Android Studio生成系统假定system assumes sensible合理的默认值的项目结构和其他编译选项。如果您的项目符合这些约定,你的Groovy构建文件是很简单的。当一些这些公约并不适用于你的项目,构建系统的灵活性,使您可以配置生成过程的几乎每一个方面。例如,如果您的项目的源位于比默认值不同的目录,你可以在构建文件中指定此位置。
项目和模块
一个项目在Android Studio代表一个完整的Android应用程序。Android Studio项目包含一个或多个模块。一个模块是您的应用程序的独立组件,你可以构建,测试或调试。模块包含您的应用程序的源代码和资源。Android的Studio项目包含三种模块:
- Java library modulesJava库模块包含可重用的代码。构建系统生成一个JAR包的Java库模块。
- Android library modules包含可重复使用的Android特有的代码和资源。构建系统产生AAR(安卓归档)包库模块。
- Android application modules Android应用程序模块包含应用程序代码,并可能依赖于库模块,虽然很多Android应用程序只包含一个应用程序的模块。构建系统生成APK包,为应用模块。
Android的Studio项目包含顶级Gradle构建文件,该文件列出了项目中的所有模块,每个模块包含它自己的Gradle构建文件。
依赖关系
而Android Studio生成系统管理项目的依赖和支持模块依赖关系,局部二进制依赖,以及远程二进制依赖。
-
Module Dependencies模块依赖关系
-
一个项目模块可以在构建文件中包括的其它模块的列表它依赖于。当你建立这个模块,构建系统组装,包括所需要的模块。
Local Dependencies 本地依赖性
-
如果你有二进制存档在你的本地文件系统中的一个模块依赖,如JAR文件,你可以在构建文件中该模块声明这些依赖关系。
Remote Dependencies远程依赖性
-
当你的一些依赖关系都可以在一个远程存储库,您不必下载它们,并将它们复制到您的项目。而Android Studio打造的系统支持远程的Maven的依赖关系。的Maven是一个受欢迎的软件项目管理工具,可帮助使用库组织项目的依赖关系。
许多流行的软件库和工具都可以在公共Maven仓库。对于这些依赖关系,你只需要指定其Maven的坐标,它唯一地标识一个远程存储库中的每个元素。在构建系统中使用的Maven坐标的格式是
group:name:version
。例如,Maven的坐标为Google Guava 库16.0.1版本是com.google.guava:guava:16.0.1
。在Maven Central Repository ,广泛用于分发很多库和工具。
建设任务
而Android Studio生成系统定义了一组分层的构建任务:顶级任务调用它们依赖于产生必要的成果的任务。构建系统提供项目任务,以构建您的应用程序和模块的任务,以建立独立的模块。
您可以查看可用的任务列表,并调用Android的工作室,并在命令行的任何任务,如在描述 Build the project in Android Studio ,并和 Build the project from the command line。
The Gradle wrapper
Android的Studio项目包含Gradle wrapper,其中包括:
- 一个JAR文件
- 属性文件
- shell脚本用于Windows平台
- shell脚本用于Mac和Linux平台
注意:您应该提交所有这些文件到您的源代码控制系统。
使用Gradle wrapper(而不是本地Gradle安装),确保您始终运行的Gradle在属性文件中定义的版本。要配置您的项目使用Gradle较新版本,编辑属性文件,并指定新的版本出现。
Android Studio读取你的项目里面的Gradle包装目录下的属性文件,并从该目录运行的包装,这样你就可以无缝地与需要不同版本的Gradle的多个项目工作。
注: Android Studio不使用shell脚本,所以从IDE建设当你给他们的任何更改将无法正常工作。你应该定义你的自定义逻辑里面摇篮构建文件来代替。
您可以运行shell脚本在你的开发机上未安装的Android Studio中的其他机器的命令行构建您的项目。
创造和建立一个Android Studio项目
本章建基于上面提出的概念,并告诉您如何:
- 创建项目和模块。
- 与项目结构工作。
- 编辑构建文件来配置生成过程。
- 生成并运行您的应用程序。
建立在Android Studio项目
要创建在Android Studio一个新的项目:
- 单击 File,然后选择 New Project。
- 在出现的窗口中,输入“BuildSystemExample” 应用程序 名称字段。
- 离开不变的值的其余部分,然后单击下一步。
- 保留默认的图标设置不变,然后单击下一步。
- 选择空白的活动,然后单击下一步。
- 保留默认活动和布局的名称不变,然后单击 Finish(完成)。
图1显示了如何在Android Studio窗口看起来像创建项目后。
项目结构
Android Studio项目包含在默认情况下(app
)。表1列出了在您的应用程序的主要组件均位于该模块内。
Component | Location |
---|---|
Source files | app/src/main/java/<package>/ |
Resource files | app/src/main/res/ |
Manifest file | app/src/main/AndroidManifest.xml |
Build file | app/build.gradle |
当您添加额外的模块到你的项目,每个模块的目录结构类似于表1所示的,取代app
的模块的名称。
添加一个库模块
本节说明如何将一个库模块添加到项目中,以及如何添加这个库作为应用程序模块的依赖关系。
创建一个新的库模块
这是很好的开发实践进行分组功能,您可以重新使用一个库模块中的其他应用程序。要创建一个库模块里面BuildSystemExample
项目:
- 单击File ,然后选择New Module。
- 在出现的窗口中,选择Android Library,然后单击 下一步。
- 保留默认的模块名(
lib
)不变,然后单击 下一步。 - 选择Blank Activity,然后单击下一步。
- 键入“LibActivity1”的Activity Name字段并单击 Finish(完成)。
该项目现在包含两个模块,app序
和lib,每个模块中的一个活动。
Open an activity from a library module
Library modules contain activities 和其他逻辑的一个或多个应用程序模块重用。在这个例子中,MainActivity
该应用模块中打开LibActivity1
从lib模块。要打开LibActivity1
从 MainActivity
:
-
编辑布局文件
MainActivity
中的app模块。这个文件位于app/src/main/res/layout/activity_main.xml
。替换该文件的内容有以下几点:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.buildsystemexample.app.MainActivity"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button1" android:onClick="onButton1Clicked"/> </LinearLayout>
- 在这个布局文件,单击包含该行
,然后按Alt + Enter键。按照从Android Studio中的建议添加一个字符串资源与价值“Open LibActivity1”。android:text="@string/button1"
- 在这个布局文件,单击包含该行
的android:的onClick =“onButton1Clicked”
,然后按Alt + Enter键。按照从Android Studio中的建议,在添加onButton1Clicked
方法MainActivity
。 -
复制下面的代码里面
onButton1Clicked
的方法MainActivity
:public void onButton1Clicked(View view) { Intent intent = new Intent(this, LibActivity1.class); startActivity(intent); }
- 点击
LibActivity1
在里面的第一行onButton1Clicked
的方法MainActivity
,然后按 Alt + Enter键。按照从Android Studio中的建议,增加一个进口LibActivity1
从lib模块。
当用户点击打开LibActivity1按钮MainActivity
(从app模块),LibActivity1
(从lib模块)开始。
添加一个库模块的依赖关系
该app模块现在要看的库
模块,但编译系统不知道这个呢。编辑生成文件的app模块( app/build.gradle
),并添加一个依赖于该lib模块:
... dependencies { ... compile project(":lib") }
该库
模块仍然可以构建和独立测试,并构建系统为它创建一个AAR包,你可以重复使用在其他项目中。
建立在Android的Studio中的项目
要建立在Android Studio中的项目,单击生成,并选择 制作项目。在窗口底部的状态栏显示构建的当前进度:
Gradle: Executing tasks: [:app:assembleDebug, :lib:bundleDebug]
如果你的项目使用的产品的口味,机器人工作室调用任务为选定的构建变量。欲了解更多信息,请参见与构建变种工作。
单击该窗口的右下部分显示摇篮控制台,如图2。
Gradle控制台显示了构建任务和构建系统运行于Android Studio中的子任务。如果编译失败,你可以找到在控制台上的更多细节。若要隐藏 Gradle控制台中,单击一次。
要查看在Android的工作室所有可用的构建任务列表中,单击Gradle 右边的IDE窗口。的摇篮任务,如图3面板出现。双击任意生成任务的Android Studio中运行它。若要隐藏摇篮任务 面板中,单击Gradle了。
建立在命令行项目
要构建从命令行的项目,打开一个终端窗口并导航到项目的根目录。在Windows平台上,键入以下命令:
> gradlew.bat assembleDebug
在Mac OS和Linux平台上,输入以下命令:
$ chmod +x gradlew $ ./gradlew assembleDebug
第一个命令(CHMOD
)增加执行权限的摇篮包装脚本和只需要在第一次通过命令行生成此项目。
的输出gradlew
类似于从图2中的摇篮控制台的输出。
该assembleDebug
生成任务建立你的应用程序,它使用默认的本地证书标志的调试版本,这样您就可以在模拟器和真实的设备上安装它用于调试目的。
当您生成项目时,输出为APK应用程序模块位于
,输出AAR的lib模块位于 app/build/apk/
。lib/build/libs/
要查看您的项目的所有可用的构建任务的列表,请键入以下命令:
$ ./gradlew tasks
建立一个发布版本
您可以通过命令行或采用Android Studio 构建应用程序的发布版本。要通过命令行构建它,调用assembleRelease
使用Gradle包装脚本(生成任务gradlew assembleRelease
)。为了从Android Studio构建它:
- 单击Gradle右侧IDE窗口。
- 在 All tasks section出现的侧边栏部分中,展开 BuildSystemExample。
- 展开:app并双击assembleRelease。
您可以使用此程序从Android Studio调用任何构建任务。
配置构建
本节使用BuildSystemExample
从上一节的项目,并告诉您如何:
- 从构建文件在Android插件Gradle使用的语法。
- 声明依赖。
- 配置ProGuard的设置。
- 配置签名设置。
- 与构建变种工作。
建立文件基础知识
Android的Studio项目包含顶级构建文件和构建文件为每个模块。构建文件被称为build.gradle
,他们都是使用纯文本文件的Groovy语法来配置构建与Android的插件Gradle中提供的元素。在大多数情况下,你只需要在模块级编辑生成文件。例如,在构建文件中的应用程序模块 BuildSystemExample
项目看起来像这样:
apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { release { runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), \ 'proguard-rules.txt' } } } dependencies { compile project(":lib") compile 'com.android.support:appcompat-v7:19.0.1' compile fileTree(dir: 'libs', include: ['*.jar']) }
apply plugin: 'android'的
应用在Android插件摇篮到这个版本。这增加了Android的特定的构建任务,以顶级的构建任务,使android {...}
元素可用于指定Android的特定编译选项。
android {...}
配置所有的Android专用编译选项:
- 该
compileSdkVersion
属性指定编译的目标。 -
该
buildToolsVersion
属性指定要使用什么版本的编译工具。安装多个版本的编译工具,使用SDK管理器。注:请始终使用的主版本号高于或等于你的编译目标和目标的SDK生成工具版本。
-
该
defaultConfig
元素配置在清单文件(核心设置和条目AndroidManifest.xml中
动态地从构建系统)。在值defaultConfig
覆盖在清单文件。在指定的配置
defaultConfig
元素应用到所有构建变种,除非对构建变量的配置会覆盖一些值。 - 该
buildTypes
元素控制如何构建和打包的应用程序。默认情况下,编译系统定义了两种类型的构建:debug and release。调试版本类型包括调试符号,并与调试密钥签名。发布版本类型默认情况下不签署。在这个例子中生成文件配置发行版本使用ProGuard的。
的dependencies
元素是外部和后的android
元素。此元素声明的依赖于此模块。依赖性覆盖在下面的章节。
注意:当您更改项目中的构建文件,Android Studio需要一个项目同步导入生成的配置更改。点击 Sync Now出现的机器人工作室导入的变化黄色的通知栏上。
声明依赖
该应用程序
的模块BuildSystemExample
声明了三个依赖:
... 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']) }
这些依赖关系的描述如下。构建系统将所有的 编译
依赖关系的编译类路径,并将它们包含在最终方案。
模块依赖关系
该应用程序
模块的依赖于库
模块,因为 MainActivity
启动LibActivity1
中所描述 Open an Activity from a Library Module。
compile project(":lib")
声明的依赖关系库
的模块BuildSystemExample
。当你建立的app
模块,构建系统组装,并包括lib模块。
远程二进制依赖
该app和lib模块都使用ActionBarActivity
类从Android的支持库,所以这些模块依赖于它。
compile 'com.android.support:appcompat-v7:19.0.1'“
通过指定的Maven坐标宣布对Android Support Library的19.0.1版本的依赖。而Android Support Library 可在Android Repository包的Android SDK。如果你的SDK安装没有这个包,下载并使用SDK Manage进行安装。
本地二进制依赖
在模块BuildSystemExample
不要使用从本地文件系统中的任何二进制依赖。如果您有需要本地二进制依赖模块,复制JAR文件,这些依赖关系<moduleName>/libs
你的项目里面。
compile fileTree(dir: 'libs', include: ['*.jar'])
告诉构建系统内部的任何JAR文件
是一个依赖,并应包含在编译classpath中,并在最终方案。app/libs
有关在摇篮依赖性的更多信息,请参见 Dependency Management Basics的摇篮用户指南中。
运行ProGuard的
构建系统可以运行 ProGuard的生成过程来混淆你的类。在BuildSystemExample
,修改生成文件的应用程序模块的发布版本运行ProGuard的:
... android { ... buildTypes { release { runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), \ 'proguard-rules.txt' } } } ...
getDefaultProguardFile('PROGUARD-android.txt')
获得从Android SDK安装在默认ProGuard的设置。Android的Studio添加的模块特定的规则文件 PROGUARD-rules.txt
的模块,在这里你可以添加自定义的ProGuard规则的根源。
配置签名设置
调试和应用程序的发布版本不同的应用程序是否可以在安全设备进行调试,并就如何将APK签署。构建系统签署的调试版本使用已知的凭据,以避免密码提示在编译的时候默认的密钥和证书。构建系统不签字的发行版本,除非你明确地定义了签字配置此版本。
签署的发行版本BuildSystemExample
:
-
您释放键复制到根目录下
app
模块(app/
)。这保证了编译系统可以找到你的钥匙,当你移动你的项目的位置,或当你在不同的机器上生成项目。如果你没有释放键,就可以在描述生成一个 Signing your Applications 签名的应用程序。
-
签约的配置添加到生成文件的app模块:
... android { ... defaultConfig { ... } signingConfigs { release { storeFile file("myreleasekey.keystore") storePassword "password" keyAlias "MyReleaseKey" keyPassword "password" } } buildTypes { release { ... signingConfig signingConfigs.release } } } ...
- 调用
assembleRelease
从Android Studio或通过命令行编译任务。
该软件包中的app/build/apk/app-release.apk
现在与你的版本密钥签名。
注:包括密码的构建文件在你释放钥匙和密钥库是不是一个良好的安全习惯。或者,您也可以配置生成文件,以从环境变量获取这些密码或有构建过程提示您输入这些密码。
从环境变量得到这些密码:
storePassword System.getenv("KSTOREPWD") keyPassword System.getenv("KEYPWD")
有构建过程提示你这些密码,如果您在命令行调用编译:
storePassword System.console().readLine("\nKeystore password: ") keyPassword System.console().readLIne("\nKey password: ")
Work with build variants
本节介绍如何构建系统可以帮助您创建不同的版本从单一的项目相同的应用程序。当你有一个演示版本,您的应用程序的付费版本,这是有用的,或者如果您要分发多的APK在谷歌扮演不同的设备配置。
构建系统使用 system uses product 来创建不同版本的应用程序中。每个版本的应用程序可以有不同的功能或设备的要求。构建系统产生不同的APK每个版本的应用程序中。
构建variants
每个版本的应用程序是由一个代表在构建系统build variant。构建变种生成类型和产品风味的配置组合。Android的Studio项目中定义了两个生成类型(debug and release调试和发布)和无香料的产品在默认情况下。这些项目包括两个变种构建,调试和释放,并构建系统生成APK为每个。
行使在本节定义了两个产品的口味,演示和全面。这产生四个构建变量:
- demo-debug
- demo-release
- full-debug
- full-release
- 演示调试
- 演示版本
- 全面调试
- 充分释放
在这种情况下,构建系统创建四个的APK,每一个这些构建变量。
有些项目的特点沿着多个维的复杂组合,但他们仍然表示相同的应用程序。例如,除了具有应用的演示和一个完整的版本,某些游戏可能包含特定于一个特定的CPU / ABI的二进制文件。构建系统的灵活性使得它可以产生这样一个项目下面的生成variants :
-
- x86-demo-debug
- x86-demo-release
- x86-full-debug
- x86-full-release
- arm-demo-debug
- arm-demo-release
- arm-full-debug
- arm-full-release
- mips-demo-debug
- mips-demo-release
- mips-full-debug
- mips-full-release
该项目将包括两个构建类型(debug and release)和两个dimensions 的产品口味,一个用于应用程序类型(演示或全部),一个用于CPU / ABI(X86,ARM或MIPS)。对香味方面的更多信息,请参阅 Gradle Plugin用户指南。
源目录
构建每个版本的应用程序中,构建系统结合了从源代码和资源:
src/main/
- the main source directory (common to all variants)src/<buildType>/
- the build type source directorysrc/<flavorName>/
- the flavor source directory
在构建用于风味源目录的数量取决于你的项目的风味配置:
-
对于不定义任何flavor 项目,构建系统不使用任何味道的源目录。例如,要生成release 构建变量中,没有味道的项目,构建系统使用:
src/main/
src/release/
(build type)
-
For projects that define a set of flavors,构建系统使用一个味源目录。例如,要生成完整的full-debug 构建变量的例子在本节中,构建系统使用:
src/main/
src/debug/
(build type)src/full/
(flavor)
-
对于使用flavor 尺寸项目,构建系统采用每个维度中的一个味源目录。例如,要生成 arm-demo-release构建变量在前面的例子中,构建系统使用:
src/main/
src/release/
(build type)src/demo/
(flavor - app type dimension)src/arm/
(flavor - ABI dimension)
注意:生成类型和风味源目录是可选的,而Android Studio不会为您创建这些目录。构建系统不使用他们,如果他们不存在。
从这些目录中的源代码一起使用来生成一个构建变量的输出。你可以有类具有相同的名称在不同的目录,只要这些目录没有一起使用在同一个变种。行使在本节将向您展示如何在不同的变种创建不同版本的同一个活动类的。
构建系统合并所有货单成一个清单,所以每个构建变量可以在最后舱单定义不同的组件或权限。
构建系统合并从所有的源目录中的所有资源。如果不同的文件夹中包含的资源同名的构建变量,优先顺序如下:生成类型资源覆盖那些从产品的味道,这覆盖资源的主要来源目录。
注:构建变种使您可以在不同版本的应用程序的重用公共活动,应用程序逻辑和资源。
Product flavors in BuildSystemExample 在BuildSystemExample产品口味
要创建不同版本的应用程序中:
- 定义产品口味在构建文件。
- Create additional source directories for each flavor.针对每种口味创建额外的源目录。
- 添加flavor-specific 的具体来源,以您的项目。
本节的其余部分将引导您详细介绍这些步骤使用 BuildSystemExample
项目。你创建的两种口味 BuildSystemExample
应用程序,演示的味道和风味十足。这两种口味份额 MainActivity
,向其中添加一个新的按钮来启动一个新的活动,SecondActivity
。这种新的活动是不同的每一种风格,让你模拟的情况下,新活动将在味十足比在演示的味道更多的功能。在演习结束后,你最终有两个不同的APK,每一个味道。
定义产品口味在构建文件
定义两个产品的口味,编辑生成文件的应用程序模块添加以下配置:
... 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" } } } ...
该产品风味的定义支持相同的属性defaultConfig
元件。被指定为所有口味的基本配置defaultConfig
,并且每种口味可以覆盖任何值。上面构建文件使用applicationId
属性,不同的包名称分配给每种口味:因为每种口味定义创建不同的应用程序,他们每个人都需要一个不同的包名。
注意:要使用分发您的应用程序 Multiple APK Support 在Google Play,分配相同的包名称的所有变种,并给每个变种不同的VERSIONCODE
。分发您的应用程序的不同变种在Google Play单独的应用程序,分配不同的套件名称,每个变种。
添加额外的源目录针对每种口味
现在,创建源文件夹并添加一个SecondActivity
到每个味道。要创建演示味源目录结构:
- 在Project面板中,展开BuildSystemExample,然后展开app目录。
- 右键单击src目录下的应用程序,并选择 New > Directory。
- 进入“演示”作为新目录的名称,然后单击OK(确定)。
-
同样,创建以下目录:
app/src/demo/java
app/src/demo/res
app/src/demo/res/layout
app/src/demo/res/values
生成的目录结构看起来像图5。
添加一个新的活动,每种口味
要添加SecondActivity
到演示
味:
- 在Project面板中,右键单击该上app模块,然后选择 New > Activity。
- 选择Blank Activity,然后单击下一步。
- 输入“SecondActivity”作为活动名称。
- 输入“com.buildsystemexample.app”作为包名,然后单击 Finish(完成)。
- 右键单击java的目录下的应用程序/app/src/demo,并选择 New > Package。
- 输入“com.buildsystemexample.app”作为包名,然后单击OK(确定)。
- 拖动SecondActivity并根据新方案放弃它 app/src/demo/java。
- 接受默认值,然后单击Refactor。
要为布局添加SecondActivity
和一个字符串资源添加到演示味:
- 拖曳activity_second.xml从 app/src/main/res/layout ,然后将其内部 app/src/demo/res/layout。
- 接受在出现的窗口中的默认值,然后单击
OK(确定)
。 - 复制strings.xml中的 app/src/main/res到 应用程序//src/demo/res。
-
更换的新副本的内容
strings.xml中
有以下内容:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello_world">Demo version only.</string> </resources>
现在,添加源文件夹和SecondActivity
使的副本味十足
味:demo
- 在Project 面板中,右键单击演示目录下 的 app/src目录,然后选择复制。
- 在右键单击的src app/并选择 粘贴。
- 在出现的窗口中,输入“full”作为新名称,然后单击OK(确定)。
-
替换的内容的strings.xml下src/full/res/values 以下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello_world">This is the full version!</string> </resources>
注:从这个角度上,你可以开发 SecondActivity
内独立每种口味。您可以在添加更多的功能,以这项activity full的味道。
要对来自特定风味的文件,点击Build Variants 在IDE窗口的左侧,选择您要在修改的味道 Build Variants面板,如图5所示。Android Studio可以从口味显示在源文件中的错误以外的在所选择的所述一个Build Variants面板,但是这并不影响生成的结果。
从
main activity启动a flavor-specific activity
由于flavor-specific activity (SecondActivity
),无论在 flavors相同的包名称和Activity名称,你可以从main Activity,这是共同的所有flavors启动它。要修改的main Activity:
-
编辑
activity_main.xml
并添加一个新按钮,MainActivity
:<LinearLayout ...> ... <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button2" android:onClick="onButton2Clicked"/> </LinearLayout>
- 点击红色标记的区域布局文件,然后按Alt键 + Enter键。按照从Android Studio中的建议添加一个新的字符串资源与价值“打开第二个Activity”和
onButton2Clicked
方法MainActivity
。 -
下面的代码添加到
onButton2Clicked
的方法MainActivity
:public void onButton2Clicked(View view) { Intent intent = new Intent(this, SecondActivity.class); startActivity(intent); }
-
编辑应用程序的清单,包括一个参考
SecondActivity
:<manifest ...> <application ...> ... <activity android:name="com.buildsystemexample.app.SecondActivity" android:label="@string/title_activity_second" > </activity> </application> </manifest>
建立输出
该BuildSystemExample
应用程序现已完成。要构建它,调用assemble
汇编
从Android Studio或通过命令行的任务。
编译生成APK每个构建变量:在
目录中包含一个名为包 app/build/apk/
app-<flavor>-<buildtype>.apk。
; 例如,app-full-release.apk
and app-demo-debug.apk
。
参考
构建系统是非常灵活的,有比这里描述的更多的功能。对于一个完整的参考,请参阅 Android Plugin for Gradle User Guide.。