gradle在Android中的使用(二)

上一博客学习了gradle的基本内容,这次我们继续学习一下怎么使用gradle进行签名打包和分渠道打包

1 签名打包

关于什么是签名以及怎样生成自己的签名我在以前的博客中介绍过了,不熟悉的话可以参考这一篇

在android{}添加一下代码片段就可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
signingConfigs {

mySignConfig {
storeFile file("yourKeyStoreName.keystore")
storePassword "yourKeyStorePassword"
keyAlias "yourKeyAlias"
keyPassword "yourKeyAliasPassword"
}

buildTypes {
release {
signingConfig signingConfigs.mySignConfig
}
}

}

然后运行 gradle build命令就会得到[项目名]-release-unaligned和[项目名]-release,他们都是签名的apk文件,区别是前者没有经过ZipAlign优化。当然,我们一般在签名优化apk的时候都需要一个proguard文件,所以上面的完整的写法是:

1
2
3
4
5
6
7
buildTypes {
release {
signingConfig signingConfigs.mySignConfig
runProguard ture
proguardFile 'proguard-android.txt'
}
}
2 同一设备上安装不同版本的apk

在我们开发过程中,一般都会有发布版和一个调试版。常常不得不为了装另一个版而要覆盖安装,那么我们能不能再一个设备上同时安装这两个版本呢?

答案肯定是可以的。我们知道,android区别程序是通过包名来实现的,所以我们修改一下包名不就行了么。但是这么做又比较麻烦,所以gradle在构建程序的时候给我们提供了一个非常简单的方法。

在android{}下面的buildTypes{}下面添加debug版本,并且设置一个新的包名(和我们想到的方法一样,但是这样不需要修改包名就可以做到了非常方便)。

1
2
3
4
5
6
7
8
9
buildTypes {
release {

}
debug {
//其实也可以在release中做类似的操作
applicationIdSuffix '.debug'
}
}

这样生成的debug版本和release版本可以同时安装在一个设备上,这样调试起来就非常方便了。

3 多渠道打包

例如我开发的程序有海外版和国内版两个版本,我们可以在android{}中添加一下代码

1
2
3
4
5
6
7
8
productFlavors {
playstore {
packageName="com.yourname.applicationname.playstore"
}
wandoujia {
packageName="com.yourname.applicationname.wandoujia"
}
}

然后执行gradle build就能得到[项目名]-[渠道名]-release.apk文件了。非常方便。

并且productFlavors还可以切换不同的源码进行编译,比如我们使用不同的mainfest文件来打包apk可以这样做,在android{}下的sourceSets{}下面这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}

wandoujia {
manifest.srcFile 'wandoujia/AndroidManifest.xml'
}

playstore {
manifest.srcFile 'playstore/AndroidManifest.xml'
}


instrumentTest.setRoot('tests')
}

编写构建代码的时候可以参考这个写法:gradle

end