介绍:
Google推出了新的开发工具,AndroidStudio,并且采用了新的工程构建工具,Gradle构建。在每个项目中,都会有一个build.gradle文件来构建。这里,主要来讲打包方面常见的操作。默认,会产生2个版本,debug版本和release版本。
需求:
打包一个apk十分简单,需要的就是一个密钥。点击build->Generate Signed APK 就会通过图形化界面进行傻瓜式操作了,但Android实际开发中,都需要放到多个应用市场,为了进行统计,会对不同市场上的apk进行区别,友盟也可以统计到不同市场的用户数据,都是需要这个标识,即渠道号。要实现多渠道打包,就需要了解一下gradle中关于打包方面的一些东西了。
了解gradle打包的基本知识:
a:签名信息的配置
signingConfigs {
config {
keyAlias 'xxx'
keyPassword 'xxx'
storeFile file('/Users/air/develop/xxx')
storePassword 'xxx'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
如何实现多渠道的打包
为了方便数据的统计,友盟是常用的第三方sdk,需要我们在 AndroidManifest.xml中配置如下标签。
<meta-data
android:name="CHANNEL"
android:value="channel"
/>
productFlavors {
baidu {
}
wandoujia {
}
}
//将value中具体值改为x,在构建的时候改变
<meta-data
android:name="CHANNEL"
android:value="${x}"
/>
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [x: name]
}
自定义apk的输出路径和名称
默认的输出路径太麻烦,名称为module名+渠道号+版本信息三部分组成,如:app-baidu-debug.apk。
下面的代码可以完成自定义。
def outputDir = "/Users/air/Desktop/myapk"
def startName = "start"
android{
……
}
android{
……
android.applicationVariants.all { variant ->
def file = variant.outputs[0].outputFile
def fileParent = new File(outputDir)
// String name = file.name
// String[] arr = name.split("-")
variant.outputs[0].outputFile =
new File(fileParent,startName +"-"+name+"-" + defaultConfig.versionName + ".apk")
}
}
贴一份gradle文件
def outputDir = "/Users/air/Desktop/myapk"
def startName = "start"
android {
signingConfigs {
config {
keyAlias 'xxx'
keyPassword 'xxx'
storeFile file('/Users/air/develop/xxx')
storePassword 'xxx'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}
productFlavors {
baidu {
}
wandoujia {
}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [x: name]
}
android.applicationVariants.all { variant ->
def file = variant.outputs[0].outputFile
def fileParent = new File(outputDir)
// String name = file.name
// String[] arr = name.split("-")
variant.outputs[0].outputFile =
new File(fileParent,startName +"_"+name+"_" + defaultConfig.versionName + ".apk")
}
}
如何更快的打包
虽然完成了多渠道的打包,上面的每打一个渠道,都会进行一次构建,如果就几十个渠道包的时候,半小时的打包是免不了了。能不能一次构建,就可以实现产生多个不同标识的apk的,答案是可以的,具体百度一下:美团的打包之旅。里面完全讲述了如何更快的打包,需要python来实现。亲测,这个方案非常方便。一次操作,长期使用。这里就不多说了。