标签:
默认情况下,debug被配置成使用一个debug keystory。debug keystory使用了默认的密码和默认key及默认的key密码。debug构建类型会自动使用debug签名配置。在你的Module的build.gradle文件中添加:
android {
......
signingConfigs {
myConfig{
storeFile file("yanbober.keystore")
storePassword "gradle"
keyAlias "gradle"
keyPassword "gradle"
}
}
buildTypes{
release {
runProguard true
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
signingConfig signingConfigs.myConfig
}
}
}
虽然经常使用项目根目录的相对路径作为keystore的路径,但是也可以使用绝对路径,尽管这并不推荐(除了自动创建出来的debug keystore)。运行gradle clean gradle build即可生成签名混淆对齐的app。
Android应用的发布需要面对各种各样的市场,我们称之为渠道。通常作为开发者我们需要知道应用是从哪个渠道下载的。这种统计信息一般常用的是百度统计或者友盟统计。
这里举例时使用友盟统计为例说明问题。原理是Gradle的Manifest Merger。
在AndroidManifest.xml里配置所谓的PlaceHolder。
<meta-data
android:name="CHANNEL"
android:value="${CHANNEL_VALUE}" />
在模块build.gradle文件的defaultConfig加上PlaceHolder,作用是声明CHANNEL_VALUE是可替换值的PlaceHolder,同时为其设置yanbober默认值。
android {
......
defaultConfig {
......
manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ]
}
}
在模块的build.gradle文件里添加ProductFlavors配置。
ProductFlavors其实就是可定义的product特性,与Manifest Merger使用就可以在一次编译过程中产生多个具有自己特性配置的版本。
下面这个配置的作用就是为每个渠道包产生不同的CHANNEL_VALUE的值。
android {
......
defaultConfig {
......
manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ]
}
productFlavors {
yanbober{}
wandoujia{}
xiaomi{}
baidu{}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [ CHANNEL_VALUE:name ]
}
}
批量生成多渠道包:进入工程目录下运行gradlew assembleRelease。可以看到编译一共产生了4个apk,分别对应在productFlavors段定义的4个渠道。反编译打开AndroidManifest.xml就会发现CHANNEL这一段的配置已经被修改。
生成单个渠道包:打开AS的Gradle Tasks面板模块有很多任务,直接双击对应的耽搁渠道任务生成对应的apk。
用命令行单独生成xiaomi渠道使用gradlew assemblexiaomiRelease就好了。
标签:
原文地址:http://www.cnblogs.com/wust221/p/5427017.html