强大的Gadle
自Android Studio发布以来,Gradle作为构建工具,有着强大的功能。我们可以通过简单的配置来实现一些复杂的构建过程。包括自动区分版本打包,多渠道打包等。引用一张官方的构建流程图:
主要文件
咱们最常用到的是build.gradle文件,通常的项目中会有两个:
- Project根目录下,Project级别的build.gradle文件
- 各个Module目录下,Module级别的build.gradle文件
Project级别的build.gradle
这个是顶级的构建文件,位于项目根目录
Module级别的build.gradle
通常我们新建项目的时候,这个目录是app/build.gradle。这个文件中就有很多可以给我们进行自定义了。包括 android{} repositories{} dependencies{} 等;
android{}
这边挑几个主要的介绍123456789101112131415161718192021222324252627android {//...//默认配置defaultConfig{}//编译类型配置buildTypes {//可以根据实际情况来定义各种构建类型debug{//对于debug版本的单独配置,包括debug开关,和一些参数的配置}release{}//...}//渠道打包。可以针对不同渠道生成不同的包名。也可以用来区分免费版和付费版productFlavors {free {applicationId 'com.example.myapp.free'}paid {applicationId 'com.example.myapp.paid'}}//...}repositories{}
1234567repositories {//主要是一些仓库的设置,支持本地代码库mavenCentral()flatDir {dirs 'aars'}}dependencies{}
比较常用的是这个配置,用来依赖各种第三方代码12345678910111213//代码依赖dependencies {//本地的依赖compile fileTree(include: ['*.jar'], dir: 'libs')//通常的依赖compile 'io.reactivex:rxjava:1.1.6'//测试依赖testCompile 'junit:junit:4.12'//正式发布的时候依赖releaseCompile 'com.android.support:appcompat-v7:25.3.1'//只在调试的时候依赖debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'}
一些实用的配置和技巧
关于签名的一些配置
在实际开发中,大部分情况下,我们会将代码通过Git上传至代码仓库,这样的话,签名配置等一些敏感信息,例如密码等都不适合上传。那么这个时候,我们可以使用本地的一个「local.properties」文件来进行本地的签名信息配置(该文件不被上传至代码库,库将其添加至.ignore文件中)。Android Studio会默认为我们生成这么一个文件的,它本来是用来配置SDK在本地的路径等信息的。现在我们也能利用这个文件进行签名文件的配置。
首先我们将我们的签名信息配置到local.properties文件中
123456# 本地签名文件部署,主要修改storeFile的路径值keyAlias=examplekeyPassword=123456# 签名文件的路径storeFile=/Users/keys/example.jksstorePassword=123456在build.gradle开头加载这个文件(在 android{} 代码之前添加)
1234//加载本地签名配置def keystorePropertiesFile = rootProject.file("local.properties")def keystoreProperties = new Properties()keystoreProperties.load(new FileInputStream(keystorePropertiesFile))在 signingConfigs{} 中配置
12345678signingConfigs {ExampleSign {keyAlias keystoreProperties['keyAlias']keyPassword keystoreProperties['keyPassword']storeFile file(keystoreProperties['storeFile'])storePassword keystoreProperties['storePassword']}}
经过以上3步的配置,就不用担心密码泄露的一些问题了。
动态配置AndroidManifest.xml中的一些值
在对接一些第三方的API时,往往需要在「AndroidManifest.xml」文件中进行「app_key」「app_secret」等参数的配置。
一般按照第三方API文档的做法,比如我接入一个阿里的推送服务,那我需要如下配置:
可是在实际生产中,我们往往会发布一个beta版用于发release版之前的测试,但是beta版和release版用的不是同一套「app_key」「app_secret」。这个时候比较笨的办法是,写两套,然后每次发布版本的时候,将其中一套注释掉。这样做当然是可行的,但是根据版本的不断迭代,往往会忘记对这一部分进行修改或者修改混乱,导致发布的版本产生混乱。
这个时候可以利用gradle结合AndroidManifest.xml进行动态的配置:
这里的 ${value} 的写法相当于定义了value这么一个变量,然后再在build.gradle文件中,找到不同的buildType
可以看到manifestPlaceholders可以有很多对这样的值进行设定。经过这样的设置,每次对不同版本打包时,都会自动找到相应的配置,这样就不需要每次打包都要进行修改了。
使用Android Studio切换运行不同的版本
通常使用Android Studio项目运行时,默认是使用的debug的配置。根据上面动态配置来看,我们是存在beta版或者release版的,有时候,我们会面对需要调试特定版本来判定服务器(服务器一般会有测试环境和生产环境的区分)或者第三方API在该版本下的配置是否正常运行的情形。
可是,我们总不能每次需要测试生产环境时,就打一个包,然后push到设备上进行安装吧。Android Studio为我们提供了一个运行切换的方法–Build Variant。通常,这个选项会在整个IDE的左下角,也可以通过「View」–>「Tool Windows」–>「Build Variant」找到。打开这个选项视图,可以看到各个Module及当前的Build Variant。这个Build Variant,指的是gradle中buildTypes和productFlavors排列组合所有的版本,比如,配置了2个buildTypes和2个productFlavors,那么会有2*2=4种组合。切换的方法也很简单,只需要点击选择你想切换的版本就好:
在选择版本之后,你运行的版本就是你选择的这个版本了。
打包自动生成包名
在辛苦的完成编码之后,我们打出了一个APP的安装包。这个安装包的名称为「app-release」你习惯性的给它重新命名了一番。只发这么一次版本打一次包的话这么做还好。如果要打很多个包,你总不能一个个命名过去吧。使用gradle进行配置的话会很方便,只需要在 android{} 中加入一段代码就可实现:
在new File()的第二个参数中,你可以传入想要的生成文件名的规则。上面这段代码生成的格式是「包名+build后缀_版本名.apk」其中 applicationIdSuffix 的值会根据不同bulidTypes生成后缀。
提供一份较完整的app/build.gradle文件供参考build.gradle