这篇教程是根据官方的gradle视频教程整理出来的。
https://classroom.udacity.com/
这里有很多google官方做的视频教程。
自从遗弃了eclipse,猛追as以后,出现一个gradle。对于彩笔的我,gradle是个鸟玩意。完全不懂。相信玩转gradle的人也不多。好在用as创建项目,as会做好默认gradle的脚本,如下:
虽然不懂gradle,但是随便一篇基础的android gradle教程就可以了。然而,随着项目的壮大,在app.gradle这个脚本里出现了各种各样的没见过问题,然后各种google,各种总结,各种不知道为什么。
如果你更深入的和一个人打交道,哪么,你首先要做的就是去了解这个人。开始吧!在app.gradle脚本里android节点下,compileSdkVersion、buildToolsVersion、defaultConfig的基本设置很显而易见。我们来了解一下buildTypes。
buildTypes
buildTypes 构建类型,一般可以分为debug(主要用于开发阶段)和release(生产发布阶段)
在debug或release还可以结合一些特定的产品风格,例如应用的免费版或付费版。(也就是说,如果你的应用需要有免费版和付费版,可能你首先想到的是做两个项目,一个免费版的项目和一个付费版的项目。但是如果你知道了产品风格这个东西,就会懂了,可以在一个项目里搞定,只需要在把区别代码放入对应的两个风格源里。后面会讲到。)
我们以release设置为例,来了解节点下的一些配置:
1. minifyEnabled false/true 设置是否使用优化打包
2. proguardFiles 设置proguard文件(用于混淆代码)Resource Merging 资源整合
android gradle 可以允许你自定义的行为,可以创建各来源组的整体轮转,依赖于你正建构的变种,它将合并各来源。需要注意的是,有位于来源主要部分的主要来源组(src/main结构目录),这是目前为止我们一直存放我们所有代码的地方。此外,每个产品风格都有一个来源组(如图,src/free、paid、debug、release等)。
举个例子(参照上图结构):
假如我们有一个免费的和一个付费的产品风格。每个构建类型还有一个来源组,在这种情况下调试和发布。最后,每个最终变种还有一个来源,分别对应来源 free Debug、free Release、paid Debug、paid Release四个来源。如果有在付费风格而非免费风格中需要的来源和资源,可以将其放入付费来源;同样,如果有在调试风格而非发布风格中的来源和资源,可以将其放入调试来源。
风格定制
上面讲到的产品风格(免费版、付费版),不是放在buildTypes中,需要放在同级的productFlavors中。
产品风格如何编写呢,请看下图:
gradle同步后,在as的左下角的build variants窗体中看到生成的变体,如图:
这些不同的风格实际上并不会执行任何不同的操作。默认情况下,主源(src/main)集中的源和资源包包括在所有应用变种中。但是,如果我们声明其他风格,Android插件会自动为我们创建新的源集。所以,如果我们要包括专用于付费版本的代码,则可以有源付费Java代码和源付费资源。同样的,也可以有源免费Java代码和源免费资源。Gradle构建每个应用变种时,会自动打包每个风格特定的文件中的其他源。
你也可以在不同风格中设置defaultConfig。
/*免费版风格 的 应用*/
free {
applicationId "com.zrb.gradletest.free"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
依据版本的依赖关系配置
Android gradle 插件可以为每个构建变种创建一组配置。这允许我们为我们的每个变种独立地管理依赖性。以此,我们将有通常的编译和运行时配置。箭头表示扩展关系(运行时配置可扩展编译配置)
免费的运行时配置可扩展免费的编译配置,而且免费编译配置扩展默认编译配置。这就意味着免费变化将包括所有的默认依赖性,和免费配置的依赖性,但是不包括付费配置的依赖性。
设置版本依赖关系:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
freeCompile 'com.android.support:appcompat-v7:23.1.1'
}
应用签名
对应用签名,需要3个步骤:1 创建密钥库和密钥;在as菜单栏点击Build,选择Generate Signed APK 进行创建。
2 在build.gradle中创建登录配置;在Project Structure中的Signing进行设置
填写确定后,build.gradle会自动更新,并生成signingConfigs配置脚本。
3 将登录配置赋给某个构建类型;还在Project Structure中,如图操作
确定后,会在build.gradle中的相应构建类型中生成签名指向,如下图:
Multidex支持
有的人可能会遇到这样的问题,当项目的方法数大于65k时,这些方法不能集成到一个dex中,这里就需要经行Multidex配置了。在build.gradle的defaultConfig节点下添加 multiDexEnable true。
配置Proguard
Android插件可以通过去除不使用的代码和资源来缩小应用的大小。它借助一个称为Proguard的工具来执行此操作。Proguard可以执行许多有趣的工作,包括通过你的类和方法提供无意义的名称来混淆你的代码。但是,这主要在你确实担心代码被反向工程时有意义。出于我们的目的,我们希望在构建类型上配置的属性是 minifyEnabled 和 shrinkResources.我们已经声明了对Google移动服务库的依赖性,但是我们其实并没有使用这个库里的任何内容。Proguard非常智能,他能推断出未使用的代码,并将其从我们的apk中去除。移动服务库还包括很多资源,如登录按钮的绘制图。开启shrinkResources会除去任何未使用的资源。
Android测试
这块是很有内容可挖的,如果能掌握andrid测试,对项目质量的提升会很有帮助的。我以后会对android测试进行更加细致的研究。在这里主要介绍一下。
主要分单元测试和链接测试。
单元测试是在pc的Java VM上运行,也就是不需要在android设置上跑测试。
连接测试需要在设备上运行。
通常,测试非android相关的泛型类时,应该使用单元测试。实际上,由于 单元测试与模拟Android STK 的实现方法相违背,任何调用Android API 的代码都会出现异常。你应该使用像Makido这样的模拟框架来模拟合适的Android依赖或者也可以使用连接测试。另外,你可以在gradle建立的脚本中配置测试选项,从而构建模拟的Android实现方法来返回默认值,而非抛出错误。任何情况下,作为开发人员,都可以决定如何更好的编写你的测试,以及如何以这样的方式构建您的代码,从而简化测试。
链接测试应该用来测试依赖 Android API 的逻辑,或像集成测试 和 性能测试 等更高级的测试。记住,连接测试是被包装成APK的形式安装在设备上的。实际操作过程中,还会有更多需要开销的地方。
单元测试 和 连接测试 都有各自的源集,在src路径下,分别在叫做test和androidTest。测试也有“版本”的概念。允许你针对 构建类型 和 产品风格 编写测试,这些源集的命名惯例遵循与应用程序代码相同的模式,只是他们多了test和androidTest 前缀。