AndroidStudio使用gradle打包并实现多渠道打包

来源:互联网 发布:网络嗅探器用哪个好 编辑:程序博客网 时间:2024/06/07 11:36
        介绍:

         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'
}
}
        b:构建类型(debug版本和正式版的一些配置,如是不是最小化,是不是混淆代码等)
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
}

        有了签名信息,就可以进行apk的输出了,说实话,刚开始百度了一些如何使用gradle进行apk打包,说的基本上都是通过命令行来完成,基本上全部是你复制我,我复制他的,很水。AndroidStudio的图形化界面就很好的提供了操作。

        最右边的Gradle就可以看到你工程下的所有项目(如果没有显示就点击刷新一下就有了),点击这个assemble就可以打包了,同样,下面也提供了针对debug或者release版本的构建,非常方便。好了,看一下我们的劳动成果吧。注:gradle默认有输出目录,就是在xxx\build\outputs\apk,xxx是你的项目目录。在这里,就会找到打包好的apk了。
        
        其实,在上面的签名信息配置和构建类型同样提供了图形化的界面,在 Project Structure中,可以进行签名等信息的配置。在这里进行添加,删除都会自动修改build.gradle这个文件的信息的,所以,本人认为在这里更好,傻瓜式操作,多简单。

        如何实现多渠道的打包

        为了方便数据的统计,友盟是常用的第三方sdk,需要我们在 AndroidManifest.xml中配置如下标签。

<meta-data
android:name="CHANNEL"
android:value="channel"
/>
        这个value值就是渠道号。一个个手动改太麻烦了,只需要在gradle中加几行代码就可以了。
productFlavors {
baidu {
}
wandoujia {
}
}
//将value中具体值改为x,在构建的时候改变
<meta-data
android:name="CHANNEL"
android:value="${x}"
/>
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [x: name]
}
        这样,就可以产生baidu,wandoujia,2个渠道的apk包了。同样,productFlavors提供了图形化的界面,就是上图的Flavors选项了。不停的添加就行了,把name替换x就是value了。
        自定义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")
}
}
        解释:把apk输出到/Users/air/Desktop/myapk这个目录下,修改名字为前面是start,中间是渠道号,后面是版本号。如:start-baidu-1.0.apk,并且,这里的就是我们需要的版本,什么debug版本不会在这里输出。
        贴一份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")
}
}
        关于gradle其它的就不显示了,就列出打包的操作,上面都有提到。好了,终于完成的gradle的apk打包了。
        如何更快的打包

        虽然完成了多渠道的打包,上面的每打一个渠道,都会进行一次构建,如果就几十个渠道包的时候,半小时的打包是免不了了。能不能一次构建,就可以实现产生多个不同标识的apk的,答案是可以的,具体百度一下:美团的打包之旅。里面完全讲述了如何更快的打包,需要python来实现。亲测,这个方案非常方便。一次操作,长期使用。这里就不多说了。

0 0