Android Gradle实战演练
前面讲了那么多gradle的基础语法,接下来就来看看实际的Android工程中gradle是如何使用的吧。
0x00 看看Android Studio默认的Gradle配置
首先来看看gradle默认的配置。在用Android Studio创建好一个工程之后,打开左侧的目录树:
1
图中我选中的那几个文件:两个build.gradle文件,一个gradle-wrapper.properties文件,还有一个setting.gradle,这几个文件就是我们在Android工程中常用到的。
首先在工程目录下找到这个文件:wrapper.properties,打开他:
#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
这个文件的用途,是让自己的工程配置gradle,直接看最后一句话:
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
这个uri表明本工程使用gradle是要从https://services.gradle.org/distributions/gradle-2.10-all.zip下载的gradle2.10版本。
然后打开工程目录看一看,会发现根目录下有一个build.gradle和一个seeting.gradle,在app目录下有一个build.gradle,根据上一篇blog我们知道,每一个要构建的Project下都会有一个build,gradle,所以此处应该是在一个根Project下有多个要构建的Project,换算到Android中就是一个项目中构建多个Module,因此在这个setting.gradle文件中会有如下代码:
include ':app'
这就是说每构建一个module就要在这里配置一下,而Android Studio已经很智能的帮我们配好了,手动增加一个module,再打开setting.gradle:
include ':app', ':demo'
看,果然这里又多了一项配置,说明前面我们理解的没有问题。
接下来看看两个build.gradle文件,首先看看根目录下的build.gradle:
这个文件的内容主要包含了两个方面:一个是声明仓库的源:jcenter(), jcenter可以理解成是一个中央远程仓库,兼容maven中心仓库。另一个是声明了android gradle plugin的版本。
然后看看app目录下的build.gradle:
3
4
如上这些属性都是默认的,我们还可以自定义一些东西,比如自动打包debug等鞥,这些以后再说。
0x01 花式使用
除了上一节中的默认属性外,我们可以自己定义一些。
配置应用签名信息
在build.gradle中加入如下代码:
5
其中,toreFile是签名证书文件,keyAlias是别名,keyPassword是key的密码,storePassword是证书的密码。配好好相关信息即可在buildTypes配置使用。
混淆编译
我们在生成realeas版本后,如果不希望别人反编译我们的app,可以在构建时选择混淆编译,只需如下设置:
6
minifyEnabled为true表示启用混淆,proguardFile是混淆使用的配置文件,这里是module根目录下的proguard.cfg文件
打包优化
Android SDK中包含一个“zipalign”的工具,它能够对打包的应用程序进行优化。在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率。要使用只需如下:
多渠道打包
在国内有很多app市场,发布自己的app时也就需要多渠道打包了,也就是说为不同的应用市场作不同的配置,只需加上productFlavors属性,具体怎么操作,请跳转到这篇文章看看:Gradle多渠道打包详解
0x02 统一管理
通过一些gradle的api,我们可以把所有的属性统一作管理。比如先在根目录下创建一个config.gradle,内容如下:
ext {
configure = [
compileSdkVersion:23,
buildToolsVersion:"23.0.3",
applicationId:"com.levent_j.learngradle",
minSdkVersion:14,
targetSdkVersion:23,
versionCode:1,
versionName:"1.0",
]
dep_version = [
'appcompat-v7':'23.4.0',
'MaterialTabs':'0.11',
'MaterialDesign':'1.5@aar',
'library':'2.1.4',
'recyclerview-v7':'23.0.0',
'cardview-v7':'23.0.0',
'datetimepicker':'0.1.2',
'circleimageview':'2.0.0',
]
dep_path = [
'appcompat-v7':'com.android.support',
'MaterialTabs':'it.neokree',
'MaterialDesign':'com.github.navasmdc',
'library':'com.rengwuxian.materialedittext',
'recyclerview-v7':'com.android.support',
'cardview-v7':'com.android.support',
'datetimepicker':'com.github.citux',
'circleimageview':'de.hdodenhof',
]
}
这就是我们统一的配置文件,那么怎么使用呢?只需在app的build.gradle中这样写:
apply plugin: 'com.android.application'
def config = rootProject.ext.configure;
def dep_version = rootProject.ext.dep_version;
def dep_path = rootProject.ext.dep_path;
android {
compileSdkVersion config.compileSdkVersion
buildToolsVersion config.buildToolsVersion
defaultConfig {
applicationId config.applicationId
minSdkVersion config.minSdkVersion
targetSdkVersion config.targetSdkVersion
versionCode config.versionCode
versionName config.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile dep_path['appcompat-v7']+':appcompat-v7:'+dep_version['appcompat-v7']
compile dep_path['MaterialTabs']+':MaterialTabs:'+dep_version['MaterialTabs']
compile dep_path['MaterialDesign']+':MaterialDesign:'+dep_version['MaterialDesign']
compile dep_path['library']+':library:'+dep_version['library']
compile dep_path['recyclerview-v7']+':recyclerview-v7:'+dep_version['recyclerview-v7']
compile dep_path['cardview-v7']+':cardview-v7:'+dep_version['cardview-v7']
compile dep_path['datetimepicker']+':datetimepicker:'+dep_version['datetimepicker']
compile dep_path['circleimageview']+':circleimageview:'+dep_version['circleimageview']
}
通过这样统一的配置,gradle的各种设置也显得很清晰了。本系列文章到此结束,如果有不懂的地方,请参考官方文档。