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。
声明依赖
在这个例子中的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文件的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添加到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. 拖动
SecondActivity到 app/src/demo/java下。
8. 接受默认值,然后单击Refactor。
要增加对SecondActivity布局和一个字符串资源到
demoflavors:
从 * 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的源码来创建
fullflavors:
在项目面板中,右键点击下应用程序/ 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产生单独的文件夹。
相关文章推荐
- Android Studio 使用第三方类库(加载远程依赖)
- Android JNI机制
- Android-对话框
- Android ViewManger解析 从ViewRoot 源码分析invalidate
- Android View 中invalidate() 你所不知道的那些事
- Gradle in Android Studio (1) - 构建系统概述
- Android中如何获取屏幕的高度和宽度
- PackageManager的使用
- Android获取手机最近任务列表
- android实现沉浸式状态栏
- Android(java)学习笔记250:ContentProvider使用之获得系统联系人信息02(掌握)
- Android——Handler和AsyncTask的使用
- Android--Touch 事件的分发和消费机制
- android学习之路之ListView
- android 分辨率自适应
- Android, 启动活动的最佳写法
- Android, 随时随地退出程序ActivityCollector
- 作业一:android开发平台的演变以及Android Studio设置
- 浅谈Android的三种数据持久化技术之数据库存储
- Android, Activity四种启动模式