4.1、Android Stuido配置你的Build Variant
每个版本的build variant代表了你可以构建的每一个版本。虽然你未直接配置build variants,你可以通过配置build type和product flavor。
比如,一个demo的product flavor可以声明不同的特性和设备需求,比如自定义源码,资源和最小的API。但是debug的build type却有不同构建和打包设置,比如调试选项和签名文件。
配置Build Types
你可以在模块的build.gradle文件里的android{}区块中来创建和配置构建类型。当你创建一个新的模块的时候,Android Studio自动为你创建debug和release。虽然debug构建类型不出现在构建配置文件中,Android Studio通过debuggable true来配置。这会允许你在一个安全的Android设备中调试app,并且使用一个通用的debug的keystore对APK进行签名。
如果你想添加或更高确定的设置,你可以添加debug构建类型到你的配置中。接下来的例子声明为debug构建类型声明了一个applicationIdSuffix。并且配置一个jnidebug构建类型,设置其根据debug构建类型进行初始化。
android {
...
defaultConfig {...}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
applicationIdSuffix ".debug"
}
/**
* The 'initWith' property allows you to copy configurations from other build types,
* so you don't have to configure one from the beginning. You can then configure
* just the settings you want to change. The following line initializes
* 'jnidebug' using the debug build type, and changes only the
* applicationIdSuffix and versionNameSuffix settings.
*/
jnidebug {
// This copies the debuggable attribute and debug signing configurations.
initWith debug
applicationIdSuffix ".jnidebug"
jniDebuggable true
}
}
}
配置Product Flavor
创建product flavor跟创建构建类型相同:将其添加到productFlavors{}区块中,并且配置你需要的设置。Product flavors支持defaultConfit,这是因为defaultConfig属于ProfuctFlavor类。这就意味着你可以为所有的Flavors在defaultConfig{}提供基本的配置。每个flavor可以复写任何这些默认值。比如applicationId。
注意:你仍然需要在manifest文件中的package属性中来声明包名。
以下是一个代码示例,创建一个demo和full的product flavor,并设置了他们自己的applicationId和versionName。
android {
...
defaultConfig {...}
buildTypes {...}
productFlavors {
demo {
applicationId "com.example.myapp.demo"
versionName "1.0-demo"
}
full {
applicationId "com.example.myapp.full"
versionName "1.0-full"
}
}
}
在你创建和配置你的product flavor之后,点击消息提示条中出现的Sync Now按钮。在同步完成后,Gradle根据你的构建类型和product flavor自动创建build variants,并且用<product-flavor>。比如,如果你创建demo和full两个product flavor,并且保持debug和release为默认,Gradle则会创建以下build variants:
1、 demoDebug
2、 demoRelease
3、 fullDebug
4、 fullRelease
为Build Variants创建Source Sets
默认情况下,Android Studio创建main/ source set和目录在所有的build variants中共享。然而,你可以创建新的source sets来控制Gradle编译和特定的build types,product flavors和build variants。例如,你可以在main/ source set中定义基本的功能,使用product flavor source sets来改变你的app的东西,包括权限和日志等。
Gradle希望你通过确定的方式来组织source set文件和目录。
Android的Gradle插件提供了一个非常有用的Gradle 任务来显示你如何为乜咯build type,product flavor和build variants来组织你的文件。比如,以下的报告部分描述了Gradle希望找到debug 的build type的特定的文件:
------------------------------------------------------------
Project :app
debug
Compile configuration: compile
build.gradle name: android.sourceSets.debug
Java sources: [app/src/debug/java]
Manifest file: app/src/debug/AndroidManifest.xml
Android resources: [app/src/debug/res]
Assets: [app/src/debug/assets]
AIDL sources: [app/src/debug/aidl]
RenderScript sources: [app/src/debug/rs]
JNI sources: [app/src/debug/jni]
JNI libraries: [app/src/debug/jniLibs]
Java-style resources: [app/src/debug/resources]
为了生成和查看你的构建配置的报告,遵循如下:
1、 点击右面的IDE窗口
2、 找到MyApplication > Tasks > android,双击sourceSets
3、 查看报告,点击IDE窗口底部的Gradle Console
当你创建一个新的build variant,Android Studio不会为你创建一个source set 目录,但是会给你一些选项来帮助你。比如,为你的debug构建类型创建java/目录:
1、 打开项目面板,选择Project视图
2、 找到MyProject/app/src
3、 右键单击src目录,选择New > Folder > Java Folder
4、 在下拉中找到Target Source Set,选择debug
5、 点击Finish
Android Studio为你的debug构建类型创建一个source set目录,然后创建一个java/目录到里面。你同样可以让Android Studio为特定的build variant创建的新的文件来创建相应的目录。比如,为你的debug构建类型创建一个values XML文件:
1、 在Project面板中,右键单击src目录,选择New > XML > Values XML File
2、 输入XML文件名字,或者保持默认。
3、 在下拉中找到Target Source Set,选择debug
4、 点击Finish
因为debug构建类型是针对特定的source set,Android Studio在创建XML文件时自动创建必要的目录。如图:
本文作者:宋志辉
个人微博:点击进入
4.1、Android Stuido配置你的Build Variant的更多相关文章
- Android Gradle 技巧之一: Build Variant 相关
Build Variant android gradle 插件,允许对最终的包以多个维度进行组合. BuildVariant = ProductFlavor x BuildType 两个维度 最常见的 ...
- Eclipse项目导入Android Stuio 配置出现 Timeout waiting to lock buildscript class cache for build file 'H:\studioproject\Generic_SN\build.gradle'
Eclipse项目导入Android Stuio 配置出现 Error:Timeout waiting to lock buildscript class cache for build file ...
- [Android] 环境配置之正式版Android Studio 1.0
昨天看见 Android Studio 1.0 正式版本发布了:心里挺高兴的. 算是忠实用户了吧,从去年开发者大会一开始出现 AS 后就开始使用了:也是从那时开始就基本没有用过 Eclipse 了:一 ...
- Android Studio配置Git及Git文件状态说明
Android Studio配置Git还是比较简单的,麻烦的是可能中间出现各种问题.如果你想了解或感兴趣,请往下看. 首先你得下载Git客户端,网址:http://git-scm.com/downlo ...
- Android Studio配置Dagger2 以及butterknife
一.配置butterknife 在build.gradle(Module)文件中的dependencies模块添加: dependencies { // add butterknife compile ...
- Android(java)学习笔记127:Android Studio新建工程中的build.gradle、settings.gradle
随着信息化的快速发展,IT项目变得越来越复杂,通常都是由多个子系统共同协作完成.对于这种多系统.多项目的情况,很多构建工具都已经提供了不错的支持,像maven.ant.Gradle除了借鉴了ant或者 ...
- Android Studio 配置SVN实现代码管理
Refference From:http://iaiai.iteye.com/blog/2267346 一.Android Studio配置SVN Android Studio关联配置SVN很简单,在 ...
- Android studio 配置JNI环境
Android studio配置jni开发环境,主要配置是两个build文件,以及新建一个jni文件,放c代码. 代码如下1: apply plugin: 'com.android.model.app ...
- Android Gradle配置
解决问题 错误: Could not find the AndroidManifest.xml file, going up from path //打开app build.gradle文件加入以下代 ...
随机推荐
- 【HDU 2669】Romantic
Problem Description The Sky is Sprite.The Birds is Fly in the Sky.The Wind is Wonderful.Blew Throw t ...
- [ HOJ 2713]Matrix1[网络流] 最大点权独立集问题
题目大意: 一个 N*M 的网格,每个单元都有一块价值 Cij 的宝石.问最多能取多少价值的宝石且任意两块宝石不相邻.(1 <= N, M <= 50, 0 <= Cij <= ...
- BZOJ3065(替罪羊树套线段树)
以前看到这题都瑟瑟发抖,终于过了心情舒畅. 按下标为关键字建替罪羊树,每个结点开一个权值线段树,维护的这个结点代表的子树的信息. 这题还得垃圾回收,自己yy的,不知对不对.. #include < ...
- C++ 中私有继承、保护继承与公有继承
区别 下面通过一个示例来介绍三种继承的区别. 定义一个基类(假设为一个快退休的富豪): class RichMan { public: RichMan(); ~RichMan(); int m_com ...
- 深入理解final关键字
在了解了final关键字的基本用法之后,这一节我们来看一下final关键字容易混淆的地方. 1.类的final变量和普通变量有什么区别? 当用final作用于类的成员变量时,成员变量(注意是类的成员变 ...
- # electron-vue 尝试做个网易云音乐
当跑起来electron第一刻 我发现这个浏览器头是不是有点丑 是不是可以隐藏起来呢,答案当然是可以的 src/main/index.js mainWindow = new BrowserWindow ...
- centos 6安装 H3C iNode 上网客户端
我的安装目录是/usr/iNode 直接把客户端安装包拷到这个文件夹下然后解压: #rar x iNode2.-R0162.rar 然后进入文件夹,里边有一个install.sh文件,这是一个安装文件 ...
- Flume 读取RabbitMq消息队列消息,并将消息写入kafka
首先是关于flume的基础介绍 组件名称 功能介绍 Agent代理 使用JVM 运行Flume.每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks. Client ...
- Hibernate异常之cascade
org.hibernate.MappingException: Unsupported cascade style: delete-option at org.hibernate.engine.spi ...
- PHP 5 Timezones
PHP 支持的时区 下面是 PHP 支持的时区的完整列表,这些对一些 PHP 日期函数很有用. 非洲 美洲 南极洲 北冰洋 亚洲 大西洋 大洋洲 欧洲 印度洋 太平洋 非洲 Africa/Abidja ...