先来解释几个名词
构建variant
一个构建variant是由一个构建类型和一个product flavor构成的,那么什么是构建类型和product flavor呢?
构建类型
在Gradle的Android插件中,构建类型通常被用来定义如何构建一个应用或者依赖库
看下app module下的build.gradle中的buildTypes代码块
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这里的release就是构建类型,这里还有一个默认存在的构建类型debug,每个module都有一个debug构建类型,也是默认的构建类型,你可以重写它来达到覆盖其中某些属性的目的。
自定义构建类型
处理release和debug这两个构建类型外,我们还可以自己定义一些构建类型
例如:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
staging{
applicationIdSuffix ".staging"
versionNameSuffix "-staging"
buildConfigField("String","API_URL","\"http://192.168.3.169\"")
}
}
staging构建类型为applicationID定义了一个新的后缀,这样利用staging生成的apk的applicationID就会加上这个后缀,看下debug、release、staging这三个构建版本对应的applicationID
- debug:com.package
- release:com.package
-
staging:com.package.staging
这也就是说你可以在同一台手机上同时安装release版本和staging版本
在自定义一个新的构建类型时,我们可以利用一个已有的构建类型来初始化该构建类型
大概这样:
product flavor
product flavor用来创建不同的版本(怎么听起来跟构建版本的作用相同啊???它们的作用是不同的),典型的例子是你的应用有免费版和付费版,或者是功能相同而品牌不同的应用(例如说掌阅公司给华为手机、小米手机、三星手机做的阅读软件(举个例子而已))。
如果说你不确定是否需要一个新的构建类型还是需要一个新的product flavor,那么你需求问问你自己,这个app是否是一个全新的app,也就是说在app store中,这是个完全独立的app,完全独立于你已有的应用发布,如果是的话,那么就用product flavor ,否则的话就用构建类型。
创建product flavor
在module的build.gradle文件中android代码块中:
productFlavors{
red{
applicationId 'com.example.huozhenpeng.myapplication.red'
versionCode 3
}
blue{
applicationId 'com.example.huozhenpeng.myapplication.blue'
minSdkVersion 15
versionCode 4
}
}
签名配置
所有的构建版本(buildtypes)和product flavors都可以配置签名,也可以在defaultConfig下配置默认签名。